Module Ansible Comment mettre la chaîne de caractères JSON passée en paramètre dans le dictionnaire lors de l'écriture

tl;dr

import ast

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

Faisons le.

Qu'est-ce qui ne va pas

Lors de l'écriture d'un playbook Ansible, Dans de nombreux cas, un fichier JSON est lu et transmis sous forme de chaîne de caractères.

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

Pour lire ceci dans le module

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'])

Je peux le lire en faisant quelque chose comme Les guillemets doubles sont convertis en guillemets simples dans module.params.

À ce stade, la tentative de conversion en JSON échoue facilement.

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

Que faire

Les chaînes de caractères entre guillemets simples peuvent être gérées comme Arborescence de syntaxe abstraite en Python.

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

Utilisez ʻast.literal_eval` pour le convertir en dictionnaire.

Où utiliser

Je veux comparer deux JSON pour vérifier l'égalité Je l'ai déposé dans un dictionnaire et l'ai comparé.

Cependant, JSON ne garantit pas l'ordre des listes, mais les dictionnaires garantissent l'ordre, il ne s'agit donc pas d'une comparaison stricte. Quelque chose comme ça est courant dans Ansible, alors faisons de notre mieux.

Recommended Posts

Module Ansible Comment mettre la chaîne de caractères JSON passée en paramètre dans le dictionnaire lors de l'écriture
Comment connecter le contenu de la liste dans une chaîne de caractères
Lorsqu'une chaîne de caractères d'une certaine série se trouve dans la clé du dictionnaire, la chaîne de caractères est convertie en valeur du dictionnaire.
[Ansible] Comment appeler des variables lors de la création de votre propre module
Comment importer NoteBook en tant que module dans Jupyter (IPython)
Dans Django, comment abréger la longue chaîne de caractères affichée au milieu ...
Comment importer NoteBook en tant que module dans Jupyter (IPython)
Comment transformer une chaîne en tableau ou un tableau en chaîne en Python
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
Précautions lors de l'utilisation d'une liste ou d'un dictionnaire comme argument par défaut
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Comment bien définir Jupytext lors de la gestion du code en équipe
Comment extraire la chaîne de caractères souhaitée à partir d'une ligne 4 commandes
Comment utiliser le module optparse
Comment mettre un lien symbolique
Comment utiliser le module ConfigParser
Comment saisir une chaîne de caractères en Python et la sortir telle quelle ou dans la direction opposée.
Comment mettre un numéro de ligne au début d'un fichier CSV
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
Comment gérer les arguments lors de l'implémentation d'un script Python en tant qu'outil de ligne de commande
[AWS] Comment gérer Wordpress "La réponse n'est pas la bonne réponse JSON"
[Python] J'ai essayé d'obtenir le nom du type sous forme de chaîne de caractères à partir de la fonction type