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}}"

我真的不明白你想做什么。在任务中定义一个字符串。是否要在配置文件中循环所有涉及的主机?我尝试动态形成变量名,然后获取此变量的值(它在另一个导入的文件中设置)