我正在为动手教程会话设置一组多达 150 个临时 EC2 服务器。
我正在成功地动态创建 EC2 清单并针对为配置所有内容而创建的实例运行角色,但我需要为每个实例设置一个简单的主机名。为此,我有一个文件,其中包含我想用于主机名的简单名称列表。这是在我的剧本中:
---
- hosts: localhost
connection: local
gather_facts: false
tasks:
- name: Provision a set of instances
ec2:
key_name: ubuntu
instance_type: t2.micro
image: "{{ ami_id }}"
wait: true
exact_count: {{ server_count }}
count_tag:
Name: Tutorial
instance_tags:
Name: Tutorial
groups: ['SSH', 'Web']
register: ec2
- name: Add all instance public IPs to host group
add_host: hostname={{ item.public_ip }} groups=ec2hosts
loop: "{{ ec2.instances }}"
- name: Set a host name for each instance in DNS
route53:
zone: {{ tutorial_domain }}
record: "name.{{ tutorial_domain }}"
state: present
type: A
ttl: 120
value: {{ item.public_ip }}
wait: yes
loop: "{{ ec2.instances }}"
它真的归结为那一record: "name.{{ tutorial_domain }}"
行 - 我如何在我的名字列表中查找一个名字并将其用作主机名,name
变成{{ some_dynamic_name }}
?
我已经看过查找插件,但它们似乎都专注于循环某个外部文件的全部内容 - 但我已经循环了服务器列表,并且该列表可能比名称列表短(例如我可能只有 10 台服务器)。理想情况下,我想一次将名称列表读入一个数组,然后使用服务器循环中的索引来选择名称(即,第三台服务器将获得第三个名称)。我如何在ansible中做到这一点?还是有更好的方法?
您可以使用
zip
过滤器将您的实例列表与名称列表结合起来,如下所示:在旧版本的 Ansible 中,您可以使用
with_together
循环来完成同样的事情。另一种方法是使用循环索引来循环多个列表。这样,在列表中添加偏移会更容易。