2019-04-25playbook學(xué)習(xí)

1,什么是playbook?

把所有操作按照ansible編程語(yǔ)法,放在文件里執(zhí)行就是playbook

ansible編程語(yǔ)法說(shuō)明:

ansible劇本遵循PYyaml語(yǔ)法規(guī)則進(jìn)行編寫(xiě),yaml文件基本編寫(xiě)規(guī)則如下說(shuō)明:

規(guī)則一:縮進(jìn)

yaml使用一個(gè)固定的縮進(jìn)風(fēng)格表示數(shù)據(jù)層結(jié)構(gòu)關(guān)系,需要每個(gè)縮進(jìn)級(jí)別由兩個(gè)空格組成,切記一定不能使用tab鍵進(jìn)行縮進(jìn)

規(guī)則二:冒號(hào)

每個(gè)冒號(hào)后面一定要有一個(gè)空格,(以冒號(hào)結(jié)尾不需要空格,表示文件路徑的模板可以不需要空格)

規(guī)則三:短橫線

想要表示列表項(xiàng),使用一個(gè)短橫杠加一個(gè)空格,多個(gè)項(xiàng)使用同樣的縮進(jìn)級(jí)別作為同一個(gè)列表的一部分

1.YAML介紹

YAML是一個(gè)可讀性高的用來(lái)表達(dá)資料序列的格式。YAML參考了其他多種語(yǔ)言,包括:XML、C語(yǔ)言、Python、Perl以及電子郵件格式RFC2822等。Clark Evans在2001年在首次發(fā)表了這種語(yǔ)言,另外Ingy dt Net與Oren Ben-Kiki也是這語(yǔ)言的共同設(shè)計(jì)者。

YAML Ain't Markup Language,即YAML不是XML。不過(guò),在開(kāi)發(fā)的這種語(yǔ)言時(shí),YAML的意思其實(shí)是:"Yet Another Markup Language"(仍是一種標(biāo)記語(yǔ)言)。其特性:

YAML的可讀性好

YAML和腳本語(yǔ)言的交互性好

YAML使用實(shí)現(xiàn)語(yǔ)言的數(shù)據(jù)類型

YAML有一個(gè)一致的信息模型

YAML易于實(shí)現(xiàn)

YAML可以基于流來(lái)處理

YAML表達(dá)能力強(qiáng),擴(kuò)展性好

更多的內(nèi)容及規(guī)范參見(jiàn)http://www.yaml.org


2,playbook替代方案

playbook替代方案一,不同樣

判斷,循環(huán),可以腳本實(shí)現(xiàn)


3,playbook替代方案二,通用


4,實(shí)踐一

ansible oldboy -m shell -a "echo oldboy linux. >/tmp/oldboy.log"

將這行命令寫(xiě)成劇本:

[root@BOSS /etc/ansible/yaml]# cat wzj.yml

- hosts: oldboy

? tasks:

? ? - name: create a log file

? ? ? shell: echo oldboy linux. >/tmp/oldboy.log

----------------------------------------------------------------------------------------------->>>內(nèi)容如此

執(zhí)行:

[root@BOSS /etc/ansible/yaml]# ansible-playbook -C /etc/ansible/yaml/wzj.yml

172.16.1.31 ? ? ? ? ?? : ok=2 ?? changed=1 ?? unreachable=0 ?? failed=0

172.16.1.41 ? ? ? ? ?? : ok=2? ? changed=1? ? unreachable=0? ? failed=0

說(shuō)明,利用ansile-playbook命令執(zhí)行腳本,-C參數(shù)表示測(cè)試劇本任務(wù)執(zhí)行,類似于話劇的彩排一樣

--------------------------------------------------------------------------------------------------------->>>成功

實(shí)踐二:ansible oldboy -m file -a "dest=/tmp/oldboy1 state=touch"

編寫(xiě)成劇本:

[root@BOSS /etc/ansible/yaml]# cat lqz.yml

- hosts: oldboy

? remote_user: root

? tasks:

? ? - name: create new file

? ? ? file: name=/tmp/oldboy1 state=touch

----------------------------------------------------------------------------------------->>>編寫(xiě)完成

[root@BOSS /etc/ansible/yaml]# ansible-playbook lqz.yml

---------------------------------------------------------------------------------------->>>執(zhí)行后查看

[root@BOSS /etc/ansible/yaml]# ansible oldboy -m shell -a "ls /tmp"?

172.16.1.31 | CHANGED | rc=0 >>

oldboy1

172.16.1.41 | CHANGED | rc=0 >>

oldboy1

------------------------------------------------------------------------------------------------->>>創(chuàng)建目錄成功

3,實(shí)踐三

定時(shí)任務(wù):

ansible oldboy -m cron -a "name='sync time' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'"

編寫(xiě)劇本:

[root@BOSS /etc/ansible/yaml]# cat sgwe.yml

- hosts: oldboy

? tasks:

? ? - name: cron time rsync

? ? ? cron: name='sync time' minute=00 hour=00 weekday=1-5 job='/usr/sbin/ /server/scripts/class.sh? >/dev/null 2>&1'

-------------------------------------------------------------------------->>>編寫(xiě)完成

執(zhí)行后查看:

[root@BOSS /etc/ansible/yaml]# ansible-playbook sgwe.yml

