[PYTHON] Ansible selbst erstellte Modulerstellung - Teil 4: Leben, das Sie ohne Named Pipe machen möchten (vollständig) -

Vorheriger Artikel 1: Erstellen Sie Ihr eigenes Ansible-Modul - Teil 1: Leben, für das Sie Argumente erhalten möchten- Vorheriger Artikel 2: Ansible selbst erstellte Modulerstellung - Teil 2: Das Leben will nur Befehle ausführen- Vorheriger Artikel 3: Erstellen eines selbst erstellten Ansible-Moduls - Teil 3: Leben, das die Notwendigkeit von Änderungen beurteilen möchte-

Zurückblicken

Beurteilung der Notwendigkeit der Befehlsausführung

Die auszuführenden Befehle und die auszuführenden Bedingungen sind wie folgt

-- mkfifo Befehl --Wenn "die Pfeife noch nicht existiert" zum Zeitpunkt der "geänderten" Beurteilung -- chown Befehl, chmod Befehl --Wenn geändert True ist

Leicht modifiziertes geändert Urteil

Das letzte Mal wurde "geändert = wahr" einheitlich festgelegt, wenn "die benannte Pipe nicht vorhanden ist" oder "der Eigentümer und die Berechtigungen unterschiedlich sind", aber nur im ersteren Fall ist der Befehl "mkfifo" erforderlich, also kehren Sie zurück. Ich musste die Art und Weise ändern, wie ich den Wert erhielt.

mkfifo.py


: #(Kürzung)
    #Überprüfen Sie mit dem Testbefehl, ob im Pfad eine Named Pipe vorhanden ist
    rc_mkfifo, stdout, stderr = module.run_command("test -p " + module.params['path'])
    #Überprüfe das Ergebnis
    if ( rc_mkfifo != 0 ):
        #Da es nicht existiert, kann es sich ändern
        changed = True
    else:
        #Besitzer, falls vorhanden:group:Get-Modus
        rc_chom, stdout, stderr = module.run_command("stat -c %U:%G:0%a " + module.params['path'])
        #Vergleich. Das Befehlsergebnis ist der Zeilenvorschubcode am Ende\Beachten Sie, dass n angehängt ist
        if ( stdout != module.params['owner'] + ':' + module.params['group'] + ':' + module.params['mode'] + '\n'):
            # owner:group:Da der Modus unterschiedlich ist, kann er sich ändern
            changed = True

    #Ende
    module.exit_json(changed=changed,stdout=stdout,stderr=stderr)
: #(Kürzung)

Wie oben erwähnt, wurde das Ergebnis von "test -p" geändert, um in "rc_mkfifo" aufgenommen zu werden.

Dann wird beurteilt, ob die Befehlsausführung notwendig ist oder nicht.

mkfifo.py


: #(Kürzung)
            # owner:group:Da der Modus unterschiedlich ist, kann er sich ändern
            changed = True

    #Gab es eine Named Pipe?
    if ( rc_mkfifo != 0 ):
        #Befehlsausführung, weil sie nicht existiert
        rc, stdout, stderr = module.run_command('mkfifo ' + module.params['path'])

        #Wenn der Rückkehrcode nicht 0 ist, endet er hier
        if ( rc != 0 ):
            #Befehlsfehler
            module.fail_json(msg = stderr, rc = rc)

    #Ist die Änderung eingetreten?
    if ( changed == True ):
        #Ändern Sie den Eigentümer, wenn Änderungen auftreten
        rc, stdout, stderr = module.run_command('chown ' + module.params['owner'] + ':' + module.params['group'] + ' ' + module.params['path'])
        #Wenn der Rückkehrcode nicht 0 ist, endet er hier
        if ( rc != 0 ):
            #Befehlsfehler
            module.fail_json(msg = stderr, rc = rc)

        #Änderungsberechtigungen, da Änderungen aufgetreten sind
        rc, stdout, stderr = module.run_command('chmod ' + module.params['mode'] + ' ' + module.params['path'])
        #Wenn der Rückkehrcode nicht 0 ist, endet er hier
        if ( rc != 0 ):
            #Befehlsfehler
            module.fail_json(msg = stderr, rc = rc)

    #Verarbeitung beenden
    module.exit_json(changed = changed)
: #(Kürzung)

Ausführung ~

#Stellen Sie im Voraus sicher, dass die Datei nicht vorhanden ist
$ 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

#Lauf
$ 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
}

#Generierungsbestätigung
$ ssh [email protected] "ls -l /tmp"
Insgesamt 0
prwxrwxrwx.1 Wurzel Wurzel 0 1. Juni 02:52 2020 testfifo
-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

