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