标签:ansible
Task列表
每个play包含了一个task列表(任务列表)一个task在其所在对应的所有主机
上(通过host pattern匹配的所有主机)执行完毕之后,下一个task才会执行
有一点需要明白的是,在一个play之中,所有hosts会获取相同的任务指令,
这是play的一个目的所在,也就是将一组选出的hosts映射到task
在运行playbook时,如果一个host执行task是吧,这个host将会从整个playbook
的rotation中移除,如果发生执行失败的情况,请修正playbook中的错误,然后
重新执行即可
每个task的目标在于执行一个moudle,通常是带有特定的参数来执行,在参数中
可以使用变量
modules具有幂等性,意思是如果你再一次执行moudle,只会执行必要的改动,
只会改变需要改变的地方,所以重复多次执行playbook也很安全
对于command module和shell module重复执行playbook,实际上是重复运行同样的命令
如果执行的命令类似于chmod或者setsebool这种命令,这没有任何问题,也可以使用
一个叫做creates的flag是的这两个module变得具有幂等特性
每一个task必须有一个名称name,这样在运行playbook时,从其输出的任务执行信息
中可以很好地辨别出是属于哪个task的,如果没有定义name,action的值将会用作
输出信息中标记特定的task
如果要声明一个task,以前有一种格式:action:module options,现在推荐使用
更常见的格式module:option
下面是一种基本的task的定义,service module使用key=value格式的参数,这也
是大多数module使用的参数格式
tasks:
- name: make sure apache is running
service: name=httpd state=running
比较特别的两个modudle是command和shell,他们不使用key=value格式的参数
tasks:
- name: disable selinux
command: /sbin/setenforce 0
使用command module和shell module时,我们需要关心返回码信息,如果有一
条命令,它成功执行的返回码不是0,你或许希望这样
tasks:
- name: run this command and ignore the result
shell: /usr/bin/somecommand || /bin/true
或者是这样
tasks:
- name: run this command and ignore the result
shell: /usr/bin/somecommand
ignore_errors: True
如果action行看起来太长,可以用空格或者缩进隔开连续行
在action行中可以使用变量,建设在vars那里定义了一个变量vhost,可以
这样使用
tasks:
- name: create a virtual host file for {{ vhost }}
template: src=somefile.j2 dest=/etc/httpd/conf.d/{{vhost}}
本文出自 “八英里” 博客,谢绝转载!
标签:ansible
原文地址:http://5921271.blog.51cto.com/5911271/1774428