172.16.1.31 ? ? ? ? ?? : ok=2 ?? changed=1 ? unreachable=0 ?? failed=0

172.16.1.41 ? ? ? ? ? : ok=2? ? changed=1? ? unreachable=0? ? failed=0

查看:

[root@BOSS /etc/ansible/yaml]# ansible oldboy -m shell -a "crontab -l"

172.16.1.31 | CHANGED | rc=0 >>

#Ansible: sync time

00 00 * * 1-5 /usr/sbin/ /server/scripts/class.sh? >/dev/null 2>&1

#Ansible: sync time

00 00 * * 1-5 /usr/sbin/ /server/scripts/class.sh? >/dev/null 2>&1

------------------------------------------------------------------------------------------->>>添加定時(shí)任務(wù)成功

實(shí)踐四:

ansible oldboy -m copy -a "src=/etc/rsyncd.conf dest=/etc/rsyncd.conf backup=yes"

ansible oldboy -m copy -a "content='rsync_backup:oldboy' dest=/etc/rsync.password backup=yes mode=0600"

編寫(xiě)劇本:

[root@BOSS /etc/ansible/yaml]# cat cwj.yml

- hosts: oldboy

? tasks:

? ? - name: copy rsyncd.conf

? ? ? copy: src=/etc/rsyncd.conf dest=/etc/rsyncd.conf mode=0600 backup=yes

? ? - name: create rsyncd.password

? ? ? copy: content='rsync_backup:oldboy' dest=/etc/rsync.password mode=0600

------------------------------------------------------------------------------------------------>>>編寫(xiě)完成

執(zhí)行后查看:

[root@BOSS /etc/ansible/yaml]# ansible-playbook cwj.yml

172.16.1.31 ? ? ? ?? : ok=3 ? ? changed=2 ?? unreachable=0 ? ? failed=0?

172.16.1.41 ? ? ? ?? : ok=3? ? changed=2 ? ? unreachable=0 ? ? failed=0

[root@BOSS /etc/ansible/yaml]# ansible oldboy -m shell -a "ls -l /etc/rsyncd.conf"

172.16.1.41 | CHANGED | rc=0 >>

-rw------- 1 root rsync 516 Apr 17 15:19 /etc/rsyncd.conf

172.16.1.31 | CHANGED | rc=0 >>

-rw------- 1 root root 516 Apr 25 12:01 /etc/rsyncd.conf

------------------------------------------------------------------------------>>>/etc/rsyncd.conf成功

[root@BOSS /etc/ansible/yaml]# ansible oldboy -m shell -a "ls -l /etc/rsync.password"

172.16.1.41 | CHANGED | rc=0 >>

-rw------- 1 root dengli 19 Apr 25 16:59 /etc/rsync.password

172.16.1.31 | CHANGED | rc=0 >>

-rw------- 1 root dengli 19 Apr 25 16:59 /etc/rsync.password

------------------------------------------------------------------------------------>>>/etc/password成功


實(shí)踐五

創(chuàng)建用戶和備份目錄

useradd rsync

id rsync

mkdir -p /backup

chown -R rsync.rsync /backup/

ls -ld /backup/

---------------------------------------------------------------------->>>要求

2、ansible命令

ansible oldboy -m systemd -a "name=crond.service enabled=no state=stopped "

ansible oldboy -m command -a "systemctl status crond"

ansible oldboy -m systemd -a "name=crond.service enabled=yes state=started"

--------------------------------------------------------------------------------------------->>>檢查

3,編寫(xiě)劇本

[root@BOSS /etc/ansible/yaml]# cat lss.yml

- hosts: oldboy

? tasks:

? ? - name: copy rsyncd.conf

? ? ? copy: src=/etc/rsyncd.conf dest=/etc/rsyncd.conf mode=0600 backup=yes

? ? - name: create rsyncd.password

? ? ? copy: content='rsync_backup:oldboy' dest=/etc/rsyncd.password mode=0600

? ? - name: create user

? ? ? command: useradd rsync -s /sbin/nologin -M

? ? - name: create dir

? ? ? command: mkdir -p /backup/

? ? - name: shouquan

? ? ? command: chown -R rsync.rsync /backup/

? ? - name: startup rsyncd

? ? ? systemd: name='rsyncd.service' state=restarted enabled=yes

---------------------------------------------------------------------------------------------->>>編寫(xiě)完成

執(zhí)行后檢查:

[root@BOSS /etc/ansible/yaml]# ansible-playbook lss.yml

172.16.1.31 ? ? ? ? ? : ok=7 ? ?? changed=4 ? unreachable=0 ?? failed=0

172.16.1.41 ? ? ? ? ? : ok=7 ? ? changed=4? ? unreachable=0? ? failed=0 ?

---------------------------------------------------------------------------------->>>執(zhí)行成功

測(cè)試:

NFS 上測(cè)試:

[root@NFS ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup/

sending incremental file list

sent 51 bytes? received 23 bytes? 148.00 bytes/sec

total size is 332? speedup is 4.49

--------------------------------------------------------------------------->>>推送成功

BACKUP 上查看:

[root@BACKUP ~]# ll /backup/

-rw-r--r-- 1 rsync rsync 332 4月 12 15:08 hosts

--------------------------------------------------------------------------->>>完成

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容