以下是一段代码,该代码正在检索本地区域的列表,并在任何一个本地区域未处于RUNNING状态时尝试进入救援块。
但是救援块失败,位于“检查区域是否处于运行状态”
期望是发送带有任务名称的电子邮件。但这可以很好地处理其他失败的任务。有人可以指导吗?
失败! => {“ msg”:“该任务包含带有未定义变量的选项。错误为:'item'未定义\ n \ n错误似乎在'/etc/ansible/playbooks/misc/test1404.yml'中:第23行第9列,但根据确切的语法问题,可能\ n在文件的其他位置。\ n \ n出现问题的行似乎是:\ n \ n救援:\ n-名称:从Ansible发送电子邮件控制器节点\ n ^这里\ n“}
- '{{ host }}'
tasks:
- block:
- name: Retrieve list of local zones
shell: /usr/sbin/zoneadm list | grep -v global
register: lzones
tags:
- local_zone_list
- debug:
msg: "{{ item }}"
with_items: "{{lzones.stdout_lines}}"
- name: Check if the zones are in running state
shell: /usr/sbin/zoneadm list | grep -v global | grep "{{ item }}" | awk '{print$3}'
register: status
with_items: "{{lzones.stdout_lines}}"
failed_when: status.stdout.find('running') == -1
< few other tasks>
rescue:
- name: Sending an e-mail from Ansible controller node
mail:
host: localhost
port: 25
to: xyz@abc.com
subject: Reboot Failed
body: Reboot FAILED at TASK - {{ ansible_failed_task.name }} with ERROR {{ ansible_failed_result }}
delegate_to: localhost
答案 0 :(得分:0)
那真是个令人着迷的兔子洞。
因为在可使用的jinja2模板中有rendered recursively,当它尝试呈现包含失败模板的失败消息时,它会尝试重新呈现失败模板,导致错误
似乎似乎会因为包含ansible_failed_task
变量而对您造成影响,因为-莫名其妙地-将ansible_failed_result
包含在体内似乎是安全的< / p>
通过对ansible 2.9.6的试验,我可以最好地看出,必须确定在触摸之前是否可以安全地输出a*_task
风味变量,因为我完全无法找到{{ 1}}或| string
或任何,只要jinja2包含伪造的变量引用,它就可以触摸该变量:
|regex_replace
将 - block:
- debug:
msg: this explodes {{ nope_not_a_var }}
rescue:
- set_fact:
is_undefined_error: '{{ "undefined variable" in ansible_failed_result.msg }}'
- name: variable is unsafe version
debug:
msg: >-
failed task action has an undefined variable in the task,
so we cannot show you the task, but here is the result: {{ ansible_failed_result }}
when: is_undefined_error
- name: variable is safe to output version
debug:
msg: Reboot FAILED at TASK - {{ ansible_failed_task.name }} with ERROR {{ ansible_failed_result }}
when: not is_undefined_error
的测试直接内联到"..." in ansible_failed_result.msg
行中可能是安全的,但是由于它(应该)两次都产生相同的答案,所以没有真正的答案有足够的理由对其进行两次评估
在我看来,这是一个烦人的错误,但是我没有足够的精力去与他们的社区接轨-但是,我鼓励您file a bug与他们一起