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表達能力強,擴展性好 更多的內容及規(guī)范參
?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日項目實踐一分鐘內泞辐,
一鍵完成三個項目的安裝: 使用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