Ansible - Wie Sie zu halten anfügen neue Schlüssel zu einem Wörterbuch bei der Verwendung set_fact Modul mit with_items?
Möchte ich hinzufügen-Tasten, um ein Wörterbuch bei der Verwendung set_fact mit with_items. Dies ist eine kleine POC, die mir helfen, füllen Sie einige andere arbeiten. Ich habe versucht, zu verallgemeinern und die POC-so entfernen Sie alle irrelevanten details aus.
Wenn ich führen Sie die folgenden code, der es ist, zeigt ein Wörterbuch mit nur einer Taste, entspricht dem letzten Punkt der with_items. Es scheint, dass es ist neu zu erstellen, ein neues Wörterbuch oder kann das überschreiben einer bestehenden dictionary für jedes Element in der with_items. Ich möchte ein einzelnes Wörterbuch mit allen Tasten.
Code:
---
- hosts: localhost
connection: local
vars:
some_value: 12345
dict: {}
tasks:
- set_fact: {
dict: "{
{{ item }}: {{ some_value }}
}"
}
with_items:
- 1
- 2
- 3
- debug: msg="{{ dict }}"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden filter plugin.
Stellen Sie zunächst eine neue Datei in Ihrem ansible base dir genannt
filter_plugins/makedict.py
.Erstellen Sie nun eine neue Funktion namens "makedict" (oder was auch immer Sie wollen), die einen Wert entgegennimmt und eine Liste und gibt ein neues Wörterbuch, wo die Schlüssel sind die Elemente der Liste und der Wert ist immer der gleiche.
Nun können Sie die neuen filter in das playbook zu erreichen das gewünschte Ergebnis:
Können Sie passen Sie die Position der filter-plugin mit dem
filter_plugins
option inansible.cfg
.Dies kann auch durchgeführt werden, ohne auf plugins, getestet in Ansible 2.2.
Alternativ kann dies geschrieben werden, ohne das komplexe one-liner mit einer include-Datei.
append_dict.yml:
Ausgabe:
Einfache Anführungszeichen
'
um{{ some_value }}
benötigt werden, zu speichern string-Werte explizit an.Diese syntax kann auch verwendet werden, zum anfügen von einem
dict
elementweise mitwith_dict
durch die Bezugnahme aufitem.key
unditem.value
.Manipulationen wie das hinzufügen von pre - und Postfixe ermöglicht oder hashes durchgeführt werden können, im gleichen Schritt, zum Beispiel
includes
diese nicht zu funktionieren scheint mehr auf ansible 2.5
gibt nur letzten Wert
{"dict":{"3": "some value"}}
Ich schlage vor, Sie könnten dies tun :