004.Ansible Ad-Hoc命令集
阿新 • • 發佈:2018-11-02
一 Ad-Hoc使用場景
Ad-Hoc更傾向於解決簡單、臨時性任務。1.1 Ad-Hoc基礎命令
基本語法: 1 ansible <host-pattern> [options]
<host-pattern>:指Inventory中定義的主機或主機組,可以為ip、hostname、Inventory中的group組名等。同時支援具有“.”、“*”或“:”等特殊字元的匹配型字串。
提示:<>表示該選項為必選,[]表述是該選項中的引數任選其一或多個。
1 [options]: 2 -v,--verbose:輸出更詳細的執行過程資訊,-vvv可得到執行過程所有資訊; 3提示:-m指定模組名稱, 預設情況下是指command模組, 可以省略不寫。-i PATH,--inventory=PATH:指定inventory資訊,預設/etc/ansible/hosts; 4 -f NUM,--forks=NUM:併發執行緒數,預設5個執行緒; 5 --private-key=PRIVATE_KEY_FILE:指定祕鑰檔案; 6 -m NAME,--module-name=NAME:指定執行使用的模組。
1 -M DIRECTORY,--module-path=DIRECTORY:指定模組存放路徑,預設/usr/share/ansible; 2-a 'ARGUMENTS',--args=‘ARGUMENTS’"模組引數; 3 -k,--ask-pass SSH:認證密碼; 4 -K,ask-sudo=pass sudo:使用者的密碼(--sudo時使用); 5 -o,--one-line:標準輸出至一行; 6 -s,--sudo:相當於Linux系統下的sudo命令; 7 -t DIRECTORY,--tree=DIRECTORY:輸出資訊至DIRECTORY目錄下,結果檔案以遠端主機命名; 8 -T SECONDS,--timeout=SECONDS:指定連線遠端主機的最大超時,單位是秒; 9 -B NUM,--background=NUM:後臺執行命令,超NUM秒後中止正在執行的任務; 10-P NUM,--poll=NUM:定期返回後臺任務進度; 11 -u USERNAME,--user=USERNAME:指定遠端主機以USERNAME執行命令; 12 -U SUDO_USERNAME,--sudo-user=SUDO_USERNAME:使用sudo,相當於Linux系統下的sudo命令; 13 -c CONNECTION,--connection=CONNECTION:指定連線方式,可用選項paramiko(SSH)、ssh、local,local方式常用於crontab和kickstarts; 14 -l SUBSET,--limit=SUBSET:指定執行主機; 15 -l ~REGEX,--limit=~REGEX:指定執行主機(正則); 16 --list-hosts:列出符合條件的主機列表,不執行任何命令。
- 場景1:檢查myhost主機組所有主機是否存活.
1 [[email protected] ~]# ansible myhost -f 5 -m ping解析: 172.24.8.32:表示執行命令的主機; SUCCESS:表示命令成功執行; => {……}:表示詳細返回結果; "changed": false,:表示沒有對主機做變更; "ping": "pong":表示執行ping命令返回結果為pong。
- 場景2:返回myhost組所有主機的hostname,並列印最詳細的執行過程到標準輸出。
1 [[email protected] ~]# ansible myhost1 -s -m command -a 'hostname' -vvv解析: 執行過程圖如下:
- 場景3:列出myhost組所有主機列表。
1 [[email protected] ~]# ansible myhost --list-hosts
- 場景4:將172.24.8.31伺服器以root執行sleep 20,設定最大連線超時為2s,且設定為後臺執行模式,執行過程每2s輸出一次進度,如5s還未執行完則終止該任務。
1 [[email protected] ~]# time ansible 172.24.8.31 -B 5 -P 2 -T 2 -m command -a 'sleep 20' -u root
1.2 通過Ad-Hoc檢視系統設定
- 場景1:批量檢視myhost組所有主機的磁碟容量(command模組)。
1 [[email protected] ~]# ansible myhost -a "df -hl"解析:rc=0表示ResultCode=0,即命令執行成功。
- 場景2:批量檢視遠端主機記憶體使用情況(shell模組)。
1 [[email protected] ~]# ansible myhost -m shell -a "free -m"
二 Ansible模組使用
2.1 Ad-Hoc檢視模組介紹
ansible-doc ansible-doc是Ansible模組文件說明,針對每個模組都有詳細的用法及應用案例介紹,類似Linux的man。 基本語法: 1 ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
引數:
-v,--version:顯示工具版本號;
-h,--help:顯示該help說明;
-M MODULE_PATH,--module-path=MODULE_PATH:指定Ansible模組的預設載入目錄;
-l,--list:列出所有可用模組;
-s,--snippet:只顯示playbook說明的程式碼段;
示例:
1 [[email protected] ~]# ansible-doc -l #列出支援的模組 2 [[email protected] ~]# ansible-doc yum #檢視模組功能說明
- 場景1:安裝redhat-lsb並檢視伺服器系統版本號。
1 [[email protected] ~]# ansible myhost -m yum -a 'name=redhat-lsb state=present' #安裝軟體解析: "changed":true:主機是否有變更,true表示有,false表示沒有; "msg":安裝過程資訊; "rc":0,resultcode:結果返回碼,非0返回碼往往是紅色並且錯誤的返回。
1 [[email protected] ~]# ansible myhost -a 'lsb_release -a'
- 場景2:為伺服器安裝MySQL,並啟動,同時設定為開機啟動.
1 [[email protected] ~]# ansible myhost -m yum -a 'name=mariadb,mariadb-server state=present' 2 [[email protected] ~]# ansible myhost -m service -a 'name=mariadb state=started enabled=yes'
三 Ansible主機、使用者與組管理
3.1 主機變更
- 情景1:指定組內特定主機變更。
1 [[email protected] ~]# ansible myhost -m service -a 'name=ntpd state=started' --limit "172.24.8.31"--limit:通過limit引數限定主機做變更
- 場景2:通過指定具體IP限定主機做變更。
1 [[email protected] ~]# ansible 172.24.8.32 -m command -a "systemctl start ntpd"
- 場景3:指定多臺主機做變更。
1 [[email protected] ~]# ansible 172.24.8.31:172.24.8.33 -m command -a "systemctl start ntpd"解析:使用:指定多臺伺服器,:非31-33,而是31和33兩臺主機。
1 [[email protected] ~]# ansible 172.24.8.3* -m command -a "systemctl stop ntpd"