[PYTHON] Ansible selbst erstellte Modulerstellung - Teil 2: Das Leben will nur Befehle ausführen -

Vorheriger Artikel: Ansible selbst erstellte Modulerstellung - Teil 1: Leben, für das Sie Argumente erhalten möchten-

Zurückblicken

Führen Sie einfach den Befehl aus

Versuchen Sie zuerst run_command unter Bezugnahme auf das Lehrbuch Ansible-Modulentwicklung (Python-Implementierung). Aussicht.

makefifo.py


#!/usr/bin/python
# -*- coding: utf-8 -*-

from ansible.module_utils.basic import AnsibleModule

#Hauptverarbeitung
#-----------------------------------------------------------
def main():
    #AnsibleModule-Klasse:Modul erstellen
    module = AnsibleModule(

        #Argumentempfang
        argument_spec=dict(

            #Streit: path(str Typ,Verpflichtend)
            path=dict(type='str', required=True),
            #Streit: owner(str Typ,Verpflichtend)
            owner=dict(type='str', required=True),
            #Streit: group(str Typ,Verpflichtend)
            group=dict(type='str', required=True),
            #Streit: mode(str Typ,Verpflichtend)
            mode=dict(type='str', required=True),
        ),
        #Aktivieren Sie die Argumentprüfung
        supports_check_mode=True
    )

    #Mach es ohne nachzudenken
    rc, stdout, stderr = module.run_command("/bin/touch /tmp/udon.txt")

    #Befehlsergebnis zurückgeben
    module.exit_json(
        changed=True,
        rc=rc,
        stdout=stdout,
        stderr=stderr
    )

if __name__ == '__main__':
    main()

Ausführung ~

$ 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"
Insgesamt 0
-rw-r--r--.1 Wurzel Wurzel 0 29. Mai 10:45 2020 udon.txt
-rw-------.1 Wurzel Wurzel 0 27. Mai 06:34 2020 yum.log

Gut.

Befehlsausführung mit Argumenten

Verwenden Sie in Eile path und versuchen Sie mkfifo. Besitzer wird später kommen. Übrigens ist mir aufgefallen, dass ich hier den Namen geändert habe: "Es ist nicht" makefifo``, sondern "mkfifo".

mkfifo.py


    #Ich möchte den Pfad verwenden
    rc, stdout, stderr = module.run_command("/usr/bin/mkfifo ")

Nun, hier ... was machst du? Eigentlich ist es mein erstes Mal, dass ich Python benutze, also weiß ich nicht, wie man Variablen kombiniert. Als ich dann nach ping.py suchte, bezog ich mich auf [[für Anfänger von Python] Bedeutung des Sterns (*) im Funktionsargument](https://dev.classmethod.jp/articles/what-does-asterisk] Es ist geschrieben wie -mean-at-args /)!

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

Ich sehe, Sie können Zeichenfolgen mit + kombinieren.

mkfifo.py


    #Ich möchte den Pfad verwenden
    rc, stdout, stderr = module.run_command("/usr/bin/mkfifo " + )

... nun, was ist diese Variable? Ich verstehe, dass es wie "Hash" in "Perl" ist, das "Diktat" genannt wird.

Ah! Dies wurde auch von [Ansible Modulentwicklung (Python-Implementierung)] geschrieben (https://dev.classmethod.jp/articles/ansible-develop-module-python/)!

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

Das heißt das!

mkfifo.py


#!/usr/bin/python
# -*- coding: utf-8 -*-

from ansible.module_utils.basic import AnsibleModule

#Hauptverarbeitung
#-----------------------------------------------------------
def main():
    #AnsibleModule-Klasse:Modul erstellen
    module = AnsibleModule(

        #Argumentempfang
        argument_spec=dict(

            #Streit: path(str Typ,Verpflichtend)
            path=dict(type='str', required=True),
            #Streit: owner(str Typ,Verpflichtend)
            owner=dict(type='str', required=True),
            #Streit: group(str Typ,Verpflichtend)
            group=dict(type='str', required=True),
            #Streit: mode(str Typ,Verpflichtend)
            mode=dict(type='str', required=True),
        ),
        #Aktivieren Sie die Argumentprüfung
        supports_check_mode=True
    )

    #Ich möchte den Pfad verwenden
    rc, stdout, stderr = module.run_command("/usr/bin/mkfifo " + module.params['path'])

    #Befehlsergebnis zurückgeben
    module.exit_json(
        changed=True,
        rc=rc,
        stdout=stdout,
        stderr=stderr
    )

if __name__ == '__main__':
    main()

Jetzt ist es voll! Lauf! !!

$ 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"
Insgesamt 0
-rw-r--r--.1 Wurzel Wurzel 0 29. Mai 10:45 2020 udon.txt
prw-r--r--.1 Wurzel Wurzel 0 29. Mai 10:54 2020 udon_pipe
-rw-------.1 Wurzel Wurzel 0 27. Mai 06:34 2020 yum.log

Okay, ich mache nach und nach Fortschritte. Bis heute.

Recommended Posts

Ansible selbst erstellte Modulerstellung - Teil 2: Das Leben will nur Befehle ausführen -
Ansible Erstellen Sie Ihr eigenes Modul - Teil 1: Leben, das Sie Argumente erhalten möchten -
Ansible selbstgemachte Modulerstellung - Teil 3: Leben, das die Notwendigkeit von Veränderungen beurteilen will -
Ansible selbst erstellte Modulerstellung - Teil 4: Leben, das Sie ohne Named Pipe machen möchten (vollständig) -
Ansible selbstgemachte Modul U / min Betrieb
So führen Sie Befehle mit einem Jupyter-Notebook aus