Ansible劇本

第一章 使用ansible模塊實(shí)現(xiàn)安裝rsync服務(wù)

01.服務(wù)端操作

第一步:安裝軟件

ansible 172.16.1.41 -m yum -a "name=rsync state=installed"

第二步:編寫文件

ansible 172.16.1.41 -m copy -a "src=/server/scripts/rsyncd.conf dest=/etc/"

第三步:創(chuàng)建用戶組和用戶

ansible 172.16.1.41 -m group -a "name=www gid=666"
ansible 172.16.1.41 -m user -a "name=www create_home=no shell=/sbin/nologin group=www uid=666"

第四步:創(chuàng)建目錄

ansible 172.16.1.41 -m file -a "dest=/backup state=directory owner=www group=www"

第五步:創(chuàng)建密碼文件

ansible 172.16.1.41 -m copy -a "content='rsync_backup:oldzhang dest=/etc/rsync.password mode=600"

第六步:啟動服務(wù)

ansible 172.16.1.41 -m service -a "name=rsyncd state=started enabled=yes"

02.客戶端操作

第一步:安裝軟件

ansible 172.16.1.41 -m yum -a "name=rsync state=installed"

第二章 playbook 劇本

1.什么是playbook 劇本

playbook 翻譯過來就是“劇本”拓型, 那 playbook 組成如下
play: 定義的是主機(jī)的角色
task: 定義的是具體執(zhí)行的任務(wù)
playbook: 由一個或多個 play 組成险耀,一個 play 可以包含多個 task 任務(wù)
簡單理解為: 使用不同的模塊完成一件事情

2.playbook 的優(yōu)勢

  1. 功能比ansible命令更強(qiáng)大
  2. 能很好的控制先后執(zhí)行順序, 以及依賴關(guān)系
  3. 語法展現(xiàn)更加的直觀
    4)ansible命令無法持久使用畸冲, playbook 可以持久使用

第三章 劇本的書寫格式要求

01.劇本的組成

image

02.注意縮進(jìn)

1.合理的信息縮進(jìn)易稠,兩個空格表示一個縮進(jìn)關(guān)系
2.一定不要使用tab

標(biāo)題一
_ _ 標(biāo)題二
_ _ _ _ 標(biāo)題三

03.冒號

所有冒號后面都要加上空格

hosts: 172.16.1.41
tasks:
yum: name=rsync state=installed 

04.短橫線 - 列表功能

使用短橫線構(gòu)成列表信息,短橫線后面需要有空格

- 老張
  男
- 愛好
  游泳

第四章 劇本書寫

01.文件名格式

劇本文件拓展名為xxx.yaml
1.方便識別文件是一個劇本文件
2.文件編寫時會有顏色提示
練習(xí): 寫一個劇本嫂用,使用yum/copy/service模塊安裝部署啟動rsync服務(wù)

rsync劇本:

[root@m01 /server/scripts]# cat rsync_install.yaml 
- hosts: 172.16.1.41
  tasks:
  - name: 01-add group
    group: name=www gid=666
  - name: 02-add user
    user: name=www create_home=no shell=/sbin/nologin group=www uid=666
  - name: 03-install rsync
    yum: name=rsync state=installed
  - name: 04-copy rsync conf
    copy: src=/server/scripts/rsyncd.conf dest=/etc/
  - name: 05-create passwd conf
    copy: content='rsync_backup:oldboy' dest=/etc/rsync.passwd mode=600
  - name: 06-create backup dir
    file: path=/backup state=directory owner=www group=www
  - name: 07-create backup dir
    file: path=/data state=directory owner=www group=www
  - name: 08-start rsyncd service
    service: name=rsyncd state=started
  - name: 09-enabled rsyncd service
    systemd: name=rsyncd enabled=yes

nfs劇本:

NFS服務(wù)端:

[root@m01 /server/scripts]# cat nfs_server_install.yaml 
- hosts: nfs_server
  tasks:
  - name: 01-add group
    group: name=www gid='666'
  - name: 02-add user
    user: name=www create_home=no shell=/sbin/nologin group=www uid=666
  - name: 03-install nfs service
    yum: name=nfs-utils state=latest
  - name: 04-copy nfs exports
    copy: src=/server/scripts/exports dest=/etc/
  - name: 05-create data dir
    file: path=/data state=directory owner=www group=www
  - name: 06-start rpcbind
    service: name=rpcbind state=started
  - name: 07-start nfs
    service: name=nfs state=started
  - name: 08-enable rpcbind                                                                                                                                      
    systemd: name=rpcbind enabled=yes
  - name: 09-enable nfs 
    systemd: name=nfs enabled=yes

