2017-10-01 1 views
1

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

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

Antwort

1

Sie versuchen, in hostvars auf einen Schlüssel finden {{item}} eine Zeichenfolge verwenden.

sollten Sie einen Variablennamen verwenden item statt:

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

Sie scheinen auch mit der Terminologie verwechselt werden: Sie versuchen, in einem Jinja2 Ausdruck auf einen variablen Wert zu beziehen (also das, was in gewickelt ist {{ }}). Die Antwort auf eine solche Frage lautet: mit dem Variablennamen, plain.

+0

Ja, ich bin verwirrt. Danke für die Klarstellung. – user921176

+0

... und danke, das hat tatsächlich funktioniert. – user921176

Verwandte Themen