Ansible playbook中的动态变量名?
我有许多带有名字的列表,它们是通过将Ansible playbook中的动态变量名?,ansible,ansible-playbook,Ansible,Ansible Playbook,我有许多带有名字的列表,它们是通过将ec2\u public\u dns\u name添加到seeds\u 像这样:seeds\u ec2-50-8-1-43.us-west-1.compute.amazonaws.com 我需要在配置中为每个主机访问它的列表并循环它。 我试着这样做: 在playbook中,指定给新变量: - name: Seeds provision set_fact: seeds: "seeds_{{ec2_public_dns_name}}" 而不是在配置中
ec2\u public\u dns\u name
添加到seeds\u
像这样:seeds\u ec2-50-8-1-43.us-west-1.compute.amazonaws.com
我需要在配置中为每个主机访问它的列表并循环它。
我试着这样做:
在playbook中,指定给新变量:
- name: Seeds provision
set_fact:
seeds: "seeds_{{ec2_public_dns_name}}"
而不是在配置中使用它:
{% for seed in seeds %}
{{seed.name ~ ","}}
{% endfor %}
但似乎配置文件中的种子只是文本,我无法访问列表元素。
如何做到这一点?任务:
- set_fact:
seeds: "seeds_{{ec2_public_dns_name}}
创建文本变量seeds
,其值为seeds\u ec2-50-8-1-43.us-west-1.compute.amazonaws.com
如果希望种子
成为要迭代的列表,则需要将种子{{{ec2\u public\u dns\u name}
添加到种子
列表:
- set_fact:
seeds: [] # define seeds as empty list
- set_fact:
seeds: "{{seeds + ['seeds_' + ec2_public_dns_name]}}"
但这将向数组种子添加一个元素。您可能有ec2\u public\u dns\u名称
,这是主机的公共dns值列表:
ec2_public_dns_names:
- ec2-50-8-1-43.us-west-1.compute.amazonaws.com
- ec2-50-8-2-43.us-west-1.compute.amazonaws.com
- ...
使用此列表,您可以使用以下任务创建种子列表:
- set_fact:
seeds: "{{seeds + ['seeds_' + item]}}"
with_items: "{{ec2_public_dns_names}}"
我真的不明白你想做什么。在任务中定义一个字符串。是否要在配置文件中循环所有涉及的主机?我尝试动态形成变量名,然后获取此变量的值(它在另一个导入的文件中设置)