所有的子產品都可以使用下面的指令檢視參數:
ansible-doc -s 子產品名 //查詢某個子產品的參數
ansible-doc -l //檢視所有子產品
子產品一:ping
ping子產品用來檢測主機群是否存活,連通。要用的參數比較少,常用的使用:
ansible test -m ping -uroot
//也可以不用-u指定使用者
子產品二:fetch
作用:從遠端主機群拉去一個檔案
使用該子產品必須要指定參數src和dest:
//拉去遠端的fstab檔案到本地/tmp下
ansible test -m fetch -a "src=/etc/fstab dest=/tmp/"
來看下結果:
192.168.247.180 | SUCCESS => {
"changed": false, //因為我自己之前拉過,已經存在了,是以不會改變
"checksum": "b6b5928e637bd4fe64c1c97b0d04e78f8bb5c3f1",
"dest": "/tmp/192.168.247.180/etc/fstab", 在/tmp下生成一個主機目錄,這樣同時拉去多個就不會混淆
"file": "/etc/fstab",
"md5sum": "beb1c2fe999a9d9a6ca3805e22d1253f"//會生成hash值,判斷檔案有沒有改變的依據,如果你改動了檔案,hash值不同就會覆寫
子產品三:copy
作用:把本地主機的檔案複制到遠端主機,作用和fetch相反
常用參數:
src:源檔案或目錄
dest: 目标路徑或檔案
force:yes或者no,預設 yes。表示強制覆寫
backup:備份。當遠端主機已經存在同名檔案時,如果backup為yes表示先把遠端檔案備份,再複制。如果為no表示不備份直接複制。
owner:拷貝到遠端主機後檔案或者目錄的屬主
group:屬組
mode:傳過去之後的權限
子產品四:file
作用:對檔案和目錄的相關操作,比如删除,建立,修改權限等。
常用參數:
path:要操作的目标檔案,這裡也可以了解為dest,必要參數。
state:指定對檔案進行何種操作,常有的touch,directory,link,hard,absent。
src:該參數在建立軟硬連結的時候需要指定指向哪個檔案。
force:強制參數,檔案不存在則生成,已存在則覆寫。
owner:指定檔案的屬主
group:屬組
mode:指定權限
recurse:相當于chmod -R,遞歸修改目錄中檔案的屬性。
示例:
建立檔案
ansible testA -m file -a "path=/tmp/ddd.txt state=touch"
//建立檔案,如果存在就會更新時間戳
建立目錄
ansible testA -m file -a "path=/tmp state=directory"
給/tmp/a.txt做軟連結指向/etc/passwd
ansible testA -m file -a "path=/tmp/a.txt src=/etc/passwd state=link"
硬連結
ansible testA -m file -a "path=/tmp/b.txt src=/etc/passwd state=hard"
删除/tmp/a.txt
ansible testA -m file -a "path=/tmp/a.txt state=absent"
修改檔案的屬主
ansible testA -m file -a "path=/tmp/aaab.txt owner=mysql"
修改權限
ansible testA -m file -a "path=/tmp/aaab.txt mode=0644"
子產品五:blockinfile
作用:追加,更新文本内容
常用參數:
path:必須參數,指定要操作的檔案
block:這裡就是要追加等操作具體的内容。
marker:标記,對于ansible插入的内容,會有兩行标記,分别在追加内容的上面和下面有begin和end。可以自定義标記。
state:present和absent。預設是前者追加插入,後者是删除追加的内容。
insertafter:插入時預設在放文本最後面,該參數指定添加在某一行後面,支援正規表達式。
backup:是否在修改檔案之前先把檔案進行備份
create:當操作檔案不存在時,是否建立對應檔案。
示例:
追加内容
ansible testA -m blockinfile -a 'path=/tmp/aaab.txt block="systemctl start httpd\nsystemctl stop httpd"'
//檢視/tmp/aaab的内容
1111 //這個是插入之前的,下面是插入的内容
# BEGIN ANSIBLE MANAGED BLOCK
systemctl start httpd
systemctl stop httpd
# END ANSIBLE MANAGED BLOCK
不指定state,也可以删除追加的内容,block為空
ansible testA -m blockinfile -a 'path=/tmp/aaab.txt block=""'
自定義标記
ansible testA -m blockinfile -a 'path=/tmp/aaab.txt block="systemctl start httpd\nsystemctl stop httpd" marker="#{mark} service to start"'
//mark是個變量,就是标記中的begin和end
檢視文本内容
1111
#BEGIN service to start
systemctl start httpd
systemctl stop httpd
#END service to start
absent删除追加的内容
ansible testA -m blockinfile -a 'path=/tmp/aaab.txt marker="#{mark} service to start" state=absent'
将追加内容放在開頭
ansible testA -m blockinfile -a 'path=/tmp/aaab.txt block="2222" marker="#{mark} service to start" insertbefore=BOF'
檢視文本内容
#BEGIN service to start
2222
#END service to start
1111
子產品六:lineinfile
作用:確定某一行在指定文本中,或者確定從文本中删除,還可以正規表達式替換文本内容
path:必要參數,指定要操作的檔案
line:指定操作的文本内容
regexp:使用正規表達式,當替換文本時如果有多行被比對,預設替換最後一個比對到的行,删除文本時,預設比對到的全部删除。
state:預設present,還有一個absent删除。
backrefs:當使用正則的時候,如果沒有比對到預設在文本最後面追加該内容,使用該參數為yes後,則不追加。該參數還有一個分組的作用,yes時,line中就可以對regexp中的分組進行引用。
insertafter:指定插入的位置,EOF表示插入到末尾,如果設定成正則,就插入到該正則之後。
insertbefore:BOF為最前面,設定了正則的話,正則之前。該參數和上面的insertafter在backrefs為yes時無效。
backup:是否修改前備份
create:不存在時是否建立
示例:
在遠端機器上建立一個實驗用的文本
cat aaab.txt
1111
2222
aaa1
bbb1
確定某一行在文本中,如果存在不做任何操作,不存在則追加在最後面
ansible testA -m lineinfile -a 'path=/tmp/aaab.txt line="1111"'
//1111在文本中,是以文本不會有變化
ansible testA -m lineinfile -a 'path=/tmp/aaab.txt line="3333"'
//文本中沒有3333,是以添加在文本的最後一行
替換。将文本中11開頭的行替換成change,如果内有則添加到最後
ansible testA -m lineinfile -a 'path=/tmp/aaab.txt regexp="^11" line="change"'
使用backrefs。沒有比對到也不會追加。
ansible testA -m lineinfile -a 'path=/tmp/aaab.txt regexp="^4444" line="test" backrefs=yes'
删除所有change的行
ansible testA -m lineinfile -a 'path=/tmp/aaab.txt line="change" state=absent'