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重新执行一次即可。