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-
--J'ai fait un modèle du module (partie 1)
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``.
Les conditions pour que changé '' soit
vrai '' sont les suivantes
path
n'existe pas:
group:
modedonné dans
path`` ne suit pas l'argumentLa 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