美文网首页
Ansible Playbook

Ansible Playbook

作者: DongGuangqing | 来源:发表于2016-12-09 17:53 被阅读86次

    Playbooks 的格式是YAML, 由一个或多个 ‘plays’ 组成.它的内容是一个以 ‘plays’ 为元素的列表.

    ---
    - hosts: webservers
      vars:
        http_port: 80
        max_clients: 200
      remote_user: root
      tasks:
        - name: ensure apache is at the latest version
          yum: pkg=httpd state=latest
        - name: write the apache config file
          template: src=/srv/httpd.j2 dest=/etc/httpd.conf
          notify:
            - restart apache
        - name: ensure apache is running
          service: name=httpd state=started
          handlers:
            - name: restart apache
              service: name=httpd state=restarted
    

    执行一个playbook

    # 在执行一个 playbook 之前, 看看这个 playbook 的执行会影响到哪些 hosts,
    ansible-playbook playbook.yml --list-hosts
    
    ansible-playbook playbook.yml -f 10
    

    主机与用户

    可以为 playbook 中的每一个 play,个别地选择操作的目标机器是哪些,以哪个用户身份去完成要执行的步骤(called tasks)

    ---
    - hosts: webservers
      remote_user: root
      sudo: yes   # 以sudo 执行task
    

    可以在每一个 task 中,定义自己的远程用户
    可以仅在一个 task 中,使用 sudo 执行命令,而不是在整个 play 中使用 sudo

    Tasks 列表

    每一个 play 包含了一个 task 列表(任务列表).一个 task 在其所对应的所有主机上(通过 host pattern 匹配的所有主机)执行完毕之后,下一个 task 才会执行.

    每个 task 的目标在于执行一个 moudle, 通常是带有特定的参数来执行.在参数中可以使用变量(variables).

    modules 具有”幂等”性,意思是如果你再一次地执行 moudle, moudle 只会执行必要的改动,只会改变需要改变的地方.所以重复多次执行 playbook 也很安全.

    Task example

    tasks:
      - name: create a virtual host file for {{ vhost }}
        template: src=somefile.j2 dest=/etc/httpd/conf.d/{{ vhost }}  # 格式:module: options
    

    Handlers

    Handlers: 在发生改变时执行的操作

    Handlers 也是一些 task 的列表,通过名字来引用,它们和一般的 task 并没有什么区别.Handlers 是由通知者进行 notify, 如果没有被 notify,handlers 不会执行.不管有多少个通知者进行了 notify,等到 play 中的所有 task 执行完成之后,handlers 也只会被执行一次.

    Handlers 最佳的应用场景是用来重启服务,或者触发系统重启操作.除此以外很少用到了.

    相关文章

      网友评论

          本文标题:Ansible Playbook

          本文链接:https://www.haomeiwen.com/subject/gvsemttx.html