2017-09-28 1 views
2

J'utilise le module cloud ec2_asg dans ansible pour mettre à jour un groupe Auto-Scaling. J'essaye de faire de ce rôle un rôle pour que je puisse l'appliquer à plusieurs playbooks, et je me demandais si je pouvais passer les valeurs des tags en tant que variables.Dans Ansible puis-je passer un dictionnaire à un module de nuage en tant que variable?

Sans variables, la tâche asg ressemble à:

ec2_asg: 
    name: "test_app"  
    tags: 
    - Environment: Production 
    - Name: test_app 

Et je sais que je pourrais aussi le faire:

ec2_asg: 
    name: {{asg_name}}" 
    tags: 
    - Environment: "{{asg_tag_env}}" 
    - Name: "{{asg_tag_name}}" 

Mais je suis curieux de savoir si dans mes group_vars je peux passer tous les marquage informations en tant var, par exemple

asg_tags: "{'tags': {'Environment': Production, 'Name': test_app}}" #option1 

ou

asg_tags: "{'Environment': Production, 'Name': test_app}" #option2 

Lorsque je tente peut appeler dans le module ec2_asg via

#option1 
ec2_asg 
    name: "{{asg_name}}" 
    "{{asg_tags}}" 

cela ne semble pas fonctionner, que le module ne comprend pas l'index racine du dictionnaire est l'option balises que vous spécifiez dans le module ec2_asg.
Je viens d'obtenir une erreur de syntaxe lors du chargement de YAML.

et si je tente

#option2 
ec2_asg 
    name: "{{asg_name}}" 
    tags: "{{asg_tags}}" 

je reviens une erreur de ansible indiquant:
pour k, v dans tag.items(): \ nAttributeError: objet 'str' n'a pas d'attribut 'éléments' \ n »

Soit ce n'est pas pris en charge, ou je ne sais pas comment structurer la variable de sorte que le module ec2_asg lit dans les balises correctement et sait comment les appliquer.

+0

il est possible, mais le garçon était-ce gênant pour comprendre.Malheureusement, je n'ai plus accès à ce code - emploi passé –

+0

Ouais, je vous entends là, je me dis que je suis proche, mais j'ai atteint un barrage routier – tman

Répondre

1

d'abord, notez que cette les valeurs de tags est un liste des dictionnaires, chacun avec une seule clé:

tags: 
    - Environment: Production 
    - Name: test_app 

Si vous le coller dans un analyseur YAML comme this one vous verrez que le JSON correspondant est:

{ 
    "tags": [ 
    { 
     "Environment": "Production" 
    }, 
    { 
     "Name": "test_app" 
    } 
    ] 
} 

Alors quelle que soit la valeur que vous affecter à une variable, il devra être une liste similaire.

Je ne suis pas en mesure de tester les modules EC2 * moi-même en ce moment, mais si vous définissez une variable appropriée, comme ceci:

asg_tags: 
    - Environment: Production 
    - Name: test_app 

Ou alternativement (bien que je trouve l'ancien plus facile toread) :

asg_tags: [{"Environment": "Production"}, {"Name": "test_app"}] 

Vous devriez alors être en mesure de le faire:

- ec2_asg: 
    name: "test_app"  
    tags: "{{ asg_tags }}" 
+0

Merci larsks, cela a fonctionné, et merci pour le pointeur sur l'analyseur YAML , très appréciée – tman