Ansible Playbook

2016-12-09  本文已影响86人  DongGuangqing

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 最佳的应用场景是用来重启服务,或者触发系统重启操作.除此以外很少用到了.

上一篇 下一篇

猜你喜欢

热点阅读