ansible - 如何在ansible“重试和直到”块中找到一个字符串?
问题描述
我正在安装一些插件,然后在命令循环中检查状态。我想检查命令状态的结果,如果未安装插件,我想借助重试模块再次安装它。
- 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
我正在使用寄存器保存结果,我知道寄存器将结果保存在结果中,在这种情况下,它将结果保存在“结果”字典中。现在我想在直到状态命令的结果中检查一个字符串,它应该是结果字典的第二个值,但我无法抓住它。当我使用
debug: msg="{{ result['results'][1]['stdout'] }}"
我可以看到状态命令的输出,但我不知道如何在直到模块中使用它。每当我在那里使用结果时,它都会出错。我想使用类似的东西
until: result['results'][1]['stdout'].find("all systems go") != -1
解决方案
如果两者都run install plugins
返回run status
类似
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
如果只返回确认,则不可能使用循环,因为在每次迭代中都会评估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.results。可能值得回顾一下。
- debug:
var: result
推荐阅读
- julia - 在 Julia 中断言对角化向量时导致“AssertionError”的原因是什么?
- vue.js - 添加到 vue.js 值只是将数字添加到末尾
- cassandra - Cassandra 集合数据类型是否适用于千项?
- node.js - 在nodejs中使用azure blob存储触发器在另一个容器中压缩和写入文件
- r - 创建两个矩阵行的不等维度矩阵的总和
- json - 在invoke-restmethod(JSON正文)中的属性内定义
- r - R - metafor - 在 robust() 函数的输出中不测试主持人
- android - 由于更改包名称而连接到 Firestore 错误(新 Firestore 项目?)
- javascript - 如何在 javascript 中使用与系统时区不同的时区设置日期?
- android - 迁移到 Hilt 后的 KaptExecution