Ansible教程 第四章 Ad-Hoc命令集

Ad-Hoc命令集由/usr/bin/ansible實現。命令用法如下:

ansible <host-pattern> [options] 

參數選項鏈接

實例展示:

情景1:檢查proxy組所有主機是否存活。
執行命令:ansible proxy  –f 5 –m ping   

情景2:返回proxy組所有主機的hostname,并打印最詳細的執行過程到標準輸出。
執行命令:ansible proxy -s -m command -a 'hostname' -vvv 

情景3:列出Web組所有主機列表。
執行命令:ansible web --list 

情景4:對10.21.40.61服務器以root執行sleep 20,設置最大連接超時時長為2s,且設置為后臺運行模式,
      執行過程每2s輸出一次進度,如5s還未執行完則終止該任務。
執行命令:
// time命令可省,為方便觀察結果,這里使用time命令查看執行時長  
time ansible 10.21.40.61 -B 5 -P 2 -T 2 -m command -a 'sleep 20'  -u root

情景5:批量查看apps組所有主機的磁盤容量(使用command模塊)。
執行命令:ansible apps -a "df -lh" 

情景2:批量查看遠程主機內存使用情況(shell模塊)。
執行命令:ansible apps -m shell -a  "free -m"

Ansible的并發特性

步驟1:定義[apps]組,編輯/etc/ansible/hosts的配置。
執行命令vi /etc/ansible/hosts,鍵入i進入vi編輯模式,跳轉到文件最末尾,添加如下配置:

[apps]  
192.168.37.130  
192.168.37.155  
192.168.37.142  
192.168.37.156 

步驟2:多次執行Ansible命令,執行命令如下:

ansible apps -m ping -f 3

步驟3:對比返回結果,如表3所示:


返回結果分析如下:
1)同樣的命令多次執行,但每次的輸出結果都不一定一樣。
2)輸出結果不是按照/etc/ansible/hosts中[apps]定義的主機順序輸出。
3)結果輸出基本上遵循每次輸出3條記錄(線程池始終保持3個線程,所以這里如果每次輸出小于等于3都是正常的)。

建議并發數配置的CPU核數偶數倍就好。如4Cores 8GB的服務器,建議最多并發20個線程。

如何使用不熟悉的模塊

使用ansible-doc來幫忙了解不熟悉的模塊:

Usage: ansible-doc [options] [module...]

Options:
  -a, --all             Show documentation for all modules
  -h, --help            show this help message and exit
  -l, --list            List available modules
  -M MODULE_PATH, --module-path=MODULE_PATH
                        specify path(s) to module library (default=None)
  -s, --snippet         Show playbook snippet for specified module(s)
  -v, --verbose         verbose mode (-vvv for more, -vvvv to enable
                        connection debugging)
  --version             show program's version number and exit

使用方法:

情景1:顯示所有可用模塊。
執行命令:ansible-doc –l 

情景2:以yum模塊為例,我們希望獲取yum模塊的HELP說明。
執行命令:ansible-doc yum 

步驟:安裝redhat-lsb。
執行命令:ansible apps -m yum -a 'name=redhat-lsb state=present' 

安裝ntp服務。
執行命令:ansible apps -s -m yum -a "name=ntp state=present" 

啟動ntp服務,并設置為開機啟動。
執行命令:ansible apps -m service -a "name=ntpd state=started enabled=yes"

安裝Nginx。
執行命令:ansible proxy -m yum -a "name=nginx state=present" 

Ansible的YUM模塊同樣支持指定某版本安裝,其name參數指定具體版本地址(網絡或本地均可)。YUM模塊也支持從網絡安裝或從本地安裝。

網絡安裝,執行命令:
ansible proxy -m yum -a "name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present" 
如果從本地安裝,執行命令:
ansible proxy -m yum -a "name=/usr/local/src/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present" 

另一實例:

1)Nginx、PHP安裝命令如下:
ansible app -m yum -a "name=nginx state=present"  
ansible app -m yum -a "name=php state=present" 

2)Django安裝命令如下:
步驟1:安裝MySQL-python和python-setuptools依賴包。
ansible app -m yum -a "name=MySQL-python state=present"  
ansible app -m yum -a "name=python-setuptools state=present" 
步驟2:安裝Django。
ansible app -m pip -a "name=django state=present" 
步驟3:檢查Django安裝是否正常,執行命令如下:
ansible app -m command -a "python -c 'import django; print django.get_version()'" 

指定特定主機執行

1)--limit:通過--limit參數限定主機做變更。

情景:在App組中啟動192.168.37.15的NTP服務。
命令用法:ansible app -m command -a "service ntpd status" --limit "192.168.37.158" 

2)指定IP:通過指定具體IP限定主機做變更。

情景:啟動192.168.37.158的NTP服務。
執行命令:ansible 192.168.37.158 -m command -a "service ntpd status" 

3)用“:”作分隔符,指定多臺機器做變更。

情景:啟動192.168.37.158和192.168.37.161的NTP服務。
執行命令:ansible "192.168.37.158:192.168.37.161" -m command -a "service ntpd status" 

4)通過“*”泛匹配,更靈活地針對多臺主機做變更。

情景:啟動192.168.37.*所有主機的NTP服務。
執行命令:ansible 192.168.37.* -m command -a "service ntpd status" 

用戶和組管理

Ad-Hoc用戶與組管理
Linux系統用戶管理:user。
Windows系統用戶管理:win_user。
都是模塊
???????????

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容