ansible“;带有“u行:cat somefile”;在跳过的块中失败
我有一本游戏书,上面有一个方块有一个when条件。内部是一个带有循环的任务。如何更改此循环,以便在条件为false时跳过的任务不会失败ansible“;带有“u行:cat somefile”;在跳过的块中失败,ansible,Ansible,我有一本游戏书,上面有一个方块有一个when条件。内部是一个带有循环的任务。如何更改此循环,以便在条件为false时跳过的任务不会失败 block: - name: create a file lineinfile: line: "Hello World" path: "{{my_testfile}}" create: yes - name: use the file debug:
block:
- name: create a file
lineinfile:
line: "Hello World"
path: "{{my_testfile}}"
create: yes
- name: use the file
debug:
msg: "{{ item}}"
with_lines: cat "{{my_testfile}}"
when: false
将失败的任务更改为以下选项,即使文件不存在,也始终可以运行该任务,并且在不需要的情况下不会使用shell或命令:
-名称:使用该文件
调试:
msg:“{{item}}”
循环:{{(lookup('file',my_testfile,errors='ignore')| default('',true)).split('\n')}
要点:
- 将
查找插件与文件
一起使用,以便在文件不存在时返回文件内容或errors='ignore'
,而不是错误None
- 使用
过滤器,并将第二个选项设置为default
,以便在var存在但为null或空时返回默认值true
- 在新行上拆分结果以获得行列表(如果文件不存在,则为空列表)
注意:@Vladimir报告,我更正了您在ansible中无效的var名称。将失败的任务更改为以下内容,即使文件不存在,也始终能够运行,并且在不需要的情况下不会使用shell或命令:
-名称:使用该文件
调试:
msg:“{{item}}”
循环:{{(lookup('file',my_testfile,errors='ignore')| default('',true)).split('\n')}
要点:
- 将
查找插件与文件
一起使用,以便在文件不存在时返回文件内容或errors='ignore'
,而不是错误None
- 使用
过滤器,并将第二个选项设置为default
,以便在var存在但为null或空时返回默认值true
- 在新行上拆分结果以获得行列表(如果文件不存在,则为空列表)
注意:@Vladimir报告,我更正了您在ansible中无效的var名称。测试文件是否存在。比如说
-块:
-名称:创建一个文件
线条填充:
台词:“你好,世界”
路径:“{my_testfile}}”
创建:是
-名称:使用该文件
shell:'[-f“{my_testfile}}]&&cat{{my_testfile}”
寄存器:结果
-名称:使用该文件
调试:
msg:“{{item}}”
循环:“{result.stdout_lines}”
何时:假
首选
查找插件文件。测试文件是否存在。比如说
-块:
-名称:创建一个文件
线条填充:
台词:“你好,世界”
路径:“{my_testfile}}”
创建:是
-名称:使用该文件
shell:'[-f“{my_testfile}}]&&cat{{my_testfile}”
寄存器:结果
-名称:使用该文件
调试:
msg:“{{item}}”
循环:“{result.stdout_lines}”
何时:假
应该优先选择查找插件文件。最后,我混合了提供的答案。将跳过这些任务,而不会失败或产生警告
-块:
-名称:创建一个文件
线条填充:
台词:“你好,世界”
路径:“{my_testfile}}”
创建:是
-名称:获取文件
啜食:
src:{{my_testfile}}”
寄存器:结果
-名称:使用该文件
调试:
msg:“{{item}}”
循环:{(结果['content']|b64decode.split('\n')}
何时:假
我最终得到了一系列提供的答案。将跳过这些任务,而不会失败或产生警告
-块:
-名称:创建一个文件
线条填充:
台词:“你好,世界”
路径:“{my_testfile}}”
创建:是
-名称:获取文件
啜食:
src:{{my_testfile}}”
寄存器:结果
-名称:使用该文件
调试:
msg:“{{item}}”
循环:{(结果['content']|b64decode.split('\n')}
何时:假
my_testfile
不是有效的变量名。@VladimirBotka,实际上my testfile
无效,但my_testfile
无效。我认为你在评论中习惯性地当场改正了:)对。谢谢你的评论:)。my_testfile
不是有效的变量名。@VladimirBotka,实际上my testfile
无效,但my_testfile
无效。我认为你在评论中习惯性地当场改正了:)对。感谢您的评论:)。我对此不太满意,因为它没有失败,但仍然会产生一个警告“无法在预期路径中找到'testfile'(使用-vvv查看路径)”我对此不太满意,因为它没有失败,但仍然会产生一个警告“无法在预期路径中找到'testfile'(使用-vvv查看路径)”
TASK [create a file] ************************************************************************************************************************************************************
TASK [use the file] *************************************************************************************************************************************************************
cat: files/my/testfile: No such file or directory
fatal: [ipad-icpi01]: FAILED! => {"msg": "lookup_plugin.lines(cat \"files/mytestfile\") returned 1"}