#Bestätigen Sie, dass es bei erneuter Ausführung übersehen wird
$ 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
}

Herzliche Glückwünsche.

Andere Inhalte hinzugefügt werden

--Branch-Befehle für jedes Betriebssystem und jede Version (Factory class)

Ich frage mich, was es ist, aber vorerst ist diese Serie vorbei, weil ich eine gemacht habe. Ah, es hat Spaß gemacht.

Voller Text

Zum Schluss werde ich den vollständigen Text veröffentlichen.

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(Verpflichtend,str Typ)
            path=dict(required=True,type='str'),
            #Streit: owner(str Typ,Standard=root)
            owner=dict(type='str',default='root'),
            #Streit: group(str Typ,Standard=root)
            group=dict(type='str',default='root'),
            #Streit: mode(str Typ,Standard=0644)
            mode=dict(type='str',default='0644'),
        ),
        #Aktivieren Sie die Argumentprüfung
        supports_check_mode=True
    )
    #Initialisieren Sie, ob eine Änderung vorliegt oder nicht(Keine Änderung)
    changed = False

    #Überprüfen Sie mit dem Testbefehl, ob im Pfad eine Named Pipe vorhanden ist
    rc_mkfifo, stdout, stderr = module.run_command('test -p ' + module.params['path'])
    #Überprüfe das Ergebnis
    if ( rc_mkfifo != 0 ):
        #Da es nicht existiert, kann es sich ändern
        changed = True
    else:
        #Besitzer, falls vorhanden:group:Get-Modus
        rc_chom, stdout, stderr = module.run_command('stat -c %U:%G:0%a ' + module.params['path'])
        #Vergleich. Das Befehlsergebnis ist der Zeilenvorschubcode am Ende\Beachten Sie, dass n angehängt ist
        if ( stdout != module.params['owner'] + ':' + module.params['group'] + ':' + module.params['mode'] + '\n'):
            # owner:group:Da der Modus unterschiedlich ist, kann er sich ändern
            changed = True

    #Gab es eine Named Pipe?
    if ( rc_mkfifo != 0 ):
        #Befehlsausführung, weil sie nicht existiert
        rc, stdout, stderr = module.run_command('mkfifo ' + module.params['path'])

        #Wenn der Rückkehrcode nicht 0 ist, endet er hier
        if ( rc != 0 ):
            #Befehlsfehler
            module.fail_json(msg = stderr, rc = rc)

    #Ist die Änderung eingetreten?
    if ( changed == True ):
        #Ändern Sie den Eigentümer, wenn Änderungen auftreten
        rc, stdout, stderr = module.run_command('chown ' + module.params['owner'] + ':' + module.params['group'] + ' ' + module.params['path'])
        #Wenn der Rückkehrcode nicht 0 ist, endet er hier
        if ( rc != 0 ):
            #Befehlsfehler
            module.fail_json(msg = stderr, rc = rc)

        #Änderungsberechtigungen, da Änderungen aufgetreten sind
        rc, stdout, stderr = module.run_command('chmod ' + module.params['mode'] + ' ' + module.params['path'])
        #Wenn der Rückkehrcode nicht 0 ist, endet er hier
        if ( rc != 0 ):
            #Befehlsfehler
            module.fail_json(msg = stderr, rc = rc)

    #Verarbeitung beenden
    module.exit_json(changed = changed)

if __name__ == '__main__':
    main()

Recommended Posts

Ansible selbst erstellte Modulerstellung - Teil 4: Leben, das Sie ohne Named Pipe machen möchten (vollständig) -
Ansible Erstellen Sie Ihr eigenes Modul - Teil 1: Leben, das Sie Argumente erhalten möchten -
Ansible selbst erstellte Modulerstellung - Teil 2: Das Leben will nur Befehle ausführen -
Ansible selbstgemachte Modulerstellung - Teil 3: Leben, das die Notwendigkeit von Veränderungen beurteilen will -
Ein Gist-Repository, das Sie verwenden können, wenn Sie es mit ansible ausprobieren möchten
Wenn Sie eine TODO-Anwendung (verteilt) jetzt nur mit Python erstellen möchten
Wenn Sie einen Discord-Bot mit Python erstellen möchten, verwenden wir ein Framework
Möchten Sie einen Twitter-Lebenslauf erstellen?
Ich möchte ein Spiel mit Python machen
Wenn Sie Word Cloud erstellen möchten.
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
Kein Modul mit dem Namen Was tun, wenn Sie "libs.resources" erhalten?
[Python] Ich möchte aus einer verschachtelten Liste einen Taple machen
Wenn Sie in der for-Anweisung plt.save möchten
Notieren Sie sich, was Sie in Zukunft mit Razpai machen möchten