在 Ansible 中使用失败的任务循环获取项目值
Posted
技术标签:
【中文标题】在 Ansible 中使用失败的任务循环获取项目值【英文标题】:Get item value in a loop with failed tasks in Ansible 【发布时间】:2018-01-16 09:11:59 【问题描述】:我尝试使用 Ansible 执行一件有趣的事情,但出现了问题。
例子:
-
一个文本文件包含一些主机的 IP 地址。
我需要读取文件中的每一行并检查是否为每个 IP 地址打开了 SSH 端口。
如果我在检查主机端口时遇到超时,那么我应该知道哪个 IP 地址似乎有问题,并将此项传递给变量以执行额外的检查。
文件内容:
1.1.1.1
1.1.1.2
1.1.1.2
Ansible 剧本:
- hosts: localhost
connection: local
gather_facts: no
tasks:
- name: Get list of IP adresses
shell: cat /home/file
register: ip_addrs
- name: Check SSH port
wait_for:
host: " item "
port: 22
timeout: 5
with_items: " ip_addrs.stdout_lines "
ignore_errors: true
我的剧本以结果结束:
ok - 1.1.1.1
ok - 1.1.1.2
timeout - 1.1.1.3
循环的结果包括一个回复中每个任务的结果。 我的问题:如何在导致我的任务失败的循环中提取项目的值?
类似于register: result
用于循环中的任务和用于项目when: result|failed
的一些命令。
【问题讨论】:
【参考方案1】:注册循环任务的结果并检查每个项目的子结果,如下所示:
- name: Check SSH port
wait_for:
host: " item "
port: 22
timeout: 5
with_items: " ip_addrs.stdout_lines "
ignore_errors: true
register: loop_res
- debug:
msg: bad host
when: item is failed
with_items: " loop_res.results "
【讨论】:
以上是关于在 Ansible 中使用失败的任务循环获取项目值的主要内容,如果未能解决你的问题,请参考以下文章
Ansible 学习总结—— Ansible 循环条件判断触发器处理失败等任务控制使用总结
Ansible 学习总结—— Ansible 循环条件判断触发器处理失败等任务控制使用总结
ansible自动化运维详解ansible中的任务执行控制及实例演示:循环条件判断触发器处理失败任务
ansible自动化运维详解ansible中的任务执行控制及实例演示:循环条件判断触发器处理失败任务