[PYTHON] Création d'un module personnalisé Ansible - Partie 4: La vie que vous voulez créer sans tuyau nommé (complète) -

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- Article précédent 3: Création d'un module Ansible self-made-Part 3: Life qui veut juger de la nécessité du changement-

Regarder en arrière

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

Jugement de la nécessité de l'exécution des commandes

Les commandes à exécuter et les conditions à exécuter sont les suivantes

Jugement `` changé '' légèrement modifié

La dernière fois, changed = True était défini uniformément lorsque "le tube nommé n'existe pas" ou "le propriétaire et les autorisations sont différents", mais seulement dans le premier cas, la commande mkfifo est requise, alors retournez. J'ai dû changer la façon dont je recevais la valeur.

mkfifo.py


: #(réduction)
    #Vérifiez si un tube nommé existe dans le chemin avec la commande de test
    rc_mkfifo, stdout, stderr = module.run_command("test -p " + module.params['path'])
    #Vérifier le résultat
    if ( rc_mkfifo != 0 ):
        #Puisqu'il n'existe pas, il est sujet à changement
        changed = True
    else:
        #Propriétaire s'il existe:group:Obtenir le mode
        rc_chom, 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)

Comme mentionné ci-dessus, le résultat de test -p '' a été modifié pour être inclus dans rc_mkfifo``.

Ensuite, il est jugé si l'exécution de la commande est nécessaire ou non.

mkfifo.py


: #(réduction)
            # owner:group:Le mode étant différent, il est sujet à changement
            changed = True

    #Un tuyau nommé existait-il?
    if ( rc_mkfifo != 0 ):
        #Exécution de la commande car elle n'existe pas
        rc, stdout, stderr = module.run_command('mkfifo ' + module.params['path'])

        #Si le code retour n'est pas 0, il se termine ici
        if ( rc != 0 ):
            #Erreur de commande
            module.fail_json(msg = stderr, rc = rc)

    #Le changement s'est-il produit?
    if ( changed == True ):
        #Changer de propriétaire à mesure que des changements se produisent
        rc, stdout, stderr = module.run_command('chown ' + module.params['owner'] + ':' + module.params['group'] + ' ' + module.params['path'])
        #Si le code retour n'est pas 0, il se termine ici
        if ( rc != 0 ):
            #Erreur de commande
            module.fail_json(msg = stderr, rc = rc)

        #Modifier les autorisations car des modifications ont eu lieu
        rc, stdout, stderr = module.run_command('chmod ' + module.params['mode'] + ' ' + module.params['path'])
        #Si le code retour n'est pas 0, il se termine ici
        if ( rc != 0 ):
            #Erreur de commande
            module.fail_json(msg = stderr, rc = rc)

    #Sortie de traitement
    module.exit_json(changed = changed)
: #(réduction)

Exécution ~

#Confirmez que le fichier n'existe pas à l'avance
$ ssh [email protected] "ls -l /tmp"
Total 0
-rw-r--r--.1 racine racine 0 29 mai 10:45 2020 udon.txt
-rw-------.1 racine racine 0 27 mai 06:34 2020 yum.log

#Courir
$ 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
}

#Confirmation de génération
$ ssh [email protected] "ls -l /tmp"
Total 0
prwxrwxrwx.1 racine racine 0 1 juin 02:52 2020 testfifo
-rw-r--r--.1 racine racine 0 29 mai 10:45 2020 udon.txt
-rw-------.1 racine racine 0 27 mai 06:34 2020 yum.log

#Confirmez qu'il sera manqué lors de la réexécution
$ 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
}

Toutes nos félicitations.

Autres contenus à ajouter

Je me demande ce que c'est, mais pour le moment, cette série est terminée car j'en ai fait une. Ah, c'était amusant.

Texte intégral

Enfin, je publierai le texte intégral.

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: 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
    )
    #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_mkfifo, stdout, stderr = module.run_command('test -p ' + module.params['path'])
    #Vérifier le résultat
    if ( rc_mkfifo != 0 ):
        #Puisqu'il n'existe pas, il est sujet à changement
        changed = True
    else:
        #Propriétaire s'il existe:group:Obtenir le mode
        rc_chom, 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

    #Un tuyau nommé existait-il?
    if ( rc_mkfifo != 0 ):
        #Exécution de la commande car elle n'existe pas
        rc, stdout, stderr = module.run_command('mkfifo ' + module.params['path'])

        #Si le code retour n'est pas 0, il se termine ici
        if ( rc != 0 ):
            #Erreur de commande
            module.fail_json(msg = stderr, rc = rc)

    #Le changement s'est-il produit?
    if ( changed == True ):
        #Changer de propriétaire à mesure que des changements se produisent
        rc, stdout, stderr = module.run_command('chown ' + module.params['owner'] + ':' + module.params['group'] + ' ' + module.params['path'])
        #Si le code retour n'est pas 0, il se termine ici
        if ( rc != 0 ):
            #Erreur de commande
            module.fail_json(msg = stderr, rc = rc)

        #Modifier les autorisations car des modifications ont eu lieu
        rc, stdout, stderr = module.run_command('chmod ' + module.params['mode'] + ' ' + module.params['path'])
        #Si le code retour n'est pas 0, il se termine ici
        if ( rc != 0 ):
            #Erreur de commande
            module.fail_json(msg = stderr, rc = rc)

    #Sortie de traitement
    module.exit_json(changed = changed)

if __name__ == '__main__':
    main()

Recommended Posts

Création d'un module personnalisé Ansible - Partie 4: La vie que vous voulez créer sans tuyau nommé (complète) -
Ansible Créez votre propre module - Partie 1: La vie que vous voulez recevoir des arguments -
Création d'un module personnalisé Ansible - Partie 2: La vie veut juste exécuter des commandes-
Création d'un module autonome Ansible - Partie 3: La vie qui veut juger de la nécessité du changement-
Un référentiel essentiel à utiliser lorsque vous souhaitez l'essayer avec ansible
Si vous souhaitez créer une application TODO (distribuée) maintenant en utilisant uniquement Python
Si vous voulez créer un bot discord avec python, utilisons un framework
Souhaitez-vous créer un CV Twitter?
Je veux faire un jeu avec Python
Si vous souhaitez créer Word Cloud.
Essayez de créer un module Python en langage C
Aucun module nommé Que faire si vous obtenez "libs.resources"
[Python] Je veux faire d'une liste imbriquée un taple
Lorsque vous voulez plt.save dans l'instruction for
Notez ce que vous voulez faire à l'avenir avec Razpai