Ansible角色的一些实战练习

本节主要针对一些服务的部署,来创建出其角色。以方便更快的掌握ansible角色的创建和使用。

练习一

建立memcached角色,并实现将内存的1/4当缓存使用

1.创建角色目录

1
2
3
4
5
6
#创建出memcached角色的结构目录
[root@ansible data]# mkdir -pv roles/memcadhed/{templates,tasks,vars}
mkdir: created directory ‘roles/memcadhed’
mkdir: created directory ‘roles/memcadhed/templates’
mkdir: created directory ‘roles/memcadhed/tasks’
mkdir: created directory ‘roles/memcadhed/vars’

2.安装memeche获取配置文件

1
2
3
#使用yum安装memcached从而获取到memcached配置文件,并将配置文件复制到templates目录下让其变为模板文件
[root@ansible data]# yum install memcached -y
[root@ansible data]# cp /etc/sysconfig/memcached roles/memcadhed/templates/memcached.j2

3.修改模板文件

1
2
3
4
5
6
7
#对memcached模板文件做修改,对CACHESIZE行做修改,使用系统内置变量ansible_memtotal_mb来代替。
[root@ansible data]# vim roles/memcadhed/templates/memcached.j2
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="{{ansible_memtotal_mb//4}}" #缓存大小使用系统内置变量
OPTIONS=""

4.在tasks目录下创建各task

1
2
3
4
5
6
7
8
9
10
11
12
#在tasks目录下创建出各个任务
[root@ansible data]# vim roles/memcadhed/tasks/install.yaml
- name: install
yum: name=memcached

[root@ansible data]# vim roles/memcadhed/tasks/config.yaml
- name: config
template: src=memcached.j2 dest=/etc/sysconfig/memcached

[root@ansible data]# vim roles/memcadhed/tasks/service.yaml
- name: service
service: name=memcached state=started

5.在tasks目录下创建执行顺序文件

1
2
3
4
5
6
#在tasks目录下创建出main.yaml文件,并写入各任务的执行次序
[root@ansible data]# vim roles/memcadhed/tasks/main.yaml

- include: install.yaml
- include: config.yaml
- include: service.yaml

6.创建调用role文件

1
2
3
4
5
6
7
8
#在与roles目录平级的目录下创建出roles调用文件,定义调用哪一个roles
[root@ansible data]# vim memcached.yaml
---
# install memcached
- hosts: webserver

roles:
- role: memcached

7.测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

[root@ansible data]# ansible-playbook -C memcached.yaml

PLAY [webserver] ***********************************************************************************************

TASK [Gathering Facts] *****************************************************************************************
ok: [192.168.73.132]
ok: [192.168.73.134]
ok: [192.168.73.135]

TASK [memcached : install] *************************************************************************************
changed: [192.168.73.132]
changed: [192.168.73.135]
changed: [192.168.73.134]

TASK [memcached : config] **************************************************************************************
changed: [192.168.73.132]
changed: [192.168.73.134]
changed: [192.168.73.135]

TASK [memcached : service] *************************************************************************************
changed: [192.168.73.132]
changed: [192.168.73.134]
changed: [192.168.73.135]

PLAY RECAP *****************************************************************************************************
192.168.73.132 : ok=4 changed=3 unreachable=0 failed=0
192.168.73.134 : ok=4 changed=3 unreachable=0 failed=0
192.168.73.135 : ok=4 changed=3 unreachable=0 failed=0

8.执行roles

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@ansible data]# ansible-playbook memcached.yaml

PLAY [webserver] ***********************************************************************************************

TASK [Gathering Facts] *****************************************************************************************
ok: [192.168.73.132]
ok: [192.168.73.134]
ok: [192.168.73.135]

TASK [memcached : install] *************************************************************************************
changed: [192.168.73.135]
changed: [192.168.73.134]
changed: [192.168.73.132]

TASK [memcached : config] **************************************************************************************
changed: [192.168.73.132]
changed: [192.168.73.135]
changed: [192.168.73.134]

