Ansible自动化运维之Playbook详解及体验(二)

Handlers介绍:

  • Handlers也是一些task的列表,和一般的task并没有什么区别。是由通知者进行的notify,如果没有被notify,则Handlers不会执行,假如被notify了,则Handlers被执行;
  • 不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handlers也只会被执行一次
  • “notify”这个action可用于在每个play的最后被触发,这样可以避免多次有改变发生时每次都执行指定的操作,取而代之,仅在所有的变化发生完成后一次性地执行指定操作。在notify中列出的操作称为handler,也即notify中调用handler中定义的操作。

通过部署一个实验来看一下:

  • 实验项目:通过ansible剧本对被管理端进行部署httpd服务,并且修改配置文件,启动服务。
  • 实验环境
主机 操作系统 IP地址
ansible管理端 Centos7 192.168.72.128 /
ansible被管理端 Centos7 192.168.72.155 webserver
ansible被管理端 Centos7 192.168.72.156 mysql
  • 实验步骤
1.现在管理端安装Apache,提取其配置文件作为模板:
  * yum install -y httpd
  * cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2

2.修改HTTP配置文件模板:
  * vim /opt/httpd.conf.j2


3.修改ansible的hosts文件
  * vim /etc/ansible/hosts

4.编写一个剧本:
* vim /opt/httpd.yml
- hosts: webserver
  remote_user: root
  vars:                   #定义变量
  - package: httpd
  - server: httpd
  tasks:                #任务
   - name: installed apache
     yum: name={
     {package}} state=latest          #调用变量
   - name: copy httpd temp
     template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf         #模板路径和目标路径
     notify:               #调用参数handlers
       - restart httpd
   - name: start httpd
     service: name={
     {server}} enabled=true state=started
  handlers:           #被notify调用的参数
     - name: restart httpd
       service: name={
     {server}} state=restarted


5.执行ansible-play剧本:

6.被控制端检查:

转载于:https://blog.51cto.com/13721050/2310799

你可能感兴趣的:(运维,开发工具,操作系统)