• ansible 的playbook 使用示例


    实例二:handlers:

      在notify中列出的操作为handler,比如之前配置了apache的配置文件,http.conf端口发生变化后,重新执行ansible-playbook后,查看远程的端口,并未发生变化。需要用到notify

    引入变量:
        vars:在后面添加变量名,然后再引入变量,必须加{{}},用变量名替换。

    - hosts: 192.168.1.62
      remote_user: root
      vars:
      - packages: httpd
      tasks:
      - name: install httpd packages
        yum: name={{ packages }} state=latest
      - name: install configuration file for httpd
        copy: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf
        notify:
        - restart httpd
      - name: start httpd service
        service: enabled=true name={{ packages }} state=started
      handlers:
      - name: restart httpd
        service: name={{ packages }} state=restarted
    

      执行效果:

    ansible-playbook httpd_setup.yml 
    
    192.168.1.62               : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    

      

    案例六:template:模板
      比如两台远程服务器要监听的端口不同,maxclients不同,而且主机名不同。可以调用模板。j2代表模板。在本地创建模板文件httpd.conf.j2,在yml中定义template

    cd /root/ && mkdir templates && cp conf/httpd.conf templates/
    mv templates/httpd.conf template/httpd.conf.j2
    vim httpd.conf.j2
    Listen        {{ http_port}}
    MaxClients    {{ maxClients}}
    ServerName    {{ ansbible_fqdn }}
         
    vi /etc/ansible/hosts
    [webservers]
    192.168.133.2 http_port=80 maxClients=100
    192.168.133.3 http_port=8080 maxClients=200
         
    vi apache.yml
    - host: webservers
      remote_user: root
      vars:
      - package: httpd
      tasks:
      - name: install httpd packages
      yum: name={{ package }} state=lastest
      - name: install configuration file for httpd
        template: src=/root/templates/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
        notify:
        - restart httpd
      - name: start httpd service
        service: enabled=true name={{ package }} state=started   
      handlers:
      - name: restart httpd
        service: name=httpd state=restarted
         
    ansible-playbook apache.yml
    

      

     案例七:tags

    多次运行playbook时,其中某些task不需要运行,只需运行某个task,可以单独标记该task,在yml中指定tags。
    在playbook可以为某个或某些任务定义为一个标签,在执行playbook时,通过ansible-playbook命令使用--tags选项能实现仅运行指定的tasks而非所有的。

     其中tags中的conf和service为自己命名的。特殊:不能定义为always

    vi apache.yml
    - host: webservers
      remote_user: root
      vars:
      - package: httpd
      tasks:
      - name: install httpd packages
        yum: name={{ package }} state=lastest
      - name: install configuration file for httpd
        template: src=/root/templates/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
        tags:
        - conf
        notify:
        - restart httpd
      - name: start httpd service
        service: enabled=true name={{ package }} state=started    
        tags:    
        - service  
      handlers:
      - name: restart httpd
        service: name=httpd state=restarted
         
    ansible-playbook apache.yml --tags="conf"
    
    ansible-playbook apache.yml --tags="service"
    

      

    roles:
    1.目录名同文件名
    2.目录结构有固定格式
        files:静态文件
        templates:Jinjia2模板文件
        tasks:至少有main.yml文件,定义各tasks
        handlers:至少一个main.yml文件,定义各handlers
        vars:至少有一个main.yml文件,定义变量
        meta:定义依赖关系等信息
    3.site.yml中定义playbook,额外有其他的yml文件。

    roles能根据层次型结构目录装载变量文件,task已经handlers,使用roles需要在playbook中
    使用include指令即可。roles通过将变量,文件,任务,模块,处理器放置到单独的目录找那中

    roles案例:
    tree ansible_playbook
    site.yml
    webservers.yml
    dbservers.yml
    roles/
        common/
            files/
            templates/
            tasks/
            handlers/
            vars/
            meta/
        webservers/
            files/
            templates/
            tasks/
            handlers/
            vars/
            meta/
        
    

      

    在playbook中,可以这样使用roles:
    - hosts: webservers
      roles:
        - common
        - webservers
        

    也可以向 roles传递参数,例如:

    1
    2
    3
    4
    5
    - hosts: webservers
      roles:
        - common
        - { role: foo app instance, dir:'/opt/a, port: 5000 }
        - { role: foo app instance, dir: '/opt/b', port: 5001 }

    甚至也可以条件式地使用 roles,例如

    1
    2
    3
    - hosts: webservers
      roles
    I   - { role: some_role, when:"ansible_os_ family =='RedHat'" }

     1.创建role的步骤
    (1)创建以 roles命名的目录
    (2)在 roles目录中分别创建以各角色名称命名的目录,如 webservers等
    (3)在每个角色命名的目录中分别创建f11es、 handlers、meta、 tasks、 templates和vars目录:用不到的目录可以创建为空目录,也可以不创建
    (4)在p1 abook文件中,调用各角色
    2.role内各目录中可用的文件
    tasks目录:至少应该包含一个名为man.ym1的文件,其定义了此角色的任务列表:此文件可以使用 include包含其它的位于此目录中的task文件;
    fi1es目录,存放由copy或script等模块调用的文件
    templates目录: template模块会自动在此目录中寻找]inja2模板文件
    handlers目录:此目录中应当包含一个main
    ym1文件,用于定义此角色用到的各 handler;在 handler中使用 include包含的其它的 handler文件也应该位于此目录中
    vars目录:应当包含一个main,ym1文件,用于定义此角色用到的变量
    meta目录:应当包含一个main,ym1文件,用于定义此角色的特殊设定及其依赖关系; ansi1e1.3及其以后的版本才支持
    default目录:为当前角色设定默认变量时使用此目录:应当包含一个main.ym1文件


    Tags
    tags用于让用户选择运行或路过 playbook中的部分代码。 ansi1e具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生
    变化的时间依然会非常地长。此时,如果确信其没有变化,就可以通过tags跳过此些代码片断

    案例:172.168.100.1配置成webserver,172.168.100.2配置成dbservers,172.168.100.3配置成web和db

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    mkdir -pv ansible_playbook/roles/{webservers,dbservers}/{tasks,files,templates,meta,handlers,vars}
    cd roles/webservers/
    cp /etc/httpd/conf/httpd.conf files/
    vim tasks/main.yml
    - name: install httpd packages
     yum: name=httpd
    - nane: install configuration file
     copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf
      tags:
       conf
      notify:
      - restart httpd
    - name: start httpd
      service: name=httpd state=started
     
    vim handler/main.yml
    - name: restart httpd
     service: name=httpd state=restarted
    如果有vars可以配置,此示例中不使用
    vim vars/main.yml
    - http_port: 80
    - maxClients: 200
     
    如果想掉用webservers,在roles目录之外创建site.yml文件
    vim ansible_playbook/site.yml
    - hosts: webservers
      remote_user: root
      roles:
      - webservers
      
    - hosts: 172.168.100.1
      remote_user: root
      roles:
      - dbservers
     
    - hosts: 172.168.100.2
      remote_user: root
      roles:
      - dbservers 
      - webservers

     同理在dbservers进行配置。
    ansible-playbook site.yml

  • 相关阅读:
    Linux文件权限学习总结
    【转】Hibernate和ibatis的比较
    Spring AOP原理及拦截器
    Spring AOP (下)
    Spring AOP (上)
    SQL语句限定查询知识点总结
    多线程知识点总结
    关于tomcat那些事情
    java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException 的解决办法
    cacti 与 nagios 一些总结 【八】
  • 原文地址:https://www.cnblogs.com/weifeng1463/p/12159058.html
Copyright © 2020-2023  润新知