Quand j'ai essayé d'utiliser Ansible, il n'y avait pas d'équivalent d'un tube nommé (`` makefifo ''), j'ai donc décidé de faire de mon mieux avec mon propre module.
$ cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
$ ansible --version
ansible 2.9.7
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/ansi/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /bin/ansible
  python version = 2.7.5 (default, Aug  7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
En regardant le site de référence
makefifo.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
from ansible.module_utils.basic import AnsibleModule
module = AnsibleModule(
    dict=(
        message=dict()
    )
)
print '{"message_key":"%s"}' % (module.params['message'])
Je me demande si ça devrait être comme ça. Lançons-le tout de suite.
$ ansible -i test_grp 192.168.56.104 -m makefifo -M library -u root -a message=test
192.168.56.104 | FAILED! => {
    "msg": "Unable to import makefifo due to invalid syntax"
}
OOPS !! Ça. .. Soudain, j'ai trébuché.
Y a-t-il une différence selon la version d'Ansible? J'ai donc changé de direction pour essayer de démonter le module existant et de le fabriquer.
$ find /usr/lib/python2.7/site-packages -type f -name ping.py
/usr/lib/python2.7/site-packages/ansible/modules/system/ping.py
Copiez ce type et renommez-le en `` pong.py '' et vérifiez d'abord le fonctionnement normal.
$ ansible -i test_grp 192.168.56.104 -m pong -M library -u root -a data=hoge
192.168.56.104 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "hoge"
}
Ouais, ça marche.
En grattant la partie inutile du contenu à partir d'ici, j'ai pu gratter ce qui suit.
pong.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'),
        ),
        #Activer la vérification des arguments
        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()
$ ansible -i test_grp 192.168.56.104 -m pong -M library -u root -a data=hoge
192.168.56.104 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "hoge"
}
Utilisons ceci comme modèle.
Je pense que les paramètres requis pour `` makefifo '' sont les suivants.
| Paramètres | Nom de variable(nom de la clé) | Moule | Obligatoire | 
|---|---|---|---|
| Chemin du fichier | path | str | ○ | 
| propriétaire(Utilisateur) | owner | str | ○ | 
| propriétaire(groupe) | group | str | ○ | 
| autorisation | mode | str | ○ | 
Tout d'abord, créons un module qui reçoit simplement ces gars et les renvoie aux résultats.
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
    )
    #Résultat dict:Créer un résultat
    result = dict(
        path=module.params['path'],
        owner=module.params['owner'],
        group=module.params['group'],
        mode=module.params['mode'],
    )
    #Le contenu du résultat est essentiel=value,Sortie sous forme de
    module.exit_json(**result)
if __name__ == '__main__':
    main()
Pour `` requis '' et son environnement, reportez-vous à Développement du module Ansible (implémentation Python).
Maintenant, vérifiez l'opération ... Comment donnez-vous plusieurs arguments? J'ai trouvé ce qui suit quand je l'ai recherché.
Merci merci.
$ 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 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "group": "root",
    "mode": "0644",
    "owner": "root",
    "path": "/tmp/hoge"
}
l'a fait! D'accord, tout ce que vous avez à faire est de l'implémenter en `` Python ''. Pour le moment, voici aujourd'hui.
Recommended Posts