使用Ansible从注册变量访问stdout时出错
我已将任务输出注册到变量temp_var中,因此变量内容将如下所示。
"msg": {
"changed": true,
"msg": "All items completed",
"results": [
{
"_ansible_ignore_errors": null,
"_ansible_item_label": "imntg",
"_ansible_item_result": true,
"_ansible_no_log": false,
"changed": true,
"failed": false,
"item": "imntg",
"rc": 0,
"stderr": "",
"stderr_lines": [],
"stdout": "03-26-2019-06h40m21s\n03-26-2019-06h30m21s\n",
"stdout_lines": [
"03-26-2019-06h40m21s",
"03-26-2019-06h30m21s"
]
},
{
"_ansible_ignore_errors": null,
"_ansible_item_label": "imntg4",
"_ansible_item_result": true,
"_ansible_no_log": false,
"changed": true,
"failed": false,
"item": "imntg4",
"rc": 0,
"stderr": "",
"stderr_lines": [],
"stdout": "03-26-2019-06h40m21s\n03-26-2019-06h30m21s\n",
"stdout_lines": [
"03-26-2019-06h40m21s",
"03-26-2019-06h30m21s"
]
},
{
"_ansible_ignore_errors": null,
"_ansible_item_label": "",
"_ansible_item_result": true,
"_ansible_no_log": false,
"changed": false,
"item": "",
"skip_reason": "Conditional result was False",
"skipped": true
}
]
}
}
我正在尝试从上述输出中访问_ansible_item_label
,stdout
。
所需的输出应如下所示。
TASK [debug] ***********************************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": [
"03-26-2019-06h40m21s\n03-26-2019-06h30m21s\n - imntg",
"03-26-2019-06h40m21s\n03-26-2019-06h30m21s\n - imntg4"
]
}
下面是我尝试过的代码。
- debug:
msg: "{% set temp_var_tag_list = [] %}{% for result in temp_var.results %}{{ temp_var_tag_list.append(result.stdout ~ ' - ' ~ result._ansible_item_label) }}{% endfor %}{{ temp_var_tag_list }}"
我可以访问_ansible_item_label
,但是访问stdout
而不是item
时,访问stdout
时出错,并且同样的事情起作用。
这里有什么帮助吗?
答案 0 :(得分:2)
这是因为您的results
列表包含3个元素,最后一个没有stdout
键。
您可以在Jinja代码中添加“如果存在,则”逻辑,如下所示:
- debug:
msg: "{% set temp_var_tag_list = [] %}{% for result in temp_var.results %}{% if result.stdout is defined -%}{{ temp_var_tag_list.append(result.stdout ~ ' - ' ~ result._ansible_item_label) }}{%- endif %}{%- endfor %}{{ temp_var_tag_list }}"
产生的输出:
TASK [debug] ***********************************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": [
"03-26-2019-06h40m21s\n03-26-2019-06h30m21s\n - imntg",
"03-26-2019-06h40m21s\n03-26-2019-06h30m21s\n - imntg4"
]
}
希望有帮助
PS:我假设您所需的输出不是您在问题中描述的输出,而是您尝试从Jinja代码获得的输出,因为这两个不一致。 (“ imntg4-imntg4”不在您的stdout
中)