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-
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
geändert
UrteilDas 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.
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