使用 ansible facts 作为列表

Using ansible facts as lists

我正在调试一组将主机置于 Rackspace 负载平衡器中的嵌套播放。

- include create_servers.yml
...
- include add_to_load_balancers.yml

在第一个游戏中,我使用 rax_clb 模块创建服务器。我们注册变量 rax 并使用其中的 rax.success 列表将这些主机添加到 create_servers.yml:

中的组
- name: create instances on Rackspace
  local_action:
    module: rax
    image: "{{ IMAGE }}"
    flavor: "{{ FLAVOR }}"
    wait: yes 
    count: "{{ COUNT }}"
    ...
    register: rax


- name: some other play
  local_action:
  ...
  with_items: rax.success


- name: register rax.success as rax_servers for later use
  set_fact:
    rax_servers: rax.success

在另一个使用 with_items 的游戏中使用 rax.success 时,它有效。但后来当我尝试在 add_to_load_balancers.yml 中使用 rax_servers 时:

- name: place new hosts in the load balancer
  rax_clb_nodes:
    address={{ item.rax_accessipv4 }}
    state=present
    ...
  with_items: rax_servers

我收到一条错误消息,指出项目中没有 rax_accessipv4。不过,我应该这样做,因为这就是我在之前的剧本中使用它的方式(并且有效)。所以我打印出 rax_servers:

TASK: [debug var=rax_servers] ************************************************* 
ok: [127.0.0.1] => {
    "var": {
        "rax_servers": "rax.success"
    }
}

我显然做错了什么,但我似乎无法从文档中找出在存储或引用此变量时我做错了什么。这两部剧都是 运行 来自本地主机,所以它应该给我相同的列表,不是吗?

感谢您对这位新手的包容,感谢您的帮助:)

应该是:

- name: register rax.success as rax_servers for later use
  set_fact:
    rax_servers: "{{ rax.success }}"

在这种情况下没有双括号,'rax.success' 只是一个字符串。