ansible經常使用命令使用

  1. ansible命令格式
    python

# 查看ansible幫助nginx

ansible -hweb

# 命令格式redis

Usage: ansible <host-pattern> [options]shell


-a MODULE_ARGS  # 模塊參數數據庫

-C, --check  # 幹跑,白跑django

-f FORKS, --forks=FORKS  # 指定併發,默認5個json

--list-hosts  # 列出主機flask

-m MODULE_NAME  # 模塊名稱windows

--syntax-check  # 檢查語法

-k  # 密碼


2.ansible連接機器

rpm -ql ansible|more # 查看ansible生成的文件


/etc/ansible

/etc/ansible/ansible.cfg  # 配置文件

/etc/ansible/hosts  # 配置管控機

/etc/ansible/roles  # 空文件夾

# 在hosts文件中將主機地址一個個添加進去


ansible 主機地址 -m ping -k  # ansible底層經過ssh實現


# 生成密鑰

ssh-keygen

# 將公鑰拷貝至目標主機

ssh-copy-id root@主機地址

# 經過ssh便可連接目標主機

ssh 'root@主機地址'

exit退出


# 完成上面的操做後 再去探測機器是否在線就不要再加-k

ansible 主機地址 -m ping


"""測試機器是否在線的方式及分組管理"""

ansible 192.168.226.101 -m ping  # 單獨機器的ping

ansible 192.168.226.101,192.168.226.102 -m ping  # 多個機器的ping

ansible all -m ping  # 所有機器

# 分組:好比有N多臺機器,有些是負責數據庫的,有些是uwsgi的,有些是redis的等

ansible web -m ping  # 單個的組

ansible web,db -m ping  # 多個組的並集

ansible 'web:&db' -m ping  # 多個組的交集  必須是單引號 雙引號不行

ansible 'web:!db' -m ping  # 多個組的差集,在前面可是不在後面


3.ansible模塊介紹

ansible-doc -l |wc -l  # 查看ansible總模塊數


4.ansible-doc 命令格式

-j  # 以json的方式返回數據

-l, --list  # 列出全部的模塊

-s, --snippet # 以片斷式顯示模塊信息 

# 經常使用命令

ansible-doc -s 模塊名  # 查看模塊幫助信息


模塊介紹

  • command 

分組機器批量執行系統命令


ansible-doc -s command


ansible web -m command -a "pwd"

ansible web -m command -a "ls"

ansible web -m command -a "chdir=/tmp pwd" #切換目錄並執行命令

ansible web -m command -a "creates=/tmp pwd" #由於tmp目錄存在,pwd不會執行

ansible web -m command -a "creates=/tmp2 pwd" #由於tmp2不存在,pwd執行

ansible web -m command -a "removes=/tmp2 pwd" #由於tmp2不存在pwd不執行

ansible web -m command -a "removes=/tmp pwd" #由於tmp目錄存在,pwd會執行


# 建立用戶

ansible web -m command -a 'useradd jason'

# 設置密碼(本機設置)  並需二次確認

passwd jason

# 設置密碼(本機設置)  無需二次確認

echo "123" |passwd --stdin jason #設置用戶的密碼



  • shell

當命令中包含$home和常見符號(<,>,|,;.&)等的時候,須要使用shell才能生效


ansible-doc -s shell


ansible web -m shell -a "echo '123' |passwd --stdin jason"

ansible web -m shell -a "chdir=/tmp pwd" shabang

ansible 192.168.226.101 -m shell -a "bash a.sh" #執行shell腳本

ansible 192.168.226.101 -m shell -a "/root/a.sh" # 執行shell腳本,文件要有執行的權限

ansible 192.168.226.101 -m shell -a "/root/a.py" #執行Python文件


  • script

在遠程機器上執行本地腳本

ansible-doc -s script

ansible db -m script -a "/root/a.sh"  # 執行本地的文件,管控機的文件

ansible db -m script -a "creates=/root/a.sh /root/a.sh"  # 判斷被控機上的文件是否存在,若是不存在,就執行,若是存在,就跳過

ansible db -m script -a "creates=/tmp /root/a.sh"  # 判斷被控機上的文件


  • copy

將本地的文件拷貝到遠程機器

ansible-doc -s copy


backup  # 建立一個備份文件,以時間戳結尾

