In Anbetracht dieser ansible Aufgabe:Wie löst man eine Variable in einer Variablen auf?
- 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 }}"
ich die über alle Hosts in der Gruppe Schleife versuchen [Knoten]. Für jeden Knoten möchte ich eine IP aus Fakten abrufen und diese IP als Ersatzzeichenfolge für lineinfile regexp verwenden.
Aber das würde nicht funktionieren. Sieht aus wie verschachtelte Variablen sind nicht möglich. Kann die verschachtelte Variable aufgelöst werden?
Ich erhalte diesen Fehler mit einem 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
Für die Liebe von Cthulhu ist dies ein großartiges Beispiel dafür, wie schrecklich 'lineinfile' ist. Selbst wenn es funktionierte, sollte es durch Vorlagen ersetzt werden. – tedder42