Linux云计算运维架构师(连载)-自动化运维ansible-12

2021-07-05 14:31:04 浏览数 (1)

1.2.2 编写剧本

准备工作完成后,编写一个剧本,代码如下所示。

[root@ansible apache]# vim apache.yaml

[root@ansible apache]# cat apache.yaml

- hosts: host2

tasks:

- name: install apache packages

yum: name=httpd state=present

- name: copy apache conf

copy: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf

- name: ensure apache is running

service: name=httpd state=started enabled=yes

该剧本编排了一个Web从部署到配置启动的全过程,在Ansible服务器上执行该剧本,设定的客户机将会按照剧本自己进行相关操作。

1.2.3 结果测试

剧本编写完成后,可以检验其语法是否有误,检验代码及结果如下所示。

[root@ansible apache]# ansible-playbook apache.yaml --syntax-check

playbook: apache.yaml

系统未报错说明语法无误。在执行该剧本前,可以添加--list-tasks参数列出本次剧本中的所有任务,如下所示。

[root@ansible apache]# ansible-playbook apache.yaml --list-tasks

playbook: apache.yaml

play #1 (host2): host2 TAGS: []

tasks:

install apache packages TAGS: []

copy apache conf TAGS: []

ensure apache is running TAGS: []

通过代码的反馈结果可以看到,目标客户机将会被执行三个任务:安装Apache、拷贝本机配置文件至目标客户机、启动客户机的Apache服务。除了查看任务之外,通过使用--liat-hosts参数可以看到本次任务的目标机,具体如下所示。

[root@ansible apache]# ansible-playbook apache.yaml --list-hosts

playbook: apache.yaml

play #1 (host2): host2 TAGS: []

pattern: [u'host2']

hosts (1):

host2

通过代码的反馈结果可以看到,本次剧本中所有的任务都将由host2来执行。查看完成后,执行该剧本,代码及结果如下所示。

[root@ansible apache]# ansible-playbook apache.yaml

PLAY [host2]

*******************************************************************

TASK [Gathering Facts]

*********************************************************

ok: [host2]

TASK [install apache packages]

*************************************************

changed: [host2]

TASK [copy apache conf]

********************************************************

changed: [host2]

TASK [ensure apache is running]

************************************************

changed: [host2]

PLAY RECAP

*********************************************************************

host2 : ok=4 changed=3 unreachable=0 failed=0

skipped=0 rescued=0 ignored=0

通过代码的反馈结果可以看到,apache.yaml成功执行。通过浏览器访问目标客户机的8080端口,结果如图1.4所示。

图1.1 访问结果

通过图1.4中可以看到,host2的Apache服务运行正常,说明Ansible成功执行了apache.yaml剧本。

1.1.1 触发器的使用

若Apache的配置文件发生变动,Ansible是否可以再次运行apache.yaml更新配置?答案是不能。此处通过一个案例来进行说明。

首先将Ansible服务器中的Apache配置文件进行修改,端口号改为9000,示例代码如下所示。

[root@ansible apache]# vim httpd.conf

#

# This is the main Apache HTTP server configuration file. It contains the

# configuration directives that give the server its instructions.

# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.

# In particular, see

# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>

# for a discussion of each configuration directive.

...

Listen 9000

...

修改完成后,也可以使用grep来进行查询。

[root@ansible apache]# grep '^Listen' httpd.conf

Listen 9000

配置文件修改完成之后,再次执行apache.yaml,结果如下所示。

[root@ansible apache]# ansible-playbook apache.yaml

PLAY [host2]

*******************************************************************

TASK [Gathering Facts]

*********************************************************

ok: [host2]

TASK [install apache packages]

*************************************************

ok: [host2]

TASK [copy apache conf]

********************************************************

changed: [host2]

TASK [ensure apache is running]

************************************************

ok: [host2]

PLAY RECAP

*********************************************************************

host2 : ok=4 changed=1 unreachable=0 failed=0

skipped=0 rescued=0 ignored=0

通过代码的反馈结果可以看到,apache.yaml成功执行。若修改的配置文件生效,则访问客户机的9000端口可以看到Apache的服务页。此处使用浏览器访问客户机的9000端口,结果如图1.5所示。

图1.1 访问结果

通过图1.5中可以看出,客户机的9000端口无服务。这是因为新的配置文件没有被客户机读取。Apache.yaml只定义了启动Apache的操作,并未定义配置文件更新后,重新启动Apache。此处在apache.yaml定义处理程序,并对其进行引用,具体代码如下所示。

[root@ansible apache]# vim apache.yaml

[root@ansible apache]# cat apache.yaml

- hosts: host2

tasks:

- name: install apache packages

yum: name=httpd state=present

- name: copy apache conf

copy: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf

#引用处理程序

notify: restart apache service

- name: ensure apache is running

service: name=httpd state=started enabled=yes

#定义处理程序

handlers:

- name: restart apache service

service: name=httpd state=restarted

修改完成后,重新执行apache.yaml,代码及结果如下所示。

[root@ansible apache]# ansible-playbook apache.yaml

PLAY [host2]

*******************************************************************

TASK [Gathering Facts]

*********************************************************

ok: [host2]

TASK [install apache packages]

*************************************************

ok: [host2]

TASK [copy apache conf]

********************************************************

ok: [host2]

TASK [ensure apache is running]

************************************************

ok: [host2]

RUNNING HANDLER [restart apache service]

**********************************

changed: [host2]

PLAY RECAP

*********************************************************************

host2 : ok=5 changed=2 unreachable=0 failed=0

skipped=0 rescued=0 ignored=0

成功执行后,在浏览器中再次访问客户机的9000端口,结果如图1.6所示。

图1.1 访问结果

通过图1.6中可以看到,此时已经能够成功访问到客户机的9000端口。当再次修改配置文件时,只需要将apache.yaml重新执行一次即可。

0 人点赞