TASK [memcached : service] *************************************************************************************
changed: [192.168.73.132]
changed: [192.168.73.135]
changed: [192.168.73.134]

PLAY RECAP *****************************************************************************************************
192.168.73.132 : ok=4 changed=3 unreachable=0 failed=0
192.168.73.134 : ok=4 changed=3 unreachable=0 failed=0
192.168.73.135 : ok=4 changed=3 unreachable=0 failed=0

练习(二)

在centos6上时间服务为ntp服务,而在centos7上时间服务为chrony,使用ansible在centos6主机上部署ntp服务,centos7上部署chrony。

1.分别创建ntp和chrony角色目录

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@ansible data]# mkdir -pv roles/{ntpd,chrony}/{templates,tasks,vars,files,handlers}
mkdir: created directory ‘roles/ntpd’
mkdir: created directory ‘roles/ntpd/templates’
mkdir: created directory ‘roles/ntpd/tasks’
mkdir: created directory ‘roles/ntpd/vars’
mkdir: created directory ‘roles/ntpd/files’
mkdir: created directory ‘roles/ntpd/handlers’
mkdir: created directory ‘roles/chrony’
mkdir: created directory ‘roles/chrony/templates’
mkdir: created directory ‘roles/chrony/tasks’
mkdir: created directory ‘roles/chrony/vars’
mkdir: created directory ‘roles/chrony/files’
mkdir: created directory ‘roles/chrony/handlers’

2.准备ntpd配置文件

2.1对ntp配置文件修改

1
2
3
4
5
[root@CentOS6 ~]# vim /etc/ntp.conf
#修改配置文件中的以下三行,将应用此配置的服务器,部署为ntp服务器
restrict default kod nomodify
restrict 192.168.73.0 mask 255.255.255.0 nomodify notrap
server 172.22.0.1 iburst

2.2将ntp配置文件存放至role相关目录下

1
2
#将更改后的配置文件放入files目录中
[root@ansible data]# mv ntp.conf roles/ntpd/files/

3.准备chrony配置文件

3.1修改配置文件

1
2
3
[root@ansible data]# vim /etc/chrony.conf
#修改配置文件中的以下行,将应用此配置的服务器,部署为chrony服务器
server 192.168.73.132 iburst

3.2将chrony配置文件存放至role相关目录下

1
[root@ansible data]# cp /etc/chrony.conf roles/chrony/files/

4.创建ntpd的tasks

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#根据服务部署时所需要的步骤创建出各个任务
[root@ansible data]# vim roles/ntpd/tasks/install.yaml
- name: install
yum: name=ntp

[root@ansible data]# vim roles/ntpd/tasks/config.yaml #创建添加配置文件的task
- name: config
copy: src=ntp.conf dest=/etc/ntp.conf
notify: restart service #当配置文件发生改变时通知服务重启

[root@ansible data]# vim roles/ntpd/tasks/service.yaml
- name: service
service: name=ntpd state=started

[root@ansible data]# vim roles/ntpd/tasks/main.yaml #创建任务执行顺序文件。
- include: install.yaml
- include: config.yaml
- include: service.yaml

5.创建ntpd的handler

1
2
3
4
#在handlers目录中出创建任务执行时,触发什么事情。
[root@ansible data]# vim roles/ntpd/handlers/main.yaml
- name: restart service
service: name=ntpd state=restarted

6.创建chrony的tasks

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#按部署chrony服务时所需的步骤创建出各task
[root@ansible data]# vim roles/chrony/tasks/install.yaml
- name: install
yum: name=chrony

[root@ansible data]# vim roles/chrony/tasks/config.yaml #创建添加配置文件的task
- name: config
copy: src=chrony.conf dest=/etc/chrony.conf
notify: restart service #当配置文件发生改变时通知服务重启

[root@ansible data]# vim roles/chrony/tasks/service.yaml
- name: service
service: name=chronyd state=started

