Ansible Playbook 的结构说明:Task 和 Handler

2020-01-15 0 By admin

playbook是由一个或多个”play”组成的列表。
play的主要功能就是对一组主机应用play中定义好的task。从根本上来讲一个task就是对ansible一个module的调用。而将多个play按照一定的顺序组织到一个playbook中,我们称之为编排。

一、playbook主要有以下四部分构成

  1. Target section: 用于定义执行playbook的主机、用户以及链接方式(默认ssh)。
  2. Variable section: 定义playbook运行时需要使用的变量。
  3. Task section: 定义将要在远程主机上执行的任务列表。
  4. Handler section: 定义task执行完成以后需要调用的任务。

二、Target section

设置要执行play的主机信息。

  1. hosts: 定义远程的主机组
  2. user: 执行该任务组的用户
  3. become:如果设置为yes。执行时,获取root权限
  4. become_user: 指定sudo提权的用户,默认为root。
  5. connection:指定通过什么方式连接到远程主机,默认ssh
  6. gathe_facts:在执行playbook的时候默认会执行setup模块获取远程主机信息。

三、Variable section

执行play时,对变量的操作。

  1. var:直接调用变量。
  2. vars_files:在files文件中通过字典的方式调用变量,变量值预先设定好了。
  3. vars_prompt:通过交互的方式为变量赋值,可设置为隐私模式,输入值的时候屏幕不显示。

Ansible 关于变量的介绍

四、Task section

play的主体部分是任务列表。
1、任务列表中的各任务按次序逐个在hosts中指定的所有主机上执行,在所有主机上完成第一个任务后再开始第二个。
2、在自上而下运行某playbook时,如果中途发生错误,则整个playbook会停止执行,由于playbook的幂等性,playbook可以被反复执行,所以即使发生了错误,在修复错误后,再执行一次即可。
3、定义task可以使用action: module options或module: options的格式,推荐使用后者以实现向后兼容。

五、Handler section

在Ansible Playbook中,handler事实上也是个task,只不过这个task默认并不执行,只有在被触发时才执行。
handler通过notify来监视某个或者某几个task,一旦task执行结果发生变化(changed),则触发handler,执行相应操作。
handler会在所有的play都执行完毕之后才会执行,这样可以避免当handler监视的多个task执行结果都发生了变化之后而导致handler的重复执行(handler只需要在最后执行一次即可)。