天天看點

ansible常用子產品知識彙總(一)

所有的子產品都可以使用下面的指令檢視參數:

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'