[英]How to access stdout from a variable using Ansible
使用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
但是如果我訪問item
而不是stdout
,則在訪問stdout
出錯,並且相同的東西正常工作。
這里有什么幫助嗎?
這是因為您的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
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.