簡體   English   中英

如何使用Ansible從變量訪問stdout

[英]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_labelstdout

所需的輸出應如下所示。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM