[PYTHON] Ansible-Modul So fügen Sie die als Parameter übergebene Zeichenfolge JSON beim Schreiben in das Wörterbuch ein

tl;dr

import ast

desired_dict = ast.literal_eval(module.params['json_str'])

Machen wir das.

Was ist los

Wenn Sie ein Ansible-Playbook schreiben, In vielen Fällen wird eine JSON-Datei gelesen und als Zeichenfolge übergeben.

  tasks:
    - name: Update
      spam_module:
        state: present
        json_str: "{{ lookup('file', 'ham.json') }}"

Um dies im Modul zu lesen

argument_spec.update(
        dict(
            json_str=dict(type='str', required=True),
            state=dict(default='present', type='str', choices=['present', 'absent']),
        )
    )

    module = AnsibleModule(argument_spec=argument_spec)

    print(module.params['json_str'])

Ich kann es lesen, indem ich so etwas mache Doppelte Anführungszeichen werden in module.params in einfache Anführungszeichen umgewandelt.

Zu diesem Zeitpunkt schlägt der Versuch, in JSON zu konvertieren, leicht fehl.

desire_dict = json.loads(module.params['json_str'])
# Fail!!!

Was ist zu tun

In einfache Anführungszeichen eingeschlossene Zeichenfolgen können in Python als Abstract Syntax Tree behandelt werden.

desired_dict = ast.literal_eval(module.params['json_str'])

Es ist eine gute Idee, es mit ast.literal_eval in ein Wörterbuch zu konvertieren.

Wo zu verwenden

Ich möchte zwei JSONs für die Gleichheitsprüfung vergleichen Ich habe es in ein Wörterbuch gelegt und verglichen.

JSON garantiert jedoch nicht die Reihenfolge der Listen, Wörterbücher garantieren jedoch die Reihenfolge, sodass es sich nicht um einen strengen Vergleich handelt. So etwas ist in Ansible üblich, also lasst uns unser Bestes geben.

Recommended Posts

Ansible-Modul So fügen Sie die als Parameter übergebene Zeichenfolge JSON beim Schreiben in das Wörterbuch ein
So verbinden Sie den Inhalt der Liste mit einer Zeichenfolge
Wenn sich eine Zeichenfolge einer bestimmten Reihe im Schlüssel des Wörterbuchs befindet, wird die Zeichenfolge in den Wert des Wörterbuchs konvertiert.
[Ansible] So rufen Sie Variablen auf, wenn Sie ein eigenes Modul erstellen
So importieren Sie NoteBook als Modul in Jupyter (IPython)
Wie man in Django die angezeigte lange Zeichenkette in der Mitte abkürzt ....
So importieren Sie NoteBook als Modul in Jupyter (IPython)
So machen Sie einen String in Python zu einem Array oder ein Array zu einem String
[Einführung in Python] So teilen Sie eine Zeichenfolge mit der Funktion split
Vorsichtsmaßnahmen bei Verwendung einer Liste oder eines Wörterbuchs als Standardargument
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
Wie man Jupytext gut einstellt, wenn man Code als Team verwaltet
So extrahieren Sie die gewünschte Zeichenfolge aus einem Befehl in Zeile 4
Verwendung des optparse-Moduls
So setzen Sie einen symbolischen Link
Verwendung des ConfigParser-Moduls
So geben Sie eine Zeichenfolge in Python ein und geben sie unverändert oder in die entgegengesetzte Richtung aus.
So setzen Sie eine Zeilennummer am Anfang einer CSV-Datei
[Einführung in Python] So schreiben Sie eine Zeichenfolge mit der Formatierungsfunktion
Verwalten von Argumenten beim Implementieren eines Python-Skripts als Befehlszeilentool
[AWS] Umgang mit Wordpress "Die Antwort ist nicht die richtige JSON-Antwort."
[Python] Ich habe versucht, den Typnamen als Zeichenfolge aus der Typfunktion abzurufen