Ich bin eine Person, die täglich als Infrastrukturingenieur in einem bestimmten Unternehmen arbeitet, um ansible Rollen und Playbooks zu erstellen. Ich bin erst seit einem halben Jahr ansibel, aber heutzutage gewöhne ich mich endlich an Entwicklung und Betrieb. Er sagte, dass er wollte, dass die Arbeit, die in dieser Zeit hereinkam, ein "Originalmodul" schuf.
Viele Module sind in ansible implementiert. (Siehe die offizielle Website: http://docs.ansible.com/ansible/list_of_all_modules.html) Diese Anforderung ist jedoch eine Anforderung, die die oben beschriebenen vorhandenen Module nicht unterstützen. Programmiererfahrung ist ein Neuling, der gerade vor einem Monat mit Python angefangen hat. Zuerst war ich besorgt, ob ich wirklich einen coolen Job beim Erstellen meines eigenen Moduls machen könnte.
Ich war besorgt, aber!
Ansible Module waren überraschend einfach zu erstellen. Die Hürde ist nicht hoch, wenn Sie es nur schaffen. Da das ursprüngliche Modul jedoch von ansible getrennt ist Wenn Sie nicht wissen, wie Sie die auf der Ansible-Seite definierten Variablen aufrufen sollen, Sie können unter unaufruflichem Stress leiden.
Es ist lange her, aber das Hauptthema ist von hier.
Auf dieser Seite, um diesem Stress entgegenzuwirken Hier erfahren Sie, wie Sie Variablen aufrufen, über die Anfänger stolpern.
・ CentOS 7.2 ・ Python 2.7.5
Bereiten Sie zunächst Ihren eigenen Modulspeicherbereich vor. Erstellen Sie ein "Bibliotheks" -Verzeichnis in Ihrem Playbook.
ansible-test-playbook
|_test-server.yml
|_group_vars
|_host_vars
|_vars
|_inventory
|_roles
|_role_test
|_defaults
|_main.yml
|_tasks
|_main.yml
|_templates
|_library ⬅︎new!
|_test.py ⬅︎new!
Nachdem wir fertig sind, erstellen wir unser eigenes Modul. Ein einfaches Shell-Skript wird aber funktionieren Dieses Mal werde ich hauptsächlich die Methode "Lesen und Ausführen der auf der Ansible-Seite auf der Modulseite deklarierten Variablen" schreiben.
In ansible können Sie die einmal beschriebenen Variablen frei verwenden, indem Sie sie aufrufen. Wenn Sie jedoch versuchen, es so aufzurufen, wie es sich auf der ursprünglichen Modulseite befindet, funktioniert es nicht. Daher ist es notwendig, die Variable anzugeben, die Sie mit task aufrufen möchten, und sie in Ihr eigenes Modul zu bringen. Im Folgenden wird beschrieben, wie Sie die Variable in das ursprüngliche Modul bringen und das Ausführungsergebnis an die ansible Seite zurückgeben.
Deklarieren Sie die Variable, die Sie dieses Mal aufrufen möchten, mit den Standardwerten wie folgt. (Das Schreiben von Variablen wird auf dieser Seite weggelassen.)
main.yml
un: "Hello"
deux: "World"
Bereiten Sie als Nächstes die Aufgabe vor. Schreiben Sie in der Aufgabe wie folgt.
main.yml
- name: get hello world
test: # .Ursprünglicher Modulname, der ohne py ausgeführt werden soll
un: "{{ un }}" #Variablen, die Sie in Ihrem eigenen Modul verwenden möchten
deux: "{{ deux }}"
register: cinq #Variablenname, in dem das Ausführungsergebnis des ursprünglichen Moduls gespeichert wird
Nun erstellen wir ein Modul. Erstellen Sie eine Datei mit dem Namen "test.py" im Bibliotheksverzeichnis.
test.py
#!/usr/bin/env python
# coding: utf-8
#Importieren Sie, was Sie brauchen
import json, urllib2
from ansible.module_utils.basic import *
def main():
#Es ist wie ein Zaubertrick, Informationen von Vars zu erhalten
#Schreiben Sie zu diesem Zeitpunkt den Variablennamen so, dass er mit dem in Task deklarierten übereinstimmt.
module = AnsibleModule(
argument_spec=dict(
un=dict(required=True, type='str'),
deux=dict(required=True, type='str')
),
# no skip
supports_check_mode=True,
)
#Speichern Sie die oben erhaltenen Informationen und stellen Sie sie im Modul zur Verfügung
un = module.params['un']
deux = module.params['deux']
#Was tun mit diesem Modul?
trois = un + deux
#Speichern führt die Ausführung im Wörterbuchtyp aus
#Ansible später beschrieben_Dieses Formular ist obligatorisch, da Fakten in einem Wörterbuchformat erstellt werden
quatre = {"quatre": trois}
#Übergeben Sie das Ausführungsergebnis an die ansible Seite
module.exit_json(changed=True, ansible_facts=quatre)
if __name__ == '__main__':
main()
Jetzt, da Sie bereit sind, machen wir das oben genannte.
PLAYBOOK: test-server.yml ********************************************************
1 plays in test-server.yml
PLAY [all] *********************************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [role-test : get hello world] *******************************************
changed: [localhost] => {
"ansible_facts": {
"quatre": "HelloWorld"⬅︎ Ausführungsergebnis
},
"changed": true,
"invocation": {
"module_args": {
"deux": "World",
"un": "Hello"
},
"module_name": "test"
}
}
Sie können sehen, dass das Ausführungsergebnis des ursprünglichen Moduls in ansible_facts gespeichert ist. Wie soll ich dann schreiben, um das Ausführungsergebnis dieses Mal auf der ansiblen Seite aufzurufen?
"{{ cinq.ansible_facts.quatre }}"
"Variablenname, der durch das Register in task.ansible_facts angegeben wird. Im Originalmodul deklarierter Wörterbuchtypschlüssel" Wenn Sie auf diese Weise schreiben, können Sie das Ausführungsergebnis in ansible verwenden.
Dies ist das Ende der Arbeit.
Wie war das? Wir hoffen, dass es für diejenigen nützlich sein wird, die in solche Schwierigkeiten geraten sind.
Ich werde auch in Zukunft Ansible und Python berühren, also Ich würde gerne posten, wenn es neues Lernen gibt.
Danke für Ihren Besuch.
Recommended Posts