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-
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.
Die Bedingungen für "geändert", um "wahr" zu sein, sind wie folgt
path
angegebene Named Pipe existiert nicht path
angegebene Named Pipe ower
: group
: mode
folgt nicht dem ArgumentBedingung 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