循环
简单循环
{{item}} 迭代变量名称
loop:
- value1
- value2
- ... //赋值列表{{item}} //迭代变量名称
循环散列或字典列表
- name: create filehosts: host1tasks:- name: file moudleservice:name: "{{ item.name }}"state: "{{ item.state }}"loop:- name: httpdstate: started- name: vsftpdstate: stopped
~
条件
when:- 条件1- 条件2
条件判断
= //value == “字符串”,value == 数字 解释
< //value < 数字
> //value > 数字
<= //value <= 数字
>= //value >= 数字
!= //value != 数字
is defined value //value is defined 变量存在
is not defined //value is not defined 变量不存在
in //value is in value 变量为
not in //value is not in value 变量不为
bool变量 为true value //value的值为true
bool变量 false not value //value的值为false
多条条件组合
when:条件1 and 条件2- 条件1- 条件2 //当条件1和条件2都为真when:条件1 or 条件2 //满足其中一个when: >条件1or条件2 //满足其中一个
创建两个用户 user1
和 user2
, user1
的 UID 是 6666
,注释是 user1 comment
,user2
的 UID 是 7777
,没有注释。
vim userlist.yml
userlist:- name: user1id: 6666comment: user1 comment- name: user2id: 7777vim usercreate.yml
- name: create userhosts: allvars_files: ./userlist.ymltasks:- name: create user with commentuser:name: "{{item.name}}"uid: "{{item.id}}"comment: "{{item.comment}}"state: presentwhen: item.comment is definedloop:"{{userlist}}"- name: create user without commentuser:name: "{{item.name}}"uid: "{{item.id}}"state: presentwhen: item.comment is not definedloop:"{{userlist}}"
触发器
notify: //触发器当遇到更改是触发handlers
handlers: //触发器触发后执行的动作
在指定的服务器上部署网站,并创建一个简单的主页
vim webs.yml
webs:- name: bbs.westos.orgdoc: /var/www/virtual/westos.org/bbs/htmlindex: "bbs.westos.org's page"- name: login.westos.orgdoc: /var/www/virtual/westos.org/login/htmlindex: "login.westos.org's page"- name: www.westos.orgdoc: /var/www/htmlindex: "www.westos.org's page"
vim html.j2
{% for web in webs %}
{% if web.name is not defined %}
<VirtualHost _default_:80>
{% elif web.name is defined %}
<VirtualHost *:80>ServerName {{web.name}}
{% endif %}DocumentRoot {{web.doc}}
</VirtualHost>
{% endfor %}
vim web.yml
- name: Create website index pagehosts: allvars_files: ./webs.ymltasks:- name: install httpdyum:name: httpdstate: present- name: serviceservice:name: httpdstate: startedenabled: no- name: Create index.html for each websitetemplate:src: ./html.j2dest: "/etc/httpd/conf.d/vhost.conf"notify: restart httpd- name: create directorylineinfile:path: "{{item.doc}}/index.html"line: "{{ item.index }}"create: yesloop: "{{webs}}"handlers:- name: restarted httpdservice:name: httpdstate: restarted