Ansible剧本中的动态变量名称?

ser*_*eda 5 ansible ansible-playbook

我有许多带有名称的列表,它们是通过附加ec2_public_dns_nameseeds_

像这样: seeds_ec2-50-8-1-43.us-west-1.compute.amazonaws.com

我需要在每个主机的配置中访问它的列表并循环遍历它。我尝试这样做:

在剧本中分配给新变量:

- name: Seeds provision
  set_fact:
    seeds: "seeds_{{ec2_public_dns_name}}"
Run Code Online (Sandbox Code Playgroud)

而不是在配置中使用它:

{% for seed in seeds %}
{{seed.name ~ ","}}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

但似乎seeds在配置文件中只是文本,我无法访问列表元素。如何才能做到这一点?

小智 1

任务:

- set_fact:
    seeds: "seeds_{{ec2_public_dns_name}}
Run Code Online (Sandbox Code Playgroud)

创建seeds值为 的文本变量seeds_ec2-50-8-1-43.us-west-1.compute.amazonaws.com

如果您想seeds成为要迭代的列表,则需要添加seeds_{{ec2_public_dns_name}}seeds列表:

- set_fact:
    seeds: [] # define seeds as empty list
- set_fact:
    seeds: "{{seeds + ['seeds_' + ec2_public_dns_name]}}"
Run Code Online (Sandbox Code Playgroud)

但这将向数组添加seeds一个元素。您可能拥有ec2_public_dns_names主机的公共 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
  - ...
Run Code Online (Sandbox Code Playgroud)

有了这样的列表,您可以通过以下任务创建种子列表:

- set_fact:
    seeds: "{{seeds + ['seeds_' + item]}}"
  with_items: "{{ec2_public_dns_names}}"
Run Code Online (Sandbox Code Playgroud)