nfs客戶端

[root@m01 /server/scripts]# cat nfs_client_install.yaml 
- hosts: nfs_client
  tasks:
  - name: 01-add group
    group: name=www gid=666
  - name: 02-add user
    user: name=www create_home=no shell=/sbin/nologin group=www uid=666
  - name: 03-install nfs service
    yum: name=nfs-utils state=latest
  - name: 04-create data dir
    file: path=/data state=directory owner=www group=www
  - name: 05-start rpcbind
    service: name=rpcbind state=started
  - name: 06-enable rpcbind
    systemd: name=rpcbind enabled=yes
  - name: 07-mount data
    mount: path=/data src=172.16.1.31:/data fstype=nfs opts=defaults state=mounted

02.檢查劇本語法

ansible-playbook --syntax-check nfs_client_install.yaml 

03.模擬執(zhí)行劇本

ansible-playbook -C nfs_client_install.yaml 

04.執(zhí)行劇本

ansible-playbook nfs_client_install.yaml 

第五章 劇本高級 特性

我們已經(jīng)體驗(yàn)了使用劇本來安裝服務(wù)板驳,但是上述的簡單ansible劇本存在一定的局限性
1.全部寫成一行雖然看起來整潔样勃,但是有一些特性沒辦法使用
2.比如同時需要創(chuàng)建多個目錄锥腻,啟動多個服務(wù)嗦董,需要重復(fù)寫多條語句
3.參數(shù)不直觀,不好修改
4.劇本里寫的是啟動服務(wù)瘦黑,如果配置文件發(fā)生變化京革,重復(fù)執(zhí)行不會重啟服務(wù)
不過沒有關(guān)系,等學(xué)習(xí)了下面的高級特性幸斥,然后我們可以換一種寫法

01.循環(huán)

官方網(wǎng)址:

https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html

使用情景:
1.需要創(chuàng)建多個目錄
2.需要啟動多個服務(wù)
具體實(shí)現(xiàn):
1.同時創(chuàng)建2個目錄/data和/backup

[root@m01 /server/scripts/test]# cat loops.yaml 
- hosts: 172.16.1.41
  tasks:
  - name: 01-create dir data and backuo
    file:
      path: "{{ item }}"
      state: directory
      owner: www
      group: www
    loop: 
    - /data
    - /backup

2.同時啟動2個服務(wù)

[root@m01 /server/scripts/test]# cat service.yaml 
- hosts: 172.16.1.31
  tasks: 
  - name: 01-start rpcbind nfs service
    service: 
      name: "{{ item }}"
      state: started
    loop:
      - rpcbind
      - nfs

02.變量

官方網(wǎng)址:

https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html

使用情景:
1.自定義某個名稱匹摇,在任務(wù)中會多次引用
2.從主機(jī)收集的系統(tǒng)信息中提取某個變量并引用,例如網(wǎng)卡信息
具體實(shí)現(xiàn):
1.自定義一個文件名變量甲葬,創(chuàng)建文件時引用

[root@m01 /server/scripts/test]# cat vars.yaml 
- hosts: 172.16.1.41
  vars:
    file_name: oldzhang

  tasks: 
  - name: 01-use vars create dir
    file: 
      path: "/root/{{ file_name }}"
      state: directory
      owner: www
      group: www

2.使用變量獲取主機(jī)的eth1地址

[root@m01 /server/scripts/test]# cat ip.yaml 
- hosts: 172.16.1.41
  tasks:
  - name: 01-get ip address
    shell: "echo {{ ansible_facts.eth1.ipv4.address }} > /root/ip_eth1.txt"

3.在主機(jī)hosts中指定變量

[root@m01 ~]# tail -5 /etc/ansible/hosts
[backup]
172.16.1.41

[backup:vars]
file_name="oldzhang"

03.注冊變量

使用情景:將配置文件的狀態(tài)注冊成一個變量廊勃,方便其他任務(wù)引用
具體實(shí)現(xiàn):
1.將配置文件的狀態(tài)注冊成一個服務(wù)變量并打印出來

