標籤:opera hosts 參數 保留 file 通過 ref status 檔案中
Ad-Hoc 是指ansible下臨時執行的一條命令,並且不需要儲存的命令,對於複雜的命令會使用playbook。Ad-hoc的執行依賴於模組,ansible官方提供了大量的模組。 如:command、raw、shell、file、cron等,具體可以通過ansible-doc -l 進行查看 。可以使用ansible-doc -s module來查看某個模組的參數,也可以使用ansible-doc help module來查看該模組更詳細的資訊。
一、Ad-hoc 1、命令說明
一個ad-hoc命令的執行,需要按以下格式進行執行:
ansible 主機或組-m 模組名-a ‘模組參數‘ ansible參數
主機和組,是在/etc/ansible/hosts 裡進行指定的部分,當然動態Inventory 使用的是指令碼從外部應用裡擷取的主機;
模組名,可以通過ansible-doc -l 查看目前安裝的模組,預設不指定時,使用的是command模組,具體可以查看/etc/ansible/ansible.cfg 的“#module_name = command ” 部分,預設模組可以在該設定檔中進行修改;
模組參數,可以通過 “ansible-doc -s 模組名” 查看具體的用法及後面的參數;
ansible參數,可以通過ansible命令的協助資訊裡查看到,這裡有很多參數可以供選擇,如是否需要輸入密碼、是否sudo等。
2、後台執行
當命令執行時間比較長時,也可以放到後台執行,使用-B、-P參數,如下:
ansible all -B 3600-a "/usr/bin/long_running_operation --do-stuff" #後台執行命令3600s,-B 表示後台執行的時間
ansible all -m async_status -a "jid=123456789" #檢查任務的狀態
ansible all -B 1800-P 60-a "/usr/bin/long_running_operation --do-stuff" #後台執行命令最大時間是1800s即30分鐘,-P 每60s檢查下狀態,預設15s
二、命令執行模組
命令執行模組包含如下 四個模組:
command模組:該模組通過-a跟上要執行的命令可以直接執行,不過命令裡如果有帶有如下字元部分則執行不成功 “ "<", ">", "|", "&" ;
shell 模組:用法基本和command一樣,不過其是通過/bin/sh進行執行,所以shell 模組可以執行任何命令,就像在本機執行一樣;
raw模組:用法和shell 模組一樣 ,其也可以執行任意命令,就像在本機執行一樣;
script模組:其是將管理端的shell 在被管理主機上執行,其原理是先將shell 複製到遠程主機,再在遠程主機上執行,原理類似於raw模組。
註:raw模組和comand、shell 模組不同的是其沒有chdir、creates、removes參數,chdir參數的作用就是先切到chdir指定的目錄後,再執行後面的命令,這在後面很多模組裡都會有該參數 。
command模組包含如下選項:
creates:一個檔案名稱,當該檔案存在,則該命令不執行
free_form:要執行的linux指令
chdir:在執行指令之前,先切換到該指定的目錄
removes:一個檔案名稱,當該檔案不存在,則該選項不執行
executable:切換shell來執行指令,該執行路徑必須是一個絕對路徑
使用chdir的樣本:
ansible 192.168.1.1 -m command -a ‘chdir=/tmp/test.txt touch test.file‘
ansible 192.168.1.1 -m shell -a ‘chdir=/tmp/test.txt touch test2.file‘
ansible 192.168.1.1 -m raw -a ‘chdir=/tmp/text.txt touch test3.file‘
三個命令都會返回執行成功的狀態。不過實際上只有前兩個檔案會被建立成功。使用raw模組的執行的結果檔案事實上也被正常建立了,不過不是在chdir指定的目錄,而是在當前執行使用者的家目錄。
creates與removes樣本:
ansible 192.168.1.1 -a ‘creates=/tmp/server.txt uptime‘ #當/tmp/server.txt檔案存在時,則不執行uptime指令
ansible 192.168.1.1 -a ‘removes=/tmp/server.txt uptime‘ #當/tmp/server.txt檔案不存在時,則不執行uptime指令
script模組樣本:
要執行的指令檔script.sh內容如下:
#/bin/bashifconfigdf -hT
執行ansible指令:ansible 10.212.52.252 -m script -a ‘script.sh‘ |egrep ‘>>|stdout‘
本文出自 “無名小卒” 部落格,請務必保留此出處http://breezey.blog.51cto.com/2400275/1757588
Ansible4:Ad-hoc與命令執行模組【轉】