第一章 使用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)勢
- 功能比ansible命令更強(qiáng)大
- 能很好的控制先后執(zhí)行順序, 以及依賴關(guān)系
- 語法展現(xiàn)更加的直觀
4)ansible命令無法持久使用畸冲, playbook 可以持久使用
第三章 劇本的書寫格式要求
01.劇本的組成
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)載請注明出處。