Asible管理变量和事实和实施任务控制
第三章 管理变量和事实
1、通过变量,可以轻松地在Ansible项目中管理给定环境的动态值,例如:
-要创建的用户
-要安装的软件包
-要重新启动的服务
-要删除的文件
-要从互联网检索的存档
2.变量由字符串组成,必须由字母开头,并且只能含有字母、数字和下划线
3.变量的定义方式
(1)playbook变量可通过多种方式定义。最简单的方式是将它放在playbook开头的vars块中。

(2)也可以在外部文件中定义playbook变量。此时不使用vars,使用vars_files指令,而后,以YAML格式在文件中定义playbook变量


第四章 实施任务控制
(一).使用循环来编写高效的任务,并使用条件控制运行任务的时间
1.使用loop关键字添加到任务中,将应对其迭代任务的项目列表取为值,循环变量item保存每个迭代过程中使用的值。例如:以下代码使用两次service模块确保两个网络服务处于运行状态
- name: Postfix is running
ansible.builtin.service:
name: postfix
state: started
- name: Dovecot is running
ansible.builtin.service:
name: dovecot
state: started
使用loop循环将两个代码重新编写为一个简单循环
- name: Postfix and Dovecot are running
ansible.builtin.service:
name: "{{ item }}"
state: started
loop:
- postfix
- dovecot
2.循环字典列表:以下示例中,列表中的每一项实际时字典,每个字典均有两个键
- name: Users exist and are in the correct groups
user:
name: "{{ item['name'] }}"
state: present
groups: "{{ item['groups'] }}"
loop:
- name: jane
groups: wheel
- name: joe
groups: root
3.老版样式的循环关键字:with_items,可以和loop相互转换
vars:
data:
- user0
- user1
- user2
tasks:
- name: "with_items"
ansible.builtin.debug:
msg: "{{ item }}"
with_items: "{{ date }}"
条件任务语法:
when 语句只是任务中的又一个键,就如任务的名称及其所使用的模块一样。
when关键字的使用:
(1)使用or语句

(2)使用and运算符

(3)使用列表来描述条件列表

(4)使用括号分组来表达更复杂的条件语句

(二).实施仅在另一个任务更改托管主机时运行的任务(处理程序)
描述:在任务更改后才执行的任务——处理程序handlers,并且是在tasks下所有的任务都运行结束之后再执行
处理程序用于再任务对受管主机进行更改时执行额外操作,它们不应用作正常任务的替代。
(三).控制任务失败时发生的情况,以及导致任务失败的条件。
当任务失败时,ansible会跳过后续所有的任务。
如果想要任务失败后还继续执行play,可以使用下面几个方法:
1.忽略任务失败:
使用ignore_errors关键字
2.任务失败后强制执行处理程序
如果任务失败并且play在该主机中止,则收到play中早前任务通知的处理程序将不会运行。如果您在play中设置force_handlers:yes关键字,则即使play因为后续任务失败而终止也会调用被通知的处理程序。
注意:处理程序会在任务报告changed结果时获得通知,而在任务报告ok或者failed结果时不会获得通知。
3.指定任务失败条件
在任务中使用failed_when关键字来指定表示任务已失败的条件。这通常用于可能成功执行命令,但命令输出指示失败的命令模块。
4.指定任务何时报告“Changed"结果
使用changed_when关键字可以控制任务如何报告其已更改受管主机上的某些内容
- name: Validate httpd configuration
ansible.builtin.command: httpd -t
changed_when: false
register: httpd_config_status
hanged_when: false:因为 “验证配置” 这个操作,本身并不会对目标主机的系统状态(比如文件、服务等)产生实质性改变,只是做检查。所以通过设置 changed_when: false,强制让这个任务执行后,changed 状态始终为 false,这样在 Ansible 执行结果中,该任务就只会报告 ok(如果命令执行成功,配置验证通过)或者 failed(如果命令执行失败,配置有问题),而不会错误地显示 changed。
更多推荐



所有评论(0)