1宪巨,什么是playbook?
把所有操作按照ansible編程語法械巡,放在文件里執(zhí)行就是playbook
ansible編程語法說明:
ansible劇本遵循PYyaml語法規(guī)則進(jìn)行編寫,yaml文件基本編寫規(guī)則如下說明:
規(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è)可讀性高的用來表達(dá)資料序列的格式唉铜。YAML參考了其他多種語言台舱,包括:XML、C語言潭流、Python竞惋、Perl以及電子郵件格式RFC2822等。Clark Evans在2001年在首次發(fā)表了這種語言灰嫉,另外Ingy dt Net與Oren Ben-Kiki也是這語言的共同設(shè)計(jì)者拆宛。
YAML Ain't Markup Language,即YAML不是XML讼撒。不過浑厚,在開發(fā)的這種語言時(shí),YAML的意思其實(shí)是:"Yet Another Markup Language"(仍是一種標(biāo)記語言)根盒。其特性:
YAML的可讀性好
YAML和腳本語言的交互性好
YAML使用實(shí)現(xiàn)語言的數(shù)據(jù)類型
YAML有一個(gè)一致的信息模型
YAML易于實(shí)現(xiàn)
YAML可以基于流來處理
YAML表達(dá)能力強(qiáng)钳幅,擴(kuò)展性好
更多的內(nèi)容及規(guī)范參見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"
將這行命令寫成劇本:
[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
說明,利用ansile-playbook命令執(zhí)行腳本辈双,-C參數(shù)表示測試劇本任務(wù)執(zhí)行责掏,類似于話劇的彩排一樣
--------------------------------------------------------------------------------------------------------->>>成功
實(shí)踐二:ansible oldboy -m file -a "dest=/tmp/oldboy1 state=touch"
編寫成劇本:
[root@BOSS /etc/ansible/yaml]# cat lqz.yml
- hosts: oldboy
? remote_user: root
? tasks:
? ? - name: create new file
? ? ? file: name=/tmp/oldboy1 state=touch
----------------------------------------------------------------------------------------->>>編寫完成
[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'"
編寫劇本:
[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'
-------------------------------------------------------------------------->>>編寫完成
執(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"
編寫劇本:
[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
------------------------------------------------------------------------------------------------>>>編寫完成
執(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换衬,編寫劇本
[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
---------------------------------------------------------------------------------------------->>>編寫完成
執(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í)行成功
測試:
NFS 上測試:
[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
--------------------------------------------------------------------------->>>完成