[PYTHON] Ansible selbstgemachte Modulerstellung - Teil 3: Leben, das die Notwendigkeit von Veränderungen beurteilen will -

Vorheriger Artikel 1: Erstellen Sie Ihr eigenes Ansible-Modul - Teil 1: Leben, für das Sie Argumente erhalten möchten- Vorheriger Artikel 2: Erstellen eines selbst erstellten Ansible-Moduls - Teil 2: Das Leben möchte nur Befehle ausführen-

Zurückblicken

Referenz

Erstverarbeitung

Auch für eine Überprüfung. Erstellen Sie zunächst eine Vorlage (siehe "Vorheriger Artikel 1" als Referenz). Der als Test erstellte Befehlsausführungsteil (siehe Referenz "Vorheriger Artikel 2") wurde einmal entfernt.

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: data(str Typ,def:pong)
            data=dict(type='str', default='pong'),
        ),
        #Aktivieren Sie die Argumentprüfung
        supports_check_mode=True
    )

    #Ergebnis diktieren:Ergebnis erstellen
    result = dict(
        # key:Der als Argument für Ping angegebene Schlüssel:Speichern Sie den Wert der Daten
        ping=module.params['data'],
    )

    #Der Inhalt des Ergebnisses ist der Schlüssel=value,Ausgabe in Form von
    module.exit_json(**result)

if __name__ == '__main__':
    main()

Implementieren Sie dabei den variablen empfangenden Teil.

mkfifo.py


: #(Kürzung)
    #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
    )
: #(Kürzung)

Im Moment gibt es keine Verzweigung je nach Betriebssystemversion oder Distribution. Setze einfach eine geänderte Variable ... aber wo definierst du geändert? Ist es außerhalb der AnsibleModule-Klasse in Ordnung? Versuche es.

sakrua.py


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

from ansible.module_utils.basic import AnsibleModule

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

    changed =False ★ Ändern Sie diesen Wert in True

    module.exit_json(changed=changed)

if __name__ == '__main__':
    main()
# changed =Wenn wahr
$ 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 =Wenn falsch
$ 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
}

Gut. Es wird außerhalb der Klasse "AnsibleModule" definiert.

Versuchen Sie, "Geändert" zu beurteilen

Die Bedingungen für "geändert", um "wahr" zu sein, sind wie folgt

  1. Die in path angegebene Named Pipe existiert nicht
  2. Die in path angegebene Named Pipe ower: group: mode folgt nicht dem Argument

Bedingung 1 kann durch den "Rückkehrcode" von "test -p xxxxx" beurteilt werden. Bedingung 2 kann anhand der Standardausgabe von "stat -c% U:% G:% a" beurteilt werden.

Da das Ergebnis von stat -c% a nur die letzten 3 Ziffern anzeigt, verwenden Sie stat -c 0% a. Da "stdout" bis zum Zeilenvorschubcode ausgegeben wird, wurde zum Zeitpunkt des Vergleichs "\ n" eingefügt.

mkfifo.py


: #(Kürzung)
    #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, stdout, stderr = module.run_command("test -p " + module.params['path'])
    #Überprüfe das Ergebnis
    if ( rc != 0 ):
        #Da es nicht existiert, kann es sich ändern
        changed = True
    else:
        #Besitzer, falls vorhanden:group:Get-Modus
        rc, 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)

Lassen Sie es uns bis zu diesem Punkt bewegen.

$ 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": []
}

Versuchen Sie, / tmp / testfifo auf dem Zielserver zu erstellen.

# /tmp/testfifo root:root:Machen wir es mit 0644
$ ssh [email protected] "mkfifo /tmp/testfifo; chmod 0644 /tmp/testfifo"
$ ssh [email protected] "ls -l /tmp/testfifo"
prw-r--r--.1 Wurzel Wurzel 0 1. Juni 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:Versuchen Sie es auf 0777 zu setzen
$ ssh [email protected] "chmod 0777 /tmp/testfifo"
$ ssh [email protected] "ls -l /tmp/testfifo"
prwxrwxrwx.1 Wurzel Wurzel 0 1. Juni 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. Dieser Abschnitt endet hier. Als nächstes folgt die Befehlseingabeausgabe. .. Der Inhalt scheint dünn zu sein.

Recommended Posts

Ansible selbstgemachte Modulerstellung - Teil 3: Leben, das die Notwendigkeit von Veränderungen beurteilen will -
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 -
Skript zum Ändern der Beschreibung von Fasta
Ändern Sie den Dezimalpunkt der Protokollierung von, nach.
[Ansible] Beispiel für ein Playbook, das der ersten Zeile der Datei eine Zeichenkette hinzufügt
Ein Hinweis auf Missverständnisse beim Versuch, das gesamte selbst erstellte Modul mit Python3 zu laden
Ausführen des in Ansible Tower hinzugefügten Ansible-Moduls
So greifen Sie auf die globale Variable des importierten Moduls zu
Ich habe versucht, den Beispielcode des Ansible-Moduls auszuführen
[Python] Ändern Sie die Cache-Steuerung von Objekten, die in den Cloud-Speicher hochgeladen wurden
Erleichtern Sie die Anzeige von Python-Modulausnahmen
Eine Einführung in die Objektorientierung: Ändern Sie den internen Status eines Objekts
Ändern Sie die Lautstärke von Pepper entsprechend der Umgebung (Ton).