如何在 ansible "retries and until" 块中查找字符串?
How to find a string in ansible "retries and until" block?
我正在安装一些插件,然后在命令循环中检查状态。我想检查命令状态的结果,如果没有安装插件我想在重试模块的帮助下再次安装它。
- name: install plugins
command: "run {{ item }}"
with_items:
- install plugins
- status
register: result
until: result.stdout.find("InstallPlugin1 and InstallPlugin2") != -1
retries: 5
delay: 10
我正在使用寄存器来保存结果,我知道寄存器将结果保存在结果中,在这种情况下,它会将结果保存在 "results" 字典中。现在我想在 until 中检查状态命令结果中的一个字符串,它应该是结果字典的第二个值,但我无法获取它。 当我使用
debug: msg="{{ result['results'][1]['stdout'] }}"
我可以看到 status 命令的输出,但我不知道如何在 until 模块中使用它。每当我在那里使用结果时,它都会出错。我想使用类似
的东西until: result['results'][1]['stdout'].find("all systems go") != -1
我想这就是您要找的:
until: "all systems go" in item['stdout']
您拥有的 register
语句将列出 with_items
循环中所有刺激的汇总结果,而您想要的条件是 item
本身。根据您正在做的事情,您甚至可能不需要注册该变量。
如果 run install plugins
和 run status
return 都像
installed: InstallPlugin1, InstallPlugin2
下面的任务将完成工作
- name: install plugins
command: "run {{ item }}"
loop:
- install plugins
- status
register: result
until:
- result.stdout is search('InstallPlugin1')
- result.stdout is search('InstallPlugin2')
retries: 5
delay: 10
如果只有 run status
return 确认,则无法使用循环,因为 until 语句在每次迭代中都被计算。一个选项是连接命令。例如
- name: install plugins
command: "run install plugins; run status"
register: result
until:
- result.stdout is search('InstallPlugin1')
- result.stdout is search('InstallPlugin2')
retries: 5
delay: 10
可以在每个循环中测试注册的 result。循环完成后,变量 result 将保持累加 result.results。可能值得回顾一下。
- debug:
var: result