首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不可见的云set_fact从dict中的列表中添加项

不可见的云set_fact从dict中的列表中添加项
EN

Stack Overflow用户
提问于 2019-08-07 12:22:12
回答 1查看 54关注 0票数 0

我正在尝试使用ansible hcloud模块。我需要用我创建的服务器的IP设置一个事实列表。

第一台服务器很容易,因为它总是只有一台:

创建空列表:

代码语言:javascript
复制
    - set_fact:
        ips: []

然后创建服务器并将服务器IP添加到列表中:

代码语言:javascript
复制
    - set_fact:
        ips:
          - "{{ ips + [ a3srv_fact.hcloud_server.ipv4_address ] }}"

下一个块有一个循环,因此寄存器给了我以下内容:

代码语言:javascript
复制
"hc_fact": {
    "changed": false,
    "msg": "All items completed",
    "results": [
        {
            "ansible_loop_var": "item",
            "changed": false,
            "failed": false,
            "hcloud_server": {
                "backup_window": "None",
                "datacenter": "nbg1-dc3",
                "id": "3083849",
                "image": "centos-7",
                "ipv4_address": "116.203.204.49",
                "ipv6": "2a01:4f8:c2c:ade4::/64",
                "labels": {},
                "location": "nbg1",
                "name": "a3hc1",
                "rescue_enabled": false,
                "server_type": "cx11",
                "status": "running"
            },
            "invocation": {
                "module_args": {
                    "api_token": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
                    "backups": false,
                    "datacenter": null,
                    "endpoint": "https://api.hetzner.cloud/v1",
                    "force_upgrade": false,
                    "id": null,
                    "image": "centos-7",
                    "labels": null,
                    "location": null,
                    "name": "a3hc1",
                    "server_type": "cx11",
                    "ssh_keys": null,
                    "state": "present",
                    "upgrade_disk": false,
                    "user_data": null,
                    "volumes": null
                }
            },
            "item": "hc1"
        },
        {
            "ansible_loop_var": "item",
            "changed": false,
            "failed": false,
            "hcloud_server": {
                "backup_window": "None",
                "datacenter": "nbg1-dc3",
                "id": "3083921",
                "image": "centos-7",
                "ipv4_address": "116.203.204.136",
                "ipv6": "2a01:4f8:c2c:ae25::/64",
                "labels": {},
                "location": "nbg1",
                "name": "a3hc2",
                "rescue_enabled": false,
                "server_type": "cx11",
                "status": "running"
            },
            "invocation": {
                "module_args": {
                    "api_token": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
                    "backups": false,
                    "datacenter": null,
                    "endpoint": "https://api.hetzner.cloud/v1",
                    "force_upgrade": false,
                    "id": null,
                    "image": "centos-7",
                    "labels": null,
                    "location": null,
                    "name": "a3hc2",
                    "server_type": "cx11",
                    "ssh_keys": null,
                    "state": "present",
                    "upgrade_disk": false,
                    "user_data": null,
                    "volumes": null
                }
            },
            "item": "hc2"
        }
    ]
}

结果块可以有一个或多个部分,有两个。

我需要将每个ipv4_address添加到现有的事实列表中。

我很确定有一个简单的方法使用yml语法,但我就是搞不懂。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-07 13:00:12

使用json_query。以下任务

代码语言:javascript
复制
- set_fact:
    ips: "{{ ips|default([]) +
             hc_fact.results|
             json_query('[*].hcloud_server.ipv4_address')
             }}"

给出

代码语言:javascript
复制
"ips": [
    "116.203.204.49", 
    "116.203.204.136"
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57394417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档