[PYTHON] Création d'un module autonome Ansible - Partie 3: La vie qui veut juger de la nécessité du changement-

Article précédent 1: Créez votre propre module Ansible - Partie 1: La vie que vous voulez recevoir des arguments- Article précédent 2: Création d'un module Ansible self-made - Partie 2: La vie veut juste exécuter des commandes-

Regarder en arrière

--J'ai fait un modèle du module (partie 1)

référence

Traitement initial

Aussi pour un examen. Commencez par créer un modèle (voir «Article précédent 1» pour référence). La partie exécution de commande créée en tant que test (voir la référence «Article précédent 2») a été une fois supprimée.

mkfifo.py


#!/usr/bin/python
# -*- coding: utf-8 -*-

from ansible.module_utils.basic import AnsibleModule

#Traitement principal
#-----------------------------------------------------------
def main():
    #Classe AnsibleModule:Créer un module
    module = AnsibleModule(

        #Réception des arguments
        argument_spec=dict(

            #argument: data(type de str,def:pong)
            data=dict(type='str', default='pong'),
        ),
        #Vérification des arguments activée
        supports_check_mode=True
    )

    #Résultat dict:Créer un résultat
    result = dict(
        # key:La clé donnée comme argument pour ping:Stocker la valeur des données
        ping=module.params['data'],
    )

    #Le contenu du résultat est essentiel=value,Sortie sous forme de
    module.exit_json(**result)

if __name__ == '__main__':
    main()

Implémentez la partie réceptrice de variable dans ceci.

mkfifo.py


: #(réduction)
    #Classe AnsibleModule:Créer un module
    module = AnsibleModule(

        #Réception des arguments
        argument_spec=dict(

            #argument: path(Obligatoire,type de str)
            path=dict(required=True,type='str'),
            #argument: owner(type de str,Défaut=root)
            owner=dict(type='str',default='root'),
            #argument: group(type de str,Défaut=root)
            group=dict(type='str',default='root'),
            #argument: mode(type de str,Défaut=0644)
            mode=dict(type='str',default='0644'),
        ),
        #Activer la vérification des arguments
        supports_check_mode=True
    )
: #(réduction)

Pour le moment, il n'y a pas de branchement selon la version ou la distribution du système d'exploitation. Configurez simplement une variable modifiée '' ... mais où définissez-vous changé ''? Est-ce que ça va en dehors de la classe `ʻAnsibleModule``? Essaie.

sakrua.py


#!/usr/bin/python
# -*- coding: utf-8 -*-

from ansible.module_utils.basic import AnsibleModule

#Traitement principal
#-----------------------------------------------------------
def main():
    #Classe AnsibleModule:Créer un module
    module = AnsibleModule(
        {}
    )

    changed =False ★ Remplacez cette valeur par True

    module.exit_json(changed=changed)

if __name__ == '__main__':
    main()
# changed =Si vrai
$ ansible -i test_grp 192.168.56.104 -m sakura -M library -u root
192.168.56.104 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true
}

# changed =Si faux
$ ansible -i test_grp 192.168.56.104 -m sakura -M library -u root
192.168.56.104 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false
}

Bien. Il est défini en dehors de la classe `ʻAnsibleModule``.

Essayez de juger `` changé ''

