zoukankan      html  css  js  c++  java
  • Ansible之handler和notify结合触发条件

    handlers和notify结合使用触发条件

    ·Handlers(触发器)

      是task列表,这些task与前述的task并没有本质上的不同,用于当关注的资源发生变化时,才会采取一定的操作。

    ·Notify(通知)

      此action可用于在每个play的最后被触发,这样可以避免多次有改变发生时每次都执行指定的操作,仅在所有的变化发生完成最后一次性地执行指定操作。在notify中列出的操作称为handler,也即notify中调用handler中定义的操作。

    ·以http服务为例

    ---
    - hosts: websrvs
      remote_ user: root
    
      tasks :
         - name: install httpd package
           yum: name=httpd
         - name: copy conf file 
           copy: src=files/httpd. conf de st=/etc/httpd/conf/ backup=yes
           notify: 
          - restart service#起到通知作用
    - name: start service service: name=httpd state=started enab led=yes handlers:#这个是触发器 - name: restart service service: name=httpd state=restarted

     ·playbook中的tags使用(创建标签)

    ---
    - hosts: websrvs
      remote_ user: root
    
      tasks :
         - name: install httpd package
           yum: name=httpd
         - name: copy conf file 
           copy: src=files/httpd. conf de st=/etc/httpd/conf/ backup=yes
           notify: 
          - restart service#起到通知作用
           tags: inshttpd#创建便签,可以通过名字调用上面的内容
         - name: start service
           service: name=httpd state=started enab led=yes
      handlers:#这个是触发器
         - name: restart service
           service: name=httpd state=restarted

    ···可以通过调用标签单独执行角色里面的内容···

    ansible-playbook -t inshttpd httpd.yml#-t是指定要执行的标签,多个标签用逗号隔开,多个标签可以定义一样的名字

    playbook中的变量

      变量名:仅能由字母、数字和下划线组成,且只能以字母开头

      变量来源:

        1.ansible setup facts 远程主机的所有变量都可以直接调用

        2.在/etc/ansible/hosts中定义

          普通变量:主机组中的主机单独定义,优先级高于公共变量

          公共组变量:针对主机组中所有主机定义统一变量

    [webserver]
    192.168.157.1
    192.168.157.2 hosts1=25#普通变量
    [webserver:vars]#定义组变量
    nodname=www
    dom=magendu.com

        3.通过命令行执行指定变量,优先级最高 

    ---
    - hosts: websrvs
      remote_ user: root
    
      tasks :
         - name: install httpd package
           yum: name={{变量}}
         - name: start service
           service: name={{变量}} state=started enabled=yes
    ansible-playbook -e '变量=httpd' http.yml#多个变量执行时,用空格隔开

        4.在playbook中定义

        vars:

        - var1:value1

        - var2:value2

    ---
    - hosts: websrvs
      remote_ user: root
      vars:
         - pkname1: httpd
         - pkname1: vsftp
    
      tasks :
         - name: install httpd package
           yum: name={{pkname1}}
         - name: start service
           service: name={{pkname2}} state=started enabled=yes

        5.在role中定义

        6.可以在一个文件中定义许多变量

    vim vasr.yml
    var1: httpd
    var2: vsftp

    在使用的时候需要指定

    ---
    - hosts: 10.6.12.56
      remote_user: root
      vars_files: 
          - vars.yml
    
      tasks:
         - name:install package
           yum: name={{ var1 }}

    模板templates

    ·文本文件,嵌套由有脚本(使用模板编程语言编写)

    ·jinja2语言,使用字面量,有下面形式

      字符串:使用单引号或双引号

      数字:整数,浮点数

      列表:[item1,item2,。。。]

      元组:(item1,item2,。。。)

      字典:{item1,item2,。。。}

      布尔型:true/false

    ·算数运算:+,-,*,/,//,%,**

    ·比较操作:==,!=,>,>=,<,<=

    ·逻辑运算:and,or,not

    ·流表达式:For If When

    ·在选取文件当模板的时候需要改名,一般以j2当文件后缀,并将文件放在templates文件目录下

      以管理nginx为例

    ---
    - hosts: 10.6.12.53
      renout_user: root
    
      tasks:
         - name:  install package
            yum: name=nginx
         - name: copy template
            templates:  src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
         - name: start service
           service: name=nignx start=stared enabled=yse

    when

      条件测试:如果需要根据变量,facts或此前任务的执行结果来作为某task执行与否的前提时要用到条件测试,通过when语句实现,在task中使用,jinja2的语法式。

    ·when语句

    ·在task后添加wen子句即可使用条件测试;when语句支持jinja2表达式语法

    ---
    - hosts: 10.6.12.53
      renout_user: root
    
      tasks:
         - name:  install package
            yum: name=nginx
         - name: copy template
            templates:  src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
            when: ansible_distribution_major_version=="7"#当符合这个条件就执行上面
         - name: start service
           service: name=nignx start=stared enabled=yse
  • 相关阅读:
    LinuxDay10——文本处理工具sed
    设计模式原则----开放封闭原则
    模式设计原则----单一职责原则
    策略模式
    建模工具
    vs查看源码行数
    单例模式(Singleton Pattern)
    UML
    简单工厂模式(Simple Factory Pattern)
    winform ProgressBar
  • 原文地址:https://www.cnblogs.com/zrxuexi/p/11722796.html
Copyright © 2011-2022 走看看