[PYTHON] Création d'un module personnalisé Ansible - Partie 2: La vie veut juste exécuter des commandes-

Article précédent: Création d'un module Ansible self-made-Part 1: Life you want to receive arguments-

Regarder en arrière

--J'ai fait un modèle du module

Exécutez simplement la commande

Essayez d'abord run_command, en vous référant au manuel Développement du module Ansible (implémentation Python) Vue.

makefifo.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(type de str,Obligatoire)
            path=dict(type='str', required=True),
            #argument: owner(type de str,Obligatoire)
            owner=dict(type='str', required=True),
            #argument: group(type de str,Obligatoire)
            group=dict(type='str', required=True),
            #argument: mode(type de str,Obligatoire)
            mode=dict(type='str', required=True),
        ),
        #Activer la vérification des arguments
        supports_check_mode=True
    )

    #Faites-le sans réfléchir
    rc, stdout, stderr = module.run_command("/bin/touch /tmp/udon.txt")

    #Résultat de la commande de retour
    module.exit_json(
        changed=True,
        rc=rc,
        stdout=stdout,
        stderr=stderr
    )

if __name__ == '__main__':
    main()

Exécution ~

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

$ 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

Bien.

Exécution de commande à l'aide d'arguments

En toute hâte, utilisez chemin '' et essayez mkfifo ''. Je reviendrai sur «propriétaire» plus tard. Au fait, j'ai remarqué que j'ai changé le nom ici, "Ce n'est pas" makefifo ", mais" mkfifo ".

mkfifo.py


    #Je veux utiliser le chemin
    rc, stdout, stderr = module.run_command("/usr/bin/mkfifo ")

Eh bien, ici ... qu'est-ce que tu fais? En fait, c'est la première fois que j'utilise Python '', donc je ne sais pas comment combiner des variables. Ensuite, quand j'ai recherché ping.py``, je faisais référence à [[pour les débutants de python] Signification de l'astérisque (*) dans l'argument de la fonction](https://dev.classmethod.jp/articles/what-does-asterisk C'est écrit comme -mean-at-args /)!

def loop2(before, *args, after):
    print(before)
    for arg in args:
        print(arg + '!')
    print(after)

Je vois, vous pouvez combiner des chaînes avec `` + ''.

mkfifo.py


    #Je veux utiliser le chemin
    rc, stdout, stderr = module.run_command("/usr/bin/mkfifo " + )

... eh bien, quelle est cette variable? Je comprends que c'est comme Hash '' dans perl '' appelé `` type dict ''.

Ah! Cela a également été écrit par Développement de module Ansible (implémentation Python)!

print '{"message_key":"%s"}' % (module.params['message']) 

Ça veut dire ça!

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(type de str,Obligatoire)
            path=dict(type='str', required=True),
            #argument: owner(type de str,Obligatoire)
            owner=dict(type='str', required=True),
            #argument: group(type de str,Obligatoire)
            group=dict(type='str', required=True),
            #argument: mode(type de str,Obligatoire)
            mode=dict(type='str', required=True),
        ),
        #Activer la vérification des arguments
        supports_check_mode=True
    )

    #Je veux utiliser le chemin
    rc, stdout, stderr = module.run_command("/usr/bin/mkfifo " + module.params['path'])

    #Résultat de la commande de retour
    module.exit_json(
        changed=True,
        rc=rc,
        stdout=stdout,
        stderr=stderr
    )

if __name__ == '__main__':
    main()

Maintenant c'est plein! Courir! !!

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

$ ssh [email protected] "ls -l /tmp"
Total 0
-rw-r--r--.1 racine racine 0 29 mai 10:45 2020 udon.txt
prw-r--r--.1 racine racine 0 29 mai 10:54 2020 udon_pipe
-rw-------.1 racine racine 0 27 mai 06:34 2020 yum.log

D'accord, je progresse petit à petit. Jusqu'à aujourd'hui.

Recommended Posts

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 -
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 4: La vie que vous voulez créer sans tuyau nommé (complète) -
Fonctionnement de la vitesse de rotation du module personnalisé
Comment exécuter des commandes avec Jupyter Notebook