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-
--J'ai fait un modèle du module (partie 1)
Les commandes à exécuter et les conditions à exécuter sont les suivantes
mkfifo
--Lorsque "le tuyau n'existe pas encore" au moment du jugement "modifié" chown
, commande chmod
--Lorsque changé '' est
vrai ''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.
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