content  # 直接往文件裏面寫內容

dest  # 目標地址

group  # 屬組

mode  # 文件的權限 W 2 R 4 X 1

owner  # 屬主

src  # 源地址

ansible web -m copy -a "src=/etc/fstab dest=/tmp/f"  # 複製本地文件到遠程主機,並修改文件名,屢次執行不會改變,由於checksum值是同樣的

ansible web -m copy -a "src=a.sh dest=/tmp/a.sh backup=yes"  # 複製本地文件,並備份

ansible web -m copy -a "src=a.sh dest=/tmp/a.sh backup=yes group=alex mode=755"  # 複製本地文件到遠程主機,並指定屬組和權限

ansible web -m copy -a "src=/etc/init.d dest=/tmp backup=yes group=alex mode=755"  # 複製本地的目錄到遠程主機,修改目錄權限,則目錄裏面的文件也會跟着變動

ansible web -m copy -a "src=/etc/init.d/ dest=/tmp backup=yes group=alex mode=755"  #複製本地目錄下的全部文件,

ansible web -m copy -a "content='大弦嘈嘈如急雨,小弦切切如私語,嘈嘈切切錯 雜彈,大珠小珠落玉盤' dest=/tmp/b"  # 直接往文件裏面寫內容,覆蓋寫,慎用


  • File

文件屬組、權限、硬軟鏈等


group  # 屬組

mode  # 權限

owner  # 屬主

path  # 路徑

src  # 軟硬連接

state =link

state =hard

state

directory  # 目錄

file  

touch  # 空文件

absent  # 刪除

link  # 軟鏈接

hard  # 硬連接

  

ansible web -m file -a "path=/jason5 state=directory owner=jason" #建立目錄,並制定屬主

ansible web -m file -a "path=/tmp/jason.txt state=touch mode=777" #建立文件,並指定權限

ansible web -m file -a "path=/tmp/cron src=/var/log/cron state=link" #建立軟連接,連接的是本身的文件

ansible web -m file -a "path=/tmp/cron state=absent" # 刪除軟鏈接

ansible web -m file -a "path=/jason5 state=absent" #刪除文件夾



軟鏈接   快捷方式(windows)   ln -s   源文件修改軟鏈接修改     源文件刪除軟鏈接失效    能夠跨分區 

硬連接   硬盤的位置 ln       源文件修改硬連接修改        源文件刪除硬連接不變    不能夠跨分區

複製     開闢新空間 cp       源文件修改cp的不變         源文件刪除不變       能夠跨分區


  • fetch

拉取遠程主機文件

dest 目標地址

src 源地址

ansible web -m fetch -a "src=/var/log/cron dest=/tmp"  # 拉取遠程主機的文件,並以主機ip地址或者主機名爲目錄,而且保留了原來的目錄結構


  • yum模塊

ansible-doc -s yum


disablerepo  # 禁用某個源

enablerepo  # 啓用某個源

name  # 包名

state

install

remove

yum install -y python2-pip  # 在epel源中

# 將主機中下載好的pip拷貝到其餘被管控機上

ansible all -m copy -a 'src=/etc/yum.repos.d/epel.repo dest=/etc/yum.repos.d/epel.repo'


ansible web -m yum -a "name=python2-pip"  # 安裝單個軟件包


# 查看是否安裝 對應機器上執行下述命令

rpm -q 包名

# eg:rpm -q pip/python-pip/python2-pip/redis


ansible web -m yum -a "name=python2-pip,redis"  # 安裝多個軟件包

ansible web -m yum -a "name='@Development Tools'"  # 安裝包組

ansible web -m yum -a "name=nginx state=absent"  # 卸載


  • pip模塊

python安裝第三方模塊的工具


pip freeze > requirements.txt   # 將本地環境導出到某個文件中,文件中不寫版本信息默認安裝最新版本

pip install -r requirements.txt  # 安裝全部的包(******)


pip list  # 查看全部的包

pip uninstall flask  # 卸載


# 下載包

Python setup.py build 

python setup.py install


  • pip模塊

ansible-doc -s pip


chdir  # 切換目錄

name  # 包名

requirements  # 導出的文件

virtualenv  # 虛擬環境


# 安裝django(時間較長~)

ansible web -m pip -a "name=django==1.11"


  • service模塊

