Als ich versuchte, Ansible zu verwenden, gab es kein Äquivalent zu einer Named Pipe ( makefifo
), also beschloss ich, mein Bestes mit meinem eigenen Modul zu geben.
ansible
ausführen$ cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
$ ansible --version
ansible 2.9.7
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/home/ansi/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /bin/ansible
python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
Beim Betrachten der Referenzseite
makefifo.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
from ansible.module_utils.basic import AnsibleModule
module = AnsibleModule(
dict=(
message=dict()
)
)
print '{"message_key":"%s"}' % (module.params['message'])
Ich frage mich, ob es so in Ordnung ist. Lassen Sie es uns gleich laufen.
$ ansible -i test_grp 192.168.56.104 -m makefifo -M library -u root -a message=test
192.168.56.104 | FAILED! => {
"msg": "Unable to import makefifo due to invalid syntax"
}
OOPS !! Das. .. Plötzlich stolperte ich.
Gibt es je nach Version von Ansible einen Unterschied? Also habe ich die Richtung geändert, um zu versuchen, das vorhandene Modul zu zerlegen und es zu machen.
$ find /usr/lib/python2.7/site-packages -type f -name ping.py
/usr/lib/python2.7/site-packages/ansible/modules/system/ping.py
Kopieren Sie diesen Typ und benennen Sie ihn in "pong.py" um und überprüfen Sie zuerst den normalen Betrieb.
$ ansible -i test_grp 192.168.56.104 -m pong -M library -u root -a data=hoge
192.168.56.104 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "hoge"
}
Ja, es funktioniert.
Durch das Abkratzen des unnötigen Teils des Inhalts von hier aus konnte ich Folgendes erreichen.
pong.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()
$ ansible -i test_grp 192.168.56.104 -m pong -M library -u root -a data=hoge
192.168.56.104 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "hoge"
}
Verwenden wir dies als Vorlage.
Ich denke, die für makefifo
erforderlichen Parameter sind wie folgt.
Parameter | Variablennamen(Schlüsselname) | Schimmel | Verpflichtend |
---|---|---|---|
Dateipfad | path | str | ○ |
Inhaber(Nutzer) | owner | str | ○ |
Inhaber(Gruppe) | group | str | ○ |
Genehmigung | mode | str | ○ |
Lassen Sie uns zunächst ein Modul erstellen, das diese Typen nur empfängt und zu den Ergebnissen zurückführt.
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
)
#Ergebnis diktieren:Ergebnis erstellen
result = dict(
path=module.params['path'],
owner=module.params['owner'],
group=module.params['group'],
mode=module.params['mode'],
)
#Der Inhalt des Ergebnisses ist der Schlüssel=value,Ausgabe in Form von
module.exit_json(**result)
if __name__ == '__main__':
main()
Informationen zu "erforderlich" und seiner Umgebung finden Sie unter Ansible-Modulentwicklung (Python-Implementierung).
Überprüfen Sie nun die Operation ... Wie geben Sie mehrere Argumente an? Ich fand Folgendes, als ich es nachschlug.
Danke Danke.
$ 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 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"group": "root",
"mode": "0644",
"owner": "root",
"path": "/tmp/hoge"
}
erledigt! Okay, alles was Sie tun müssen, ist es in Python
zu implementieren.
Vorerst ist hier heute.
Recommended Posts