Les conditions pour que changé '' soit vrai '' sont les suivantes

  1. Le tube nommé donné dans path n'existe pas
  2. Le tube nommé ```ower: group: modedonné dans path`` ne suit pas l'argument

La condition 1 peut être jugée par le Code de retour '' de test -p xxxxx ''. La condition 2 peut être jugée par la sortie standard de stat -c% U:% G:% a.

Cependant, comme le résultat de stat -c% a n'affiche que les 3 derniers chiffres, utilisez stat -c 0% a. De plus, comme stdout '' est sorti jusqu'au code de saut de ligne, \ n`` a été inséré au moment de la comparaison.

mkfifo.py


: #(réduction)
    #Initialiser s'il y a ou non un changement(Pas de changement)
    changed = False

    #Vérifiez si un tube nommé existe dans le chemin avec la commande de test
    rc, stdout, stderr = module.run_command("test -p " + module.params['path'])
    #Vérifier le résultat
    if ( rc != 0 ):
        #Puisqu'il n'existe pas, il est sujet à changement
        changed = True
    else:
        #Propriétaire s'il existe:group:Obtenir le mode
        rc, stdout, stderr = module.run_command("stat -c %U:%G:0%a " + module.params['path'])
        #Comparaison. Le résultat de la commande est le code de saut de ligne à la fin\Notez que n est attaché
        if ( stdout != module.params['owner'] + ':' + module.params['group'] + ':' + module.params['mode'] + '\n'):
            # owner:group:Le mode étant différent, il est sujet à changement
            changed = True

    #Fin
    module.exit_json(changed=changed,stdout=stdout,stderr=stderr)
: #(réduction)

Allons jusqu'à ce point.

$ ansible -i test_grp 192.168.56.104 -m mkfifo -M library -u root -a "path=/tmp/testfifo owner=root group=root mode=0777"
192.168.56.104 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "stderr": "",
    "stderr_lines": [],
    "stdout": "",
    "stdout_lines": []
}

Essayez de créer `` / tmp / testfifo '' sur le serveur cible.

# /tmp/testfifo root:root:Faisons-le avec 0644
$ ssh [email protected] "mkfifo /tmp/testfifo; chmod 0644 /tmp/testfifo"
$ ssh [email protected] "ls -l /tmp/testfifo"
prw-r--r--.1 racine racine 0 1 juin 01:30 2020 /tmp/testfifo
$ ansible -i test_grp 192.168.56.104 -m mkfifo -M library -u root -a "path=/tmp/testfifo owner=root group=root mode=0777"
192.168.56.104 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "stderr": "",
    "stderr_lines": [],
    "stdout": "root:root:0644\n",
    "stdout_lines": [
        "root:root:0644"
    ]
}

# /tmp/testfifo root:root:Essayez de le définir sur 0777
$ ssh [email protected] "chmod 0777 /tmp/testfifo"
$ ssh [email protected] "ls -l /tmp/testfifo"
prwxrwxrwx.1 racine racine 0 1 juin 01:30 2020 /tmp/testfifo
$ ansible -i test_grp 192.168.56.104 -m mkfifo -M library -u root -a "path=/tmp/testfifo owner=root group=root mode=0777"
192.168.56.104 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "stderr": "",
    "stderr_lines": [],
    "stdout": "root:root:0777\n",
    "stdout_lines": [
        "root:root:0777"
    ]
}

Oke. Cette section se termine ici. Vient ensuite l'édition d'entrée de commande. .. Le contenu semble mince.

Recommended Posts

Création d'un module autonome Ansible - Partie 3: La vie qui veut juger de la nécessité du changement-
Création d'un module personnalisé Ansible - Partie 2: La vie veut juste exécuter des commandes-
Ansible Créez votre propre module - Partie 1: La vie que vous voulez recevoir des arguments -
Script pour changer la description de fasta
Modifiez le point décimal de la journalisation de, à.
[Ansible] Exemple de playbook qui ajoute une chaîne de caractères à la première ligne du fichier
Une note de malentendu lors de la tentative de chargement de l'intégralité du module self-made avec Python3
Comment exécuter le module Ansible ajouté dans Ansible Tower
Comment accéder à la variable globale du module importé
J'ai essayé d'exécuter l'exemple de code du module Ansible
[Python] Modifier le contrôle du cache des objets téléchargés sur Cloud Storage
Facilitez la compréhension de l'affichage des exceptions du module Python
Une introduction à l'orientation des objets - changeons l'état interne d'un objet
Changer le volume de Pepper en fonction de l'environnement environnant (son)