一.循环
循环迭代任务
1.简单循环
loop: ##赋值列表
- value1
- value2
- ...
{{item}} ##迭代变量名称
实验:
[lee@ansible ansible]$ vim name.yml
---
- name: install vsftpd httpd
vars_files:
- ./app.yml
hosts: all
remote_user: devops
tasks:
- name: install
dnf:
name: "{{ app }}"
state: present
- name: start
service:
name: "{{ item }}"
state: restarted
enabled: yes
loop:
"{{ app }}"
...
[lee@ansible ansible]$ cat app.yml
---
app:
- vsftpd
- httpd
下载开启成功:
[lee@ansible ansible]$ ansible-playbook name.yml
PLAY [install vsftpd httpd] ****************************************************
TASK [Gathering Facts] *********************************************************
ok: [172.25.254.211]
ok: [172.25.254.111]
TASK [install] *****************************************************************
ok: [172.25.254.211]
ok: [172.25.254.111]
TASK [start] *******************************************************************
changed: [172.25.254.211] => (item=vsftpd)
changed: [172.25.254.111] => (item=vsftpd)
changed: [172.25.254.111] => (item=httpd)
changed: [172.25.254.211] => (item=httpd)
PLAY RECAP *********************************************************************
172.25.254.111 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.25.254.211 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2.循环散列或字典列表
---
- name: create file
hosts: 172.25.0.254
tasks:
- name: file module
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
value in value2 value的值在value2列表中
多条条件组合
when:
条件1 and 条件2
- 条件1
- 条件2
when:
条件1 or 条件2
when: >
条件1
or
条件2
三.触发器
notify: 触发器当遇到更改是触发handlers
handlers: 触发器触发后执行的动作
#实例#:
触发器判断ftp服务是否开启,未开启则开启服务
vim test.yml
//
---
- name: install ftp server
hosts: all
tasks:
- name: install vsftpd
dnf:
name: vsftpd
state: latest
notify:
- restart vsftpd
- firewalld
- name: configure ftp
lineinfile:
path: /etc/vsftpd/vsftpd.conf
regexp: "^anonymous_enable="
line: "anonymous_enable={{state}}"
notify:
restart vsftpd
handlers:
- name: restart vsftpd
service:
name: vsftpd
stste: restarted
enabled: yes
- name: firewalld
firewalld:
service: ftp
state: enabled
permanent: yes
immediate: yes
...
//
四.处理失败任务
1.ignore_errors
作用:
当play遇到任务失败是会终止
ignore_errors: yes 将会忽略任务失败使下面的任务继续运行
2.force_handlers
作用:
当任务失败后play被终止也会调用触发器进程
3.changed_when
作用:
控制任务在何时报告它已进行更改
4.failed_when
当符合条件时强制任务失败
5.block
block: ##定义要运行的任务
rescue: ##定义当block句子中出现失败任务后运行的任务
always: ##定义最终独立运行的任务