Ansible: Objekt mit Bindestrich (Dash) in Playbook ansprechen
In Ansible werden Bindestrich (auch Dash oder Hyphen genannt) normalerweise als Definition von Items in einer Liste verwendet (mehr Dazu in der Ansible Doku). Jedoch kann es vorkommen, dass man ein Objekt verwendet, bei dem ein Variablennamen ebenfalls einen Bindestrich beinhalten. Damit man diese Variable nun in Ansible ansprechen kann, muss man sich eines speziellen Tricks bedienen. Doch fangen wir mit der Ausgangssituation an. Wir haben ein JSON-Objekt, welches wie folgt aussieht:
{ "Nodes":"local-test01", "VMs": { "local-test01": { "TimeUTC": "2020-01-01T00:00:00Z", "DayOfWeek": "Monday", "WeeksOfMonth": 1, "PRTGID": "000000", "LoadbalancerPath": "C:\\inetpub\\Monitoring\\lbcheck.txt", "LoadbalancerActiveString": "Active", "ExchangeVersion": "EX2019" } }
Angenommen wir möchten nun den Inhalt von „DayOfWeek“ in einer Debug Message in unserem Playbook ausgeben. Normalerweise würde man folgenden Task kreieren:
- name: JSONTesting hosts: "all" tasks: - name: Print JSON debug: msg: - "DayOfWeek: {{ VMs.local-test01.DayOfWeek }}"
Schaut auf den ersten Blick vernünftig aus, ist es aber nicht. Da der Variablennamen einen Bindestrich beinhaltet, wird beim Starten des Tasks folgende Fehlermeldung geworfen: „The task includes an option with an undefined variable. The error was: ‚local‘ is undefined„. Damit die Debug-Message den korrekten Wert ausgibt, muss dieser angepasst werden:
- name: JSONTesting hosts: "all" tasks: - name: Print JSON debug: msg: - "DayOfWeek: {{ VMs[\"local-test01\"].DayOfWeek }}"
Damit sollte in der Konsole der korrekte Wert, nämlich „Monday“ erscheinen.