2017-10-01 1 views
1

Compte tenu de cette tâche Ansible:Comment résoudre une variable dans une variable?

- name: Set some kernel parameters 
    lineinfile: 
    dest: "/home/cloud-user/{{item}}.hostsubnet.json" 
    regexp: '^(.*hostIP\".*)\"10.*\"(.*)$' 
    line: \1"{{hostvars['{{item}}']['ansible_eth0']['ipv4']['address']}}"\2 
    backrefs: yes 
    with_items: "{{ groups.nodes }}" 

Je suis en train de boucler sur les tous les hôtes dans le groupe [noeuds]. Pour chaque nœud, je voudrais récupérer une adresse IP à partir de faits, et utiliser cette adresse IP comme chaîne de remplacement pour l'expression rationnelle lineinfile.

Mais cela ne fonctionnerait pas. On dirait que les variables imbriquées ne sont pas possibles. Est-il possible de résoudre la variable imbriquée?

Je reçois cette erreur avec un code:

fatal: [master-0.ocp-36-2.teco.dev.a.tecdomain.net]: FAILED! => { 
    "failed": true 
} 

MSG: 

the field 'args' has an invalid value, which appears to include a 
variable that is undefined. The error was: 
'ansible.vars.hostvars.HostVars object' has no attribute '{{item}}' 

The error appears to have been in 
'/var/lib/ansible/playbooks/hostsubnet.yml': line 27, column 7, but may 
be elsewhere in the file depending on the exact syntax problem. 

The offending line appears to be: 


    - name: Set some kernel parameters 
    ^here 
+0

Pour l'amour de Cthulhu, ceci est un excellent exemple de la façon dont 'lineinfile' est terrible. Même si cela fonctionnait, il devrait être remplacé par des modèles. – tedder42

Répondre

1

Vous essayez se référer à une clé dans hostvars en utilisant une chaîne {{item}}.

Vous devez utiliser un nom de variable item à la place:

line: \1"{{hostvars[item]['ansible_eth0']['ipv4']['address']}}"\2 

Vous semblez aussi être confondue avec la terminologie: vous essayez de faire référence à une valeur variable dans une expression Jinja2 (à savoir ce qui est enveloppé dans {{ }}). La réponse à une telle question est: en utilisant le nom de la variable, simple.

+0

Oui ined confus. Merci pour la clarification. – user921176

+0

... et merci, cela a effectivement fonctionné. – user921176