2019-04-25

12.8 playbook

12.8.1 什么是playbook?

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

?12.8.2 ansible劇本編寫格式說明

ansible劇本遵循PYyaml語法規(guī)則進行編寫,yaml文件基本編寫規(guī)則如下說明:

規(guī)則一:縮進 yaml使用一個固定的縮進風格表示數(shù)據(jù)層結構關系,需要每個縮進級別由兩個空格組成。切記一定不能使用tab鍵進行縮進。

規(guī)則二:冒號 每個冒號后面一定要有一個空格(以冒號結尾不需要空格,表示文件路徑的模版可以不需要空格)

規(guī)則三:短橫線 想要表示列表項,使用一個短橫杠加一個空格。

多個項使用同樣的縮進級別作為同一個列表的一部分

1.YAML介紹 YAML是一個可讀性高的用來表達資料序列的格式。

YAML參考了其他多種語言,包括:XML、C語言、Python、Perl以及電子郵件格式RFC2822等。

Clark Evans在2001年在首次發(fā)表了這種語言,另外Ingy dt Net與Oren Ben-Kiki也是這語言的共同設計

者。

YAML Ain't Markup Language,即YAML不是XML。

不過,在開發(fā)的這種語言時,YAML的意思其實是:"Yet Another Markup Language"(仍是一種標記語言)。

其特性: YAML的可讀性好 YAML和腳本語言的交互性好 YAML使用實現(xiàn)語言的數(shù)據(jù)類型 YAML有一個一

致的信息模型 YAML易于實現(xiàn) YAML可以基于流來處理 YAML表達能力強,擴展性好 更多的內(nèi)容及規(guī)范參

http://www.yaml.org

?12.8.3 playbook替代方案 playbook

替代方案1:不同樣

?[root@m01 ~]# cat ansible.sh #判斷 循環(huán),可以腳本實現(xiàn)。

ansible oldboy -m file -a "dest=/tmp/oldboy_file state=touch"

ansible oldboy -m file -a "dest=/tmp/oldboy_file state=touch owner=oldboy group=oldboy mode=ugo=rwx"

?ansible oldboy -m yum -a "name=nginx state=installed"

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

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

?playbook替代方案2:通用

[root@m01 ~]# cat ~/set.sh touch /tmp/oldboy_file chown oldboy.oldboy /tmp/oldboy_file yum install nginx -y /etc/init.d/crond start chkconfig cornd on echo '#sync time oldboy' >>/var/spool/cron/root echo '00 00 * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' >>/var/spool/cron/root

執(zhí)行: ansible oldboy -m script -a "~/set.sh"

12.8.4實踐

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

把這行命令寫成劇本: 準備:

mkdir -p /etc/ansible/yaml cd /etc/ansible/yaml vim p1.yml

?開始編寫:

[root@m01 /etc/ansible/yaml]# cat /etc/ansible/yaml/p1.yml - hosts: oldboy tasks: - name: Create a log

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

?[root@m01 /etc/ansible/yaml]# cat p2.yml

- hosts: oldboy

???tasks:

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

[root@m01 /etc/ansible/yaml]# ansible-playbook -C /etc/ansible/yaml/p1.yml

說明:利用ansibl-playbook命令執(zhí)行劇本,-C參數(shù)表示測試劇本任務執(zhí)行,類似話劇的彩排一樣。

PLAY [oldboy] *********************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************** ok: [172.16.1.41] ok: [172.16.1.31] TASK [Create a log file] ************************************************************************************************ skipping: [172.16.1.41] skipping: [172.16.1.31] PLAY RECAP ************************************************************************************************************** 172.16.1.31 : ok=1 changed=0 unreachable=0 failed=0 172.16.1.41 : ok=1 changed=0 unreachable=0 failed=0 執(zhí)行: [root@m01 /etc/ansible/yaml]# ansible-playbook /etc/ansible/yaml/p1.yml PLAY [oldboy] *********************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************** ok: [172.16.1.31] ok: [172.16.1.41] TASK [Create a log file] ************************************************************************************************ changed: [172.16.1.31] changed: [172.16.1.41] PLAY RECAP **************************************************************************************************************

172.16.1.31 : ok=2 changed=1 unreachable=0 failed=0 172.16.

1.41 : ok=2 changed=1 unreachable=0 failed=0 ansible oldboy -m file -a "dest=/tmp/oldboy1 state=touch"

編寫劇本:

?[root@m01 /etc/ansible/yaml]# cat p3.yml

- hosts: oldboy remote_user: root

tasks:

- name: Create New File

file: name=/tmp/oldboy1 state=touch

定時任務:

ansible oldboy -m cron -a "name='sync time' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'" #crond-id-001:time sync by oldboy */5 * * * * /usr/sbin/ntpdate ntp3.aliyun.com >/dev/null 2>&1

編寫劇本:

?[root@m01 /etc/ansible/yaml]# cat p4.yml

- hosts: oldboy

?tasks:

- name: Cron time sync

cron: name='sync time' minute=*/10 job='/usr/sbin/ntpdate ntp3.aliyun.com >/dev/null 2>&1'

練習題:每周一1-5 上午8:30 /server/scripts/class.sh 編寫劇本:

[root@m01 /etc/ansible/yaml]# cat p5.yml

- hosts: oldboy

tasks:

- name:

Cron

1、Linux命令行操作 #3)創(chuàng)建用戶和備份目錄

?useradd rsync

?id rsync

mkdir -p /backup

chown -R rsync.rsync /backup/

?ls -ld /backup/

?#4)啟動和檢查

systemctl start rsyncd

?systemctl enable rsyncd

systemctl status rsyncd

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@m01 ~]# cat /etc/ansible/yaml/p6.yml

- hosts: backup

?tasks:

- name: copy rsyncd.conf

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

?- name: create rsync.password

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

?- name: create

user 用user模塊 替代 command: useradd rsync -s /sbin/nologin -M - name: create dir

用file模塊替代 command: mkdir -p /backup - name: shouquan

用file模塊替代 command: chown -R rsync.rsync /backup/ - name: startup rsyncd systemd: name='rsyncd.service' state=restarted enabled=yes

執(zhí)行三部曲: ansible-playbook --syntax-check /etc/ansible/yaml/p6.yml ansible-playbook -C /etc/ansible/yaml/p6.yml ansible-playbook /etc/ansible/yaml/p6.yml

檢測結果: rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password 今晚25日項目實踐一分鐘內(nèi),

一鍵完成三個項目的安裝: 使用playbook完成如下配置:

1)各一鍵完成rsync服務端和客戶端。 #完成

?2)各一鍵完成nfs服務端和客戶端。

3)各一鍵完成sersync服務端和客戶端。

一個腳本one_key.sh或者一個ansible命令。

完成

- name: This command will change the working directory to somedir/ and will only run when /path/to/database doesn't exist. command: /usr/bin/make_database.sh arg1 arg2 args: chdir: somedir/ creates: /path/to/database

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容