Estou configurando um monte de até 150 servidores EC2 temporários para uma sessão de tutorial prático.
Estou criando com êxito o inventário do EC2 dinamicamente e executando funções nas instâncias criadas para configurar tudo, mas preciso definir um nome de host direto para cada uma. Para esse fim, tenho um arquivo que contém uma lista simples de nomes que quero usar para os nomes de host. Isso está no meu manual:
---
- 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 }}"
Realmente se resume a essa record: "name.{{ tutorial_domain }}"
linha - como posso procurar um nome na minha lista de nomes e usá-lo como um nome de host, transformando -se name
em {{ some_dynamic_name }}
?
Eu vi os plugins de pesquisa, mas todos eles parecem estar focados em fazer um loop sobre todo o conteúdo de algum arquivo externo - mas eu já estou fazendo um loop na lista de servidores, e essa lista pode ser menor que a lista de nomes (por exemplo, Eu posso ter apenas 10 servidores). Idealmente, eu quero ler a lista de nomes em uma matriz uma vez e usar o índice do loop do servidor para escolher o nome (ou seja, para que o 3º servidor obtenha o 3º nome). Como faço isso no ansible? Ou existe uma abordagem melhor?
Você pode usar o
zip
filtro para combinar sua lista de instâncias com uma lista de nomes, como esta:Em versões mais antigas do Ansible, você faria a mesma coisa com um
with_together
loop.Outra abordagem seria usar o índice de loop para percorrer várias listas. Dessa forma, será mais fácil adicionar deslocamento na lista.