[root@m01 /server/scripts/test]# cat register.yaml 
- hosts: 172.16.1.41
  tasks:
  - name: 01-register rsync status
    shell: netstat -lntp|grep rsync
    register: rsync_port

  - name: 02-out rsync status
    debug:
      msg: "{{ rsync_port.stdout_lines }}"

打印多個信息

- hosts: nfs
  tasks:
  - name: 01-echo hostname
    shell: echo $(hostname)
    register: nfs_hostname

  - name: debug nfs_hostname
    debug:
      msg: "{{ item }}"
    loop:
      - "{{ nfs_hostname.stdout }}"
      - "{{ nfs_hostname.cmd }}"

04.服務(wù)管理

官方文檔:

https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html?highlight=handlers#handlers-running-operations-on-change

使用情景:如果配置文件發(fā)生了變化,就重啟服務(wù)经窖,否則什么都不操作
具體實(shí)現(xiàn):

[root@m01 /server/scripts/test]# cat handlers.yaml 
- hosts: 172.16.1.41
  tasks:
  - name: 01-if nfs conf changed,then restart nfs service
    copy:
      src: exports
      dest: /etc/
    notify: Restart_Nfs_Server

  handlers:
  - name: Restart_Nfs_Server
    service: 
      name: nfs
      state: restarted

05.標(biāo)簽

使用情景:從我們指定的任務(wù)開始執(zhí)行坡垫,而不是從頭到尾執(zhí)行一遍
具體實(shí)現(xiàn):

- hosts: 172.16.1.41
  tasks:
  - name: 01-add group
    group: name=www gid=666
    tags: 01-add-group
  - name: 02-add user
    user: name=www create_home=no shell=/sbin/nologin group=www uid=666
    tags: 02-add-user
  - name: 03-install rsync
    yum: name=rsync state=installed
    tags: 03-install-rsync
  - name: 04-copy rsync conf
    copy: src=/server/scripts/rsyncd.conf dest=/etc/
    tags: 04-copy-conf
  - name: 05-create passwd conf
    copy: content='rsync_backup:oldboy' dest=/etc/rsync.passwd mode=600
    tags: 05-create-passwd
  - name: 06-create backup dir
    file: path=/backup state=directory owner=www group=www
    tags: 06-create-backup
  - name: 07-create backup dir
    file: path=/data state=directory owner=www group=www
    tags: 07-create-data
  - name: 08-start rsyncd service
    service: name=rsyncd state=started
    tags: 08-start-rsyncd
  - name: 09-enabled rsyncd service
    systemd: name=rsyncd enabled=yes
    tags: 09-enable

調(diào)用標(biāo)簽:
1.打印出playbook里要執(zhí)行的所有標(biāo)簽

[root@m01 /server/scripts/test]# ansible-playbook --list-tags tags2.yml 

playbook: tags2.yml

  play #1 (172.16.1.41): 172.16.1.41    TAGS: []
      TASK TAGS: [01-add-group, 02-add-user, 03-install-rsync, 04-copy-conf, 05-create-passwd, 06-create-backup, 07-create-data, 08-start-rsyncd, 09-enable]

2.指定運(yùn)行某個標(biāo)簽

ansible-playbook -t 05-create-passwd tags2.yml

3.指定運(yùn)行多個標(biāo)簽,使用逗號隔開

ansible-playbook -t 05-create-passwd,06-create-backup tags2.yml

3.指定不運(yùn)行某個標(biāo)簽

ansible-playbook --skip-tags=05-create-passwd tags2.yml

4.指定不運(yùn)行多個標(biāo)簽

ansible-playbook --skip-tags=05-create-passwd,06-create-backup tags2.yml

06.運(yùn)行檢查規(guī)范

00.檢查劇本拼寫規(guī)范

ansible-playbook --syntax-check check.yaml 

01.檢查這個任務(wù)執(zhí)行的主機(jī)對象

ansible-playbook --list-host check.yaml 

02.檢查這個劇本需要執(zhí)行哪些任務(wù)

ansible-playbook --list-tasks check.yaml 

03.檢查這個劇本執(zhí)行哪些tag

ansible-playbook --list-tags check.yaml

04.模擬執(zhí)行劇本

ansible-playbook -C check.yaml

