• Ansible_实施处理程序


    一、Ansible配置处理程序

    1、处理程序

    1️⃣:处理程序是响应由其他任务触发的通知的任务

    2️⃣:仅当任务在受管主机上更改了某些内容时,任务才通知其处理程序

    3️⃣:每个处理程序具有全局唯一的名称,在playbook中任务块的末尾触发

    4️⃣:如果没有任务通过名称通知处理程序,处理程序就不会运行

    5️⃣:如果一个或多个任务通知处理程序,处理程序就会在play中的所有其他任务完成后运行一次

    6️⃣:因为处理程序就是任务,所以可以在处理程序中使用他们将用于任何其他任务的模块;通常而言,处理程序被用于重新引导主机和重启服务

    2、实施处理程序

    1️⃣:处理程序可视为非活动任务,只有在使用notify语句显式调用时才会被触发

    • 演示实例:
       //查看playbook
      [root@localhost project]# cat playbook.yaml 
      ---
      - hosts: all
        tasks:
          - name: install httpd
            yum:
              name: httpd
              state: present
            notify:           //notify关键字指定需要触发的处理程序
              - start httpd    //要运行处理程序的名称
      
        handlers:      //handlers关键字表示处理程序任务列表的开头(与tasks同级别)
          - name: start httpd       //被触发的处理程序(任务)的名称;注意:必须与notify指定的处理程序的名称相同
            service:
              name: httpd
              state: started
      
       //执行play
      [root@localhost project]# ansible-playbook playbook.yaml 
      
      PLAY [all] ****************************************************************************************************************************************************************
      
      TASK [Gathering Facts] ****************************************************************************************************************************************************
      ok: [client.example.com]
      
      TASK [install httpd] ******************************************************************************************************************************************************
      changed: [client.example.com]
      
      RUNNING HANDLER [start httpd] *********************************************************************************************************************************************
      changed: [client.example.com]
      
      PLAY RECAP ****************************************************************************************************************************************************************
      client.example.com         : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

    2️⃣:一个任务可以在其notify部分中调用多个处理程序。Ansiblenotify语句视为数组,并且迭代处理程序名称

    • 演示实例:
       //查看playbook
      [root@localhost project]# cat playbook.yaml 
      ---
      - hosts: all
        tasks:
          - name: install httpd
            yum:
              name: httpd
              state: present
            notify:
              - start httpd
              - install mariadb-server
      
        handlers:
          - name: start httpd
            service:
              name: httpd
              state: started
              
          - name: install mariadb-server
            yum:
              name: mariadb-server
              state: installed
      
       //执行play
      [root@localhost project]# ansible-playbook playbook.yaml 
      
      PLAY [all] ****************************************************************************************************************************************************************
      
      TASK [Gathering Facts] ****************************************************************************************************************************************************
      ok: [client.example.com]
      
      TASK [install httpd] ******************************************************************************************************************************************************
      changed: [client.example.com]
      
      RUNNING HANDLER [start httpd] *********************************************************************************************************************************************
      changed: [client.example.com]
      
      RUNNING HANDLER [install mariadb-server] **********************************************************************************************************************************
      changed: [client.example.com]
      
      PLAY RECAP ****************************************************************************************************************************************************************
      client.example.com         : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

    二、处理程序的好处

    1、处理程序重要事项

    1️⃣:处理程序始终按照playhandlers部分指定的顺序运行,它们不按在任务中由notify语句列出的顺序运行,或按任务通知它们的顺序运行

    2️⃣:处理程序通常在相关play中的所有其他任务完成后运行,playbooktasks部分中某一任务调用的处理程序,将等到tasks下的所有任务都已处理后才会运行

    3️⃣:处理程序名称存在于各play命名空间中,如果两个处理程序被错误地给予相同的名称,则仅会运行一个

    4️⃣:即使有多个任务通知处理程序,该处理程序依然仅运行一次,如果没有任务通知处理程序,它就不会运行

    5️⃣:如果包含notify语句的任务没有报告changed结果(例如,软件包已安装并且任务报告ok),则处理程序不会获得通知,处理程序将被跳过,直到有其他任务通知它。只有相关任务报告了changed状态,Ansible才会通知处理程序

    2、处理程序用于在任务对受管主机进行更改时执行额外操作,它们不应用作正常任务的替代

  • 相关阅读:
    Business talking in English
    My strength (C-A-R)
    牛排有几分熟怎么说
    深入理解 Java try-with-resource 语法糖
    什么时候用异常,什么时候用断言?
    Java陷阱之assert关键字
    Java断言绝对不是鸡肋
    Java 条件编译
    Java 语法糖详解
    Java中有哪些语法糖?
  • 原文地址:https://www.cnblogs.com/itwangqiang/p/13619906.html
Copyright © 2020-2023  润新知