[root@ansible data]# vim roles/chrony/tasks/main.yaml #创建任务执行顺序文件。
- include: install.yaml
- include: config.yaml
- include: service.yaml

7.创建chrony的handler

1
2
3
4
#在handlers目录中出创建任务执行时,触发什么事情。
[root@ansible data]# vim roles/chrony/handlers/main.yaml
- name: restart service
service: name=chronyd state=restarted

8.创建带条件判断的role调用剧本

1
2
3
4
5
6
7
8
9
10
#在roles调用中对系统的版本号做出判断,当版本号为6时部署ntpd,当版本号为7时部署chrony
[root@ansible data]# vim roles_time.yaml
---
#install ntp chorny
- hosts: webserver
roles:
- role: ntpd
when: ansible_distribution_major_version == "6"
- role: chrony
when: ansible_distribution_major_version == "7"

9.测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[root@ansible data]# ansible-playbook -C roles_time.yaml

PLAY [webserver] ***********************************************************************************************

TASK [Gathering Facts] *****************************************************************************************
ok: [192.168.73.132]
ok: [192.168.73.135]
ok: [192.168.73.134]

TASK [ntpd : install] ******************************************************************************************
skipping: [192.168.73.134]
skipping: [192.168.73.135]
ok: [192.168.73.132]

TASK [ntpd : config] *******************************************************************************************
skipping: [192.168.73.134]
skipping: [192.168.73.135]
ok: [192.168.73.132]

TASK [ntpd : service] ******************************************************************************************
skipping: [192.168.73.134]
skipping: [192.168.73.135]
changed: [192.168.73.132]

TASK [chrony : install] ****************************************************************************************
skipping: [192.168.73.132]
changed: [192.168.73.134]
changed: [192.168.73.135]

TASK [chrony : config] *****************************************************************************************
skipping: [192.168.73.132]
changed: [192.168.73.135]
changed: [192.168.73.134]

TASK [chrony : service] ****************************************************************************************
skipping: [192.168.73.132]
changed: [192.168.73.135]
changed: [192.168.73.134]

RUNNING HANDLER [ntpd : restart service] ***********************************************************************
skipping: [192.168.73.135]
skipping: [192.168.73.134]

PLAY RECAP *****************************************************************************************************
192.168.73.132 : ok=4 changed=1 unreachable=0 failed=0
192.168.73.134 : ok=4 changed=3 unreachable=0 failed=0
192.168.73.135 : ok=4 changed=3 unreachable=0 failed=0

10.执行roles

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[root@ansible data]# ansible-playbook  roles_time.yaml

PLAY [webserver] ***********************************************************************************************

TASK [Gathering Facts] *****************************************************************************************
ok: [192.168.73.135]
ok: [192.168.73.132]
ok: [192.168.73.134]

TASK [ntpd : install] ******************************************************************************************
skipping: [192.168.73.134]
skipping: [192.168.73.135]
ok: [192.168.73.132]

TASK [ntpd : config] *******************************************************************************************
skipping: [192.168.73.134]
skipping: [192.168.73.135]
ok: [192.168.73.132]

TASK [ntpd : service] ******************************************************************************************
skipping: [192.168.73.134]
skipping: [192.168.73.135]
ok: [192.168.73.132]

TASK [chrony : install] ****************************************************************************************
skipping: [192.168.73.132]
ok: [192.168.73.135]
ok: [192.168.73.134]

TASK [chrony : config] *****************************************************************************************
skipping: [192.168.73.132]
ok: [192.168.73.135]
ok: [192.168.73.134]

TASK [chrony : service] ****************************************************************************************
skipping: [192.168.73.132]
ok: [192.168.73.134]
changed: [192.168.73.135]

PLAY RECAP *****************************************************************************************************
192.168.73.132 : ok=4 changed=0 unreachable=0 failed=0
192.168.73.134 : ok=4 changed=0 unreachable=0 failed=0
192.168.73.135 : ok=4 changed=1 unreachable=0 failed=0