第6章 實(shí)戰(zhàn)劇本部署rsync/nfs/lsyncd

腳本實(shí)例:

- hosts: rsync_server
  vars: 
    rsync_conf_path: '/server/scripts/rsync_yaml/rsyncd.conf'

  tasks:
  - name: 01-install rsync
    yum: 
      name: rsync 
      state: installed

  - name: 02-backup & copy
    copy:
      src: "{{ rsync_conf_path }}"
      dest: /etc/
      backup: yes
    notify:
      - restart rsyncd

  - name: 03-create user group
    group: 
      name: www 
      gid: 666

  - name: 04-create user user 
    user: 
      name: www 
      create_home: no 
      shell: /sbin/nologin 
      group: www 
      uid: 666 

  - name: 05-create backup dir
    file: 
      dest: "{{ item }}"
      state: directory 
      owner: www 
      group: www
    loop:
      - /backup
      - /data 

  - name: 06-create passwd
    copy: 
      content: 'rsync_backup:oldzhang' 
      dest: /etc/rsync.passwd 
      mode: '0600'

  - name: 09-start rsynd
    service: 
      name: rsyncd 
      state: started 
      enabled: yes
    tags: 09_start_rsynd

  handlers:  
  - name: restart rsyncd
    service: 
      name: rsyncd
      state: restarted

01.rsync劇本

02.nfs劇本

03.lsync劇本

作者:張亞_7868
鏈接:http://www.reibang.com/p/63f54d5d0cb9
來源:簡書
著作權(quán)歸作者所有画侣。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)冰悠,非商業(yè)轉(zhuǎn)載請注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末配乱,一起剝皮案震驚了整個濱河市溉卓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搬泥,老刑警劉巖桑寨,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異佑钾,居然都是意外死亡西疤,警方通過查閱死者的電腦和手機(jī)烦粒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門休溶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扰她,你說我怎么就攤上這事兽掰。” “怎么了徒役?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵孽尽,是天一觀的道長。 經(jīng)常有香客問我忧勿,道長杉女,這世上最難降的妖魔是什么瞻讽? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮熏挎,結(jié)果婚禮上速勇,老公的妹妹穿的比我還像新娘。我一直安慰自己坎拐,他們只是感情好烦磁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著哼勇,像睡著了一般都伪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上积担,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天陨晶,我揣著相機(jī)與錄音,去河邊找鬼帝璧。 笑死珍逸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的聋溜。 我是一名探鬼主播谆膳,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撮躁!你這毒婦竟也來了漱病?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤把曼,失蹤者是張志新(化名)和其女友劉穎杨帽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗤军,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡注盈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了叙赚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片老客。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖震叮,靈堂內(nèi)的尸體忽然破棺而出胧砰,到底是詐尸還是另有隱情,我是刑警寧澤苇瓣,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布尉间,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏哲嘲。R本人自食惡果不足惜贪薪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望眠副。 院中可真熱鬧古掏,春花似錦、人聲如沸侦啸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽光涂。三九已至庞萍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忘闻,已是汗流浹背钝计。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留齐佳,地道東北人私恬。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像炼吴,于是被迫代替她去往敵國和親本鸣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

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

  • 需求:如何利用ansible模塊,進(jìn)行rsync服務(wù)部署 考察:需要對模塊靈活應(yīng)用 思路: 第一個里程: 確認(rèn)好管...
    ManBu_x閱讀 1,395評論 0 1
  • 第一章 使用ansible模塊實(shí)現(xiàn)安裝rsync服務(wù) 01.服務(wù)端操作 第一步:安裝軟件 第二步:編寫文件 第三步...
    吃可愛長大鴨閱讀 184評論 0 3
  • 第一節(jié) 關(guān)于playbook 劇本 1.什么是playbook劇本 playbook 翻譯過來就是“劇本”硅蹦, 那 ...
    chenkang閱讀 305評論 0 1
  • 12.8 playbook12.8.1 什么是playbook?把所有操作按照ansible編程語法荣德,放在文件里執(zhí)...
    學(xué)無止境_9b65閱讀 758評論 0 0
  • ansible劇本類似于shell腳本 但是他有自己的語法規(guī)范 ansible劇本作用介紹 (1) 可以實(shí)現(xiàn)服務(wù)自...
    張新雨有點(diǎn)胖噢閱讀 1,972評論 1 2