Ansible:使用寄存器评估变量内部的变量

时间:2018-02-05 10:44:23

标签: ansible ansible-2.x ansible-inventory ansible-facts

我有一个任务,我需要评估变量属性,其中名称已经是可变的。

以下是方案:

我正在执行 shell 命令(docker ps),并且我在变量中注册输出,其中名称已经是动态的

- name : Display running containers for {{apiType}}
  shell: docker ps
  register: docker_containers_{{apiType}}
  when:
    - '"containers" in type'

不,我想显示该输出的内容,而不仅仅是字符串本身,所以我需要做这样的事情:

- name: Display running containers for {{apiType}}
  debug:
   msg: {{docker_containers_{{apiType}}.stdout}}
  when:
    - '"containers" in type'

当然,这:{{docker_containers_{{apiType}}.stdout}} 语法上被拒绝

我试过这个:{{docker_containers_[apiType].stdout}}

但它失败了。

建议吗

1 个答案:

答案 0 :(得分:3)

这是FAQ。您可以构建一个字符串并使用它来索引当前主机的hostvars

- name: Display running containers for {{apiType}}
  debug:
   msg: "{{ hostvars[inventory_hostname]['docker_containers_' + apiType].stdout}}"
  when:
    - '"containers" in type'

...这假设您的docker_containers_...变量是主机事实,而不是说,通过您的剧本中的group_varsvars节设置的内容。

这是一个可运行的例子:

- hosts: localhost
  gather_facts: false
  vars:
    apiType: foo

  tasks:
    - set_fact:
        docker_containers_foo:
          stdout: "this is foo"
    - set_fact:
        docker_containers_bar:
          stdout: "this is bar"

    - name: Display running containers for {{apiType}}
      debug:
        msg: "{{ hostvars[inventory_hostname]['docker_containers_' + apiType].stdout}}"