gpt4 book ai didi

error-handling - Ansible-在循环执行任务期间检查任务是否失败

转载 作者:行者123 更新时间:2023-12-03 08:11:20 25 4
gpt4 key购买 nike

我有一个任务应该运行SQL脚本列表。如果序列中脚本的的任何执行期间发生错误,则该任务应停止执行。

给定以下任务,是否有一种方法可以对其进行修改,以查看循环当前迭代的寄存器标准输出,以检查'ERROR'是否在标准输出中?

- name: Build and run SQLPlus commands
shell: 'echo @{{ item }} | {{ sqlplus }} {{ db_user }}/{{ db_pass }}@{{ environment }}'
register: sh1
with_items:
- ["a.sql", "b.sql"]
# failed_when: "'ERROR' in sh1.stdout_lines"

我在考虑最后一条注释行的内容,但是由于 sh1是循环任务中的寄存器变量,因此每个SQL脚本的输出都位于 results的列表 sh1中;所以我不确定如何访问刚刚执行的命令的特定标准输出。

最佳答案

I was thinking something along the lines of the last commented line,



到现在为止,您一直在思考正确,因此只需取消注释:
- name: Build and run SQLPlus commands
shell: 'echo @{{ item }} | {{ sqlplus }} {{ db_user }}/{{ db_pass }}@{{ environment }}'
register: sh1
with_items:
- ["a.sql", "b.sql"]
failed_when: "'ERROR' in sh1.stdout_lines"

but since sh1 is a register variable from a looping task, the output from each SQL script resides within the list results of sh1;



否。在任务内,可以在每次迭代中直接访问 sh1词典中的值(无列表)。列表 sh1.results对于后续任务将可见。

但是以上内容并不会破坏整个循环的执行,这就是Ansible的设计方式。因此要实现以下目标...

If there is an error during the execution of ANY of the scripts in the sequence, then the task should stop executing.



您可以使用一种解决方法:将任务保存到单独的文件中,并迭代 include任务(请参阅 this answer)。

关于error-handling - Ansible-在循环执行任务期间检查任务是否失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46373894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com