Ansible Playbook - 02
Playbook 任务列表
每个 Playbook 都包含一个任务列表,在继续执行下一个任务之前,与主机模式匹配的所有机器将按顺序一次执行一个任务。重要的是要理解,在一个剧本中,所有主机都将获得相同的任务指令。
当从上到下运行 playbook 时,带有失败任务的主机将从整个 playbook 的轮转中删除。如果失败,只需纠正 playbook 文件并重新运行。
每个任务的目标都是执行一个具有非常特定参数的模块。如上所述,变量可以用于模块的参数中。
模块应该是幂等的,也就是说,在一个序列中运行一个模块多次应该与只运行一次具有相同的效果。实现等幂性的一种方法是让模块检查其所需的最终状态是否已经实现,如果已经实现,则退出而不执行任何操作。如果 playbook 使用的所有模块都是幂等的,那么 playbook 本身很可能也是幂等的,因此重新运行 playbook 应该是安全的。
每个任务都应该有一个 name
,它包含在运行 playbook 的输出中。这是一个人类可读的输出,因此提供每个任务步骤的良好描述非常有用。但是,如果没有提供名称,则将使用提供给action
的字符串作为输出。
任务可能使用一些旧的格式,action: module options
,但是建议使用格式 module: options
。这种推荐格式在整个文档中都使用,但是您可能会在一些 Playbook 中遇到更旧的格式。
一个基本的格式就像这样,和大多数模块一样,service
模块也是 key=value
参数
command
和 shell
两个模块会取一些参数列表,而不是使用 key=value
参数,简单使用如下:
command
和 shell
两个模块会关心返回码,所有如果你有一个命令执行成功的返回码不为零,那么你可以这样做。
或者这样
如果 action 的行太长了,你可以用空格来打断他,并且在任何有缩进的地方继续
变量也可以被使用在 action 行,例如在下面的例子里定义了 vhost
这个变量
Action
Ansible 更喜欢这样的格式
早期的版本是这样,现在也还可以工作,但是更推荐上一种。
版权声明: 本文为 InfoQ 作者【耳东】的原创文章。
原文链接:【http://xie.infoq.cn/article/47730a45278460e91d2a05af5】。未经作者许可,禁止转载。
评论