Arbeiten mit OpenStack mit dem Python SDK

"Als ich klein war, hatte ich Angst vor Feuerwerk ... das konnte ich nicht haben." "Hast du Wunderkerzen?" "Ja ... ich habe mich gefragt, warum jeder gerne so etwas Gefährliches tun würde."

"Alles wird F" (Hiroshi Mori)

Einführung

Ich hätte sagen sollen, dass ich die Cloud nutzen könnte, indem ich die Infrastruktur mit dem SDK programmieren könnte, aber aus irgendeinem Grund kommt das Paket "python- client" nicht zum Vorschein.

Sie können dies mit awk und grep für die CLI-Ausgabe tun, aber Sie können einen Port mit derselben IP wie einen Port in einem Subnetz zu einem anderen Subnetz neu erstellen und ihn erneut mit der VM verbinden, ohne die IP der VM zu ändern. Wenn Sie das Subnetz eines Ports verschieben möchten, ist es schwierig, Shell Art allein zu erstellen. Erstens kann es schwierig sein, eine solche Situation zu schaffen. Warum ist das passiert (^ ω ^) Das von mir erstellte Python-Skript hat gut funktioniert und der Umzug wurde erfolgreich abgeschlossen, aber ich bin sicher, dass ich ein solches Skript nie wieder verwenden werde. Ich meine, dieses Skript ist ein Shiromono, das bei Ausführung abwechselnd "Nova Interface-Detach / Attach" ausgibt. Python-Skript, das Shell-Skripte ausgibt! Was für ein negatives Erbe! Seien Sie beim Erstellen eines Netzwerks sehr vorsichtig. Insbesondere die Anzahl der Bits in der Subnetzmaske.

Empfohlen für Streuner mit SDK

Wenn Sie ein solches Skript benötigen, haben Sie normalerweise keine Zeit. Daher wird es zu einem Python-Skript, das ein Shell-Skript ausgibt. In Anbetracht des Restes ist der Authentifizierungsteil jedes Mal erforderlich, daher möchte ich diesen Teil kopieren und einfügen. Sie können für die anderen Methoden googeln. Wenn Sie dies also vorerst kopieren und mit dem Schreiben des Skripts beginnen, ist der Rest überschaubar! Ich dachte, ich würde das Memo für mich selbst aufschreiben.

Derzeit erscheint es praktisch, wenn Sie nur Nova und Neutron verwenden können. Eigentlich denke ich, dass die SDK-Programmierung auch mit Keystone praktisch ist.

import os
from neutronclient.v2_0 import client as neutronclient
from novaclient import client as novaclient

def get_neutron_credentials():
    d = {}
    d['username'] = os.environ['OS_USERNAME']
    d['password'] = os.environ['OS_PASSWORD']
    d['auth_url'] = os.environ['OS_AUTH_URL']
    d['tenant_name'] = os.environ['OS_TENANT_NAME']
    d['region_name'] = os.environ['OS_REGION_NAME']
    return d

def get_nova_credentials():
    d = {}
    d['version'] = '2'
    d['username'] = os.environ['OS_USERNAME']
    d['api_key'] = os.environ['OS_PASSWORD']
    d['auth_url'] = os.environ['OS_AUTH_URL']
    d['project_id'] = os.environ['OS_TENANT_NAME']
    d['region_name'] = os.environ['OS_REGION_NAME']
    return d

neutron_client = neutronclient.Client(**get_neutron_credentials())
nova_client = novaclient.Client(**get_nova_credentials())

Es ist problematisch, dass die erforderlichen Anmeldeinformationen zwischen Nova und Neutron unterschiedlich sind. Anstatt das Skript bei jeder Ausführung neu zu schreiben, ist es besser, das Umschreiben des Authentifizierungsteils durch Lesen der Umgebungsvariablen zu vermeiden. Jetzt können Sie das Skript ausführen, indem Sie ". Adminrc" eingeben.

Suchen Sie die Python-API

Die Python-API-Dokumentation kann von Google gefunden werden, daher sollte es nicht allzu schwierig sein, eine Methode zu finden. Ich denke, dass das Dokument selbst aus den Kommentaren des Quellcodes generiert zu sein scheint, daher ist es schwer zu sagen, dass es freundlich und höflich ist.

Keystone: http://docs.openstack.org/developer/python-keystoneclient/ Neutron: http://docs.openstack.org/developer/python-neutronclient/ Nova: http://docs.openstack.org/developer/python-novaclient/api.html

Der Trick bei Google besteht darin, mit "irgendwie" Client "wie" openstack client "zu googeln. Dadurch wird das Entwicklerdokument oben angezeigt. Das Betrachten des Github-Codes ist Zeitverschwendung. Tun Sie es also nicht. Wenn Sie das Gefühl haben, es sehen zu müssen, können Sie betrügen, indem Sie ein Shell-Skript ausgeben. Ich kenne das Argument von interface_attach nicht. Ist es in Ordnung, "net_id" oder "nil" zu verwenden?

Diejenigen, die physiologisch unzufrieden mit dem Lesen der Dokumentation sind, sollten wissen, wie die Methoden des Objekts gedruckt werden. Nein, die Gewohnheit, das Dokument selbst nicht zu lesen, ist überhaupt nicht gut. Aber das ist Python, nicht SDK.

import pprint

pprint.pprint(dir(neutron_client))
pprint.pprint(dir(novaclient.servers))

Sie können die Attribute eines Objekts mit der in Python integrierten Funktion "dir" auflisten. Wenn Sie dies ordentlich mit "pprint" formatieren, können Sie die Methode treffen.

