json - 无法在循环中访问寄存器变量

标签 json ansible rackspace-cloud pyrax

我一直在按照此示例手册使用 Ansible 创建机架空间服务器

http://nicholaskuechler.com/2015/01/09/build-rackspace-cloud-servers-ansible-virtualenv/

效果很好,但一次只能在一台服务器上运行,所以我试图使其更加动态,使用 with_items 循环我想要构建的服务器数量

tasks:
- name: Rackspace cloud server build request
    local_action:
        module: rax
        credentials: "{{ credentials }}"
        name: "{{ item }}"
        flavor: "{{ flavor }}"
        image: "{{ image }}"
        region: "{{ region }}"
        files: "{{ files }}"
        wait: yes
        state: present
        networks:
        - private
        - public
    with_items:
        - server-app-01
        - server-app-02
    register: rax

这可以很好地创建服务器,但是当我尝试使用链接中的方法将其添加到部署组时,我收到一个错误,正如预期的那样,现在有一个“结果”键,我已经尝试了各种方法尝试以我认为文档所暗示的方式来尝试和瞄准这一点的方法:

- name: Add new cloud server to host group
    local_action:
        module: add_host
        hostname: "{{ item.success.name }}"
        ansible_ssh_host: "{{ item.success.rax_accessipv4 }}"
        ansible_ssh_user: root
        groupname: deploy
    with_items: rax.results

(我还尝试了许多其他类型的方法来解决这个问题) 但我得到“一个或多个 undefined variable :‘列表对象’没有属性‘rax_accessipv4”

这是我通过调试从 rax 返回的对象的精简版本。这些服务器不再存在。 http://pastebin.com/NRvM7anS

谁能告诉我哪里出了问题,我开始有点生气了

最佳答案

如果您注意到rax.results.success的类型是list

所以这样:主机名:“{{ item.success.name }}”

应该是

  • 主机名:“{{ item.success[0].name }}”
  • 主机名:“{{ item['success'][0]['name'] }}”

.

{
            "changed": true,
            "msg": "All items completed",
            "results": [
                {
                    "instances": [
                        {
                            "name": "server-app-01",
                            "rax_accessipv4": "134.213.51.171",
                            "rax_accessipv6": "2a00:1a48:7808:101:be76:4eff:fe08:5251",
                        }
                    ],
                    "item": "server-app-01",
                    "success": [
                        {
                            "name": "server-app-01",
                            "rax_accessipv4": "134.213.51.171",
                            "rax_accessipv6": "2a00:1a48:7808:101:be76:4eff:fe08:5251",
                        }
                    ],
                    "timeout": []
                },
          ......
}

关于json - 无法在循环中访问寄存器变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29542433/

相关文章:

ios - iPhone - 快速解析 JSON 和更新标签

azure - 如何在办公时间开启/关闭云实例

amazon-web-services - AWS CloudFormation 配置... UserData 与 Ansible 之类的?

pip - Ansible:在单个 session 上安装多个 Python 包

amazon-web-services - 云服务器回归测试

asp.net-mvc-3 - Rackspace 云站点和 ASP.NET 4

json - 在flutter中使用嵌套的json创建类别和子类别

javascript - bash 脚本和 JavaScript 之间的 JSON 日期时间

json - Yii JSON 与关系

json - 使用ansible映射从json获取值