ansible-doc -s service

# 關鍵參數

enabled #開機啓動

name #服務名稱

state  

    started

    stopped

    restarted

    reloaded

ansible web -m service -a "name=redis state=started" #啓動

ansible web -m service -a "name=redis state=stopped" #關閉

ansible web -m service -a "name=redis enabled=yes" #設置開機自啓動


  • cron計劃任務模塊

# 格式

* * * * * job

分 時 日 月 周 任務


ansible-doc -s cron


day  # 天

disabled  # 禁用crontab,表現形式加#

hour  # 小時

job  # 任務

minute  # 分鐘

month  # 月

name  # 名字,描述信息

user  # 用戶

weekday  # 周


# 添加時名字必須不一樣,不加名稱爲None(crontab -l查看計劃任務)

ansible web -m cron -a "minute=12 name=touchfile job='touch /tmp/xiaoqiang.txt'"  # 建立

ansible web -m cron -a "name=touchfile state=absent"  # 刪除

ansible web -m cron -a "minute=12 name=touchfile2 job='touch /tmp/jason.txt' disabled=yes"  # 註釋

ansible web -m cron -a "name=None state=absent"  # 刪除名稱爲空的計劃任務


  • user模塊

ansible-doc -s user


group # 屬組

groups  # 附加組

home  # 設置家目錄

name  # 用戶名

remove  # 刪除用戶並刪除用戶的家目錄

shell  # 用戶登陸後的shell

system  # 系統用戶

uid  # 用戶的id

ansible web -m user -a "name=alex10 shell=/sbin/nologin home=/opt/alex10 uid=3000 groups=root" #建立用戶,並指定用戶的shell,家目錄,uid,以及附加組

ansible web -m user -a "name=alex11 shell=/sbin/nologin home=/opt/alex11"

ansible web -m user -a "name=alex12 system=yes" #建立系統用戶

ansible web -m user -a "name=alex12 state=absent" #刪除用戶,單不刪除家目錄

ansible web -m user -a "name=alex11 state=absent remove=yes" # 刪除用戶並刪除用戶的家目錄


  • group模塊

ansible-doc -s group


gid  # 組id

system  # 系統組

name  # 名稱

ansible web -m group -a "name=jason10 system=yes gid=5000"  # 建立系統組

ansible web -m group -a "name=jason11"  # 建立普通的組

ansible web -m group -a "name=jason11 state=absent"  # 刪除組


  • setup模塊

收集遠程主機的一些基本信息

# 查看詳細信息

ansible 主機名 -m setup|more


ansible_all_ipv4_addresses  # 全部的ipv4地址

ansible_all_ipv6_addresses  # 全部的ipv6地址

ansible_architecture  # 系統的架構

ansible_date_time  # 系統時間

ansible_default_ipv4  # 默認的ipv4地址

address  # ip地址

alias  # 網卡名稱

broadcast  # 廣播地址

gateway  # 網關

netmask  # 子網掩碼

network  # 網段

ansible_default_ipv6  # 默認的ipv6地址

ansible_device_links  # 系統的磁盤信息

ansible_distribution  # 系統名稱

ansible_distribution_file_variety  # 系統的基於公司

ansible_distribution_major_version  # 系統的主版本

ansible_distribution_version  # 系統的所有版本

ansible_dns  # 系統的dns 默認udp 端口53

ansible_domain  # 系統的域 ldap

ipv4  # ipv4地址

ansible_env  # 系統的環境

ansible_fqdn  # 系統的完整主機名

ansible_hostname  # 系統的簡寫主機名

ansible_kernel  # 系統的內核版本

ansible_machine  # 系統的架構

ansible_memtotal_mb  # 系統的內存

ansible_memory_mb  # 系統的內存使用狀況

ansible_mounts  # 系統的掛載信息

ansible_os_family  # 系統家族

ansible_pkg_mgr  # 系統的包管理工具

ansible_processor  # 系統的cpu

ansible_processor_cores  # 每顆cpu的核數

ansible_processor_count  # cpu的顆數

ansible_processor_vcpus  # cpu的個數=cpu的顆數*每顆cpu的核數

ansible_python  # 系統python信息

ansible_python_version  # 系統python的版本

ansible_system  # 系統名字

相關文章
相關標籤/搜索