我有一个任务,我需要评估变量属性,其中名称已经是可变的。
以下是方案:
我正在执行 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}}
但它失败了。
建议吗
答案 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_vars
或vars
节设置的内容。
这是一个可运行的例子:
- 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}}"