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
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