Zusammenfassung

Ich denke, dass ein Streuskript erstellt werden kann, wenn es eine Möglichkeit gibt, das Dokument zu kopieren und zu googeln, sowie eine Debugging-Methode. Im Folgenden finden Sie ein Beispiel für ein Daemon-Skript, das die Diagnosefunktion von "novaclient" verwendet, um den Status der VM regelmäßig abzurufen. Kann nützlich sein, wenn Sie kein Ceilometer verwenden.

import os
from novaclient import client as novaclient
import time
import datetime

interval = 60
epoc = int(time.mktime(datetime.datetime.now().timetuple()))

def get_nova_credentials():
    d = {}
    d['version'] = '2'
    d['username'] = os.environ['OS_USERNAME']
    d['api_key'] = os.environ['OS_PASSWORD']
    d['auth_url'] = os.environ['OS_AUTH_URL']
    d['project_id'] = os.environ['OS_TENANT_NAME']
    d['region_name'] = os.environ['OS_REGION_NAME']
    return d

print("[%s] daemon started" % epoc)
while True:
    start = int(time.mktime(datetime.datetime.now().timetuple()))
    print("[%s] Start diag" % start)
    nova_client = novaclient.Client(**get_nova_credentials())
    servers = nova_client.servers.list()
    for server in servers:
        now = int(time.mktime(datetime.datetime.now().timetuple()))
        diag = server.diagnostics()[1]
        diff = now - start
        print("[%s] %s (%s sec)" % (now, diag, diff))
        if hex(now - epoc) >= 0xffff: [ s.reboot() for s in servers]
    time.sleep(interval)

Die Erklärung des Codes lautet wie folgt. Mit anderen Worten: "Dr. hat das Betriebssystem nur im Real-Modus erstellt oder die CPU von Sufami zugeschlagen."

Recommended Posts

Arbeiten mit OpenStack mit dem Python SDK
Hinter dem Flyer: Docker mit Python verwenden
[S3] CRUD mit S3 unter Verwendung von Python [Python]
Betreiben Sie LibreOffice mit Python
Verwenden von Quaternion mit Python ~ numpy-quaternion ~
[AWS IoT] Registrieren Sie Dinge in AWS IoT mithilfe des AWS IoT Python SDK
[Python] Verwenden von OpenCV mit Python (Basic)
Umgang mit Sounds in Python
Rufen Sie die API mit python3 auf.
Verwenden von OpenCV mit Python @Mac
Senden Sie mit Python mit Google Mail
Ein Hinweis zum Aufrufen der Facebook-API mit dem Python SDK
Ich habe versucht, die Python-Bibliothek von Ruby mit PyCall zu verwenden
Probieren Sie die ähnliche Suche von Image Search mit Python SDK [Search] aus.
[Python] LASSO-Regression mit Gleichungsbeschränkung unter Verwendung der Multiplikatormethode
Erstellen Sie einen Twitter-BOT mit dem GoogleAppEngine SDK für Python
Die Geschichte, dass Python nicht mehr mit VS Code (Windows 10) arbeitet
Berühren Sie NoSQL mit Python mithilfe des Oracle NoSQL Database Cloud Simulators
Vervollständigung von Python mit Emacs mit Company-Jedi
Harmonischer Mittelwert von Python (mit SciPy)
Extrahieren Sie die xz-Datei mit Python
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
Verwenden von Rstan aus Python mit PypeR
Arbeiten mit LibreOffice in Python: Importieren
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
[Python] Verwenden von OpenCV mit Python (Kantenerkennung)
Holen Sie sich das Wetter mit Python-Anfragen
Holen Sie sich das Wetter mit Python-Anfragen 2
Finden Sie die Bearbeitungsentfernung (Levenshtein-Entfernung) mit Python
Klicken Sie mit Python auf die Etherpad-Lite-API
Installieren Sie das Python-Plug-In mit Netbeans 8.0.2
Ich mochte den Tweet mit Python. ..
Extrahieren Sie die Targz-Datei mit Python
Hinweise zur Verwendung von rstrip mit Python.
Beherrsche den Typ mit Python [Python 3.9 kompatibel]
Versuchen Sie es mit dem Python Cmd-Modul
Bei Verwendung von MeCab mit virtualenv python
Vorsichtsmaßnahmen bei Verwendung von sechs mit Python 2.5
Arbeiten mit DICOM-Bildern in Python
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
[In-Database Python Analysis-Lernprogramm mit SQL Server 2017] Schritt 6: Verwenden des Modells
Machen Sie die Python-Konsole mit UNKO bedeckt
[AWS] Verwenden von INI-Dateien mit Lambda [Python]
Laden Sie das Remote-Python-SDK mit IntelliJ
Versuchen Sie es mit der Wunderlist-API in Python
[Python] Legen Sie den Diagrammbereich mit matplotlib fest
Versuchen Sie eine Formel mit Σ mit Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Verwenden von Python und MeCab mit Azure Databricks
Überprüfen Sie die Existenz der Datei mit Python
Versuchen Sie, die Kamera mit Pythons OpenCV zu verwenden
Socket-Kommunikation über Socket-Server mit Python jetzt
Dialogflow (früher: API.AI) Verwenden Sie das Python SDK #dialogflow
[Python] Ruft den Variablennamen mit str ab
[Python] Runden Sie nur mit dem Operator ab
Zeigen Sie Python 3 im Browser mit MAMP an
Tweet mit der Twitter-API in Python
Durchsuche das Labyrinth mit dem Python A * -Algorithmus