1

Je dois créer un rôle qui crée automatiquement des sous-réseaux pour VPC en fonction de la quantité d'AZ définie.Comment construire une variable imbriquée dans un rôle Ansible

- name: Setup "{{ aws.vpc.name }}" VPC 
    ec2_vpc: 
    state: present 
    cidr_block: 172.20.0.0/16 
    resource_tags: { "Name": "{{aws.vpc.name}}" } 
    subnets: 
     - cidr: 172.20.1.0/24 
     az: us-east-1d 
     resource_tags: { "Name": "{{aws.vpc.name}}-1d" } 
     - cidr: 172.20.2.0/24 
     az: us-east-1c 
     resource_tags: { "Name": "{{aws.vpc.name}}-1c" } 
    internet_gateway: True 
    route_tables: 
     - subnets: 
      - 172.20.1.0/24 
      - 172.20.2.0/24 
     routes: 
      - dest: 0.0.0.0/0 
      gw: igw 
    region: {{ aws.vpc.region }} 

Comment générer automatiquement bloquer comme celui-ci si j'ai seulement le nom AZ comme

aws.vpc.az = ['a', 'c', 'e']

 - cidr: 172.20.1.0/24 
     az: us-east-1d 
     resource_tags: { "Name": "{{aws.vpc.name}}-1d" } 

Donc, j'ai vérifié http://docs.ansible.com/ansible/playbooks_filters.html. Mais je n'ai pas trouvé un moyen de générer dynamiquement ce bloc

+0

Je me sens confus avec la question. Avez-vous l'intention d'avoir une variable de liste 'az' dans le dictionnaire' aws.vpc' pour la liste des AZ, puis vous voulez accéder dynamiquement à cette liste et effectuer cette tâche sur cette liste? Si ce n'est pas ce que vous voulez dire, pouvez-vous élaborer? – rk2

Répondre

0

Essentiellement, vous avez besoin d'une autre tâche qui utilise une boucle pour générer une liste Ansible dans une variable. Cela peut ensuite être utilisé dans la tâche principale:

- subnets: "{{ subnet_list }}" 

Voir this answer un exemple en utilisant des hôtes. Votre cas est plus complexe car chaque élément de subnet_list est lui-même un dictionnaire (cidr, az et resource_tags étant les clés).