[PYTHON] [Ansible] So rufen Sie Variablen auf, wenn Sie ein eigenes Modul erstellen

Einführung

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.

Umgebung

・ CentOS 7.2 ・ Python 2.7.5

Vorbereitung

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.

Erstellen Sie die Standardeinstellungen / main.yml

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"

Erstellen Sie Aufgaben / main.yml

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

Erstellen Sie Ihr eigenes Modul

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()

Lauf

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.

Nachwort

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

[Ansible] So rufen Sie Variablen auf, wenn Sie ein eigenes Modul erstellen
(Hinweis) So übergeben Sie den Pfad Ihres eigenen Moduls
So importieren Sie Ihr eigenes Modul mit jupyter
So installieren Sie Ihre eigene (Root-) Zertifizierungsstelle
So definieren Sie Ihr eigenes Ziel in Sage
[Ansible] Ich möchte meine eigene Funktion über das Vorlagenmodul (Makro) aufrufen.
Ausführen des in Ansible Tower hinzugefügten Ansible-Moduls
[Einführung in die Udemy Python3 + -Anwendung] 66. Erstellen einer eigenen Ausnahme
[Ansible] Verwendung der SSH-Kennwortauthentifizierung bei der Ausführung von ansible
Rufen Sie Ihr eigenes Python-Modul aus dem ROS-Paket auf
So rufen Sie eine Funktion auf
Wie Sie pyenv und pyenv-virtualenv auf Ihre eigene Weise verwenden
So definieren Sie Go-Variablen
So geben Sie zusätzliche Informationen aus, wenn Sie Protokolle mit dem Protokollierungsmodul von Python ausgeben
Ansible-Modul So fügen Sie die als Parameter übergebene Zeichenfolge JSON beim Schreiben in das Wörterbuch ein
Erstellen Sie das Thema von Pythonista 3 wie Monokai (wie Sie Ihr eigenes Thema erstellen)
So erstellen Sie Ihre eigene Domain-Site mit Heroku (kostenloser Plan)
[Tipps] Die Vorgehensweise beim Erstellen von HTML mit Django wird erweitert
Verwendung des optparse-Moduls
[Python] Anmelden Ihres eigenen Moduls
Verwendung des Python-Protokollierungsmoduls
[Ansible] So verhindern Sie, dass Änderungen auftreten
So fügen Sie sudo hinzu, wenn Sie das Debug ausführen
Überbrücken Sie ROS mit Ihrem eigenen Protokoll
Verwendung des ConfigParser-Moduls
So rufen Sie PyTorch in Julia an
[Python] So fügen Sie RDF Triple mithilfe von rdflib zu Ihrem eigenen Fuseki-Server hinzu
Wie baue ich meinen eigenen Linux-Server?
Fügen Sie mitmproxy Ihre eigene Inhaltsansicht hinzu
[Python] Verwenden Sie und und oder beim Erstellen von Variablen
[Python] So zeigen Sie Zufallszahlen an (Zufallsmodul)
Dynamisches Definieren von Variablen in Python
python3 So installieren Sie ein externes Modul
Wie bekomme ich IP bei Tornado + Nginx
Wenn Sie dasselbe wie zuvor verwenden, können Sie dies visualisieren, indem Sie Japan, China und Südkorea ausschließen, in denen viele Menschen infiziert sind. In diesem Fall lauten die Daten für "2020/02/21" wie folgt. Besonders auffällig sind Südostasien, Europa und Nordamerika. Ich hoffe es konvergiert so schnell wie möglich. .. .. Migrieren Sie Python, Pandas, Python3, Zeitreihendaten und eigene CMS-Daten nach WordPress
So fügen Sie der Anaconda-Umgebung ein Python-Modul hinzu
Verwendung des externen Moduls von TouchDesigner Python
[Zur Aufnahme] Keras-Bildsystem Teil 1: Wie erstelle ich einen eigenen Datensatz?
[Linux] [Kernelmodul] Übergeben von Parametern als Argumente beim Laden eines ladbaren Kernelmoduls