循环
简单循环
{{item}} 迭代变量名称
loop:
- value1
- value2
- ... //赋值列表
{{item}} //迭代变量名称
循环散列或字典列表
- name: create file
hosts: host1
tasks:
- name: file moudle
service:
name: "{{ item.name }}"
state: "{{ item.state }}"
loop:
- name: httpd
state: started
- name: vsftpd
state: 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: >
条件1
or
条件2 //满足其中一个
创建两个用户 user1
和 user2
, user1
的 UID 是 6666
,注释是 user1 comment
,user2
的 UID 是 7777
,没有注释。
vim userlist.yml
userlist:
- name: user1
id: 6666
comment: user1 comment
- name: user2
id: 7777
vim usercreate.yml
- name: create user
hosts: all
vars_files: ./userlist.yml
tasks:
- name: create user with comment
user:
name: "{{item.name}}"
uid: "{{item.id}}"
comment: "{{item.comment}}"
state: present
when: item.comment is defined
loop:
"{{userlist}}"
- name: create user without comment
user:
name: "{{item.name}}"
uid: "{{item.id}}"
state: present
when: item.comment is not defined
loop:
"{{userlist}}"
触发器
notify: //触发器当遇到更改是触发handlers
handlers: //触发器触发后执行的动作
在指定的服务器上部署网站,并创建一个简单的主页
vim webs.yml
webs:
- name: bbs.westos.org
doc: /var/www/virtual/westos.org/bbs/html
index: "bbs.westos.org's page"
- name: login.westos.org
doc: /var/www/virtual/westos.org/login/html
index: "login.westos.org's page"
- name: www.westos.org
doc: /var/www/html
index: "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 page
hosts: all
vars_files: ./webs.yml
tasks:
- name: install httpd
yum:
name: httpd
state: present
- name: service
service:
name: httpd
state: started
enabled: no
- name: Create index.html for each website
template:
src: ./html.j2
dest: "/etc/httpd/conf.d/vhost.conf"
notify: restart httpd
- name: create directory
lineinfile:
path: "{{item.doc}}/index.html"
line: "{{ item.index }}"
create: yes
loop: "{{webs}}"
handlers:
- name: restarted httpd
service:
name: httpd
state: restarted