Travailler avec OpenStack à l'aide du SDK Python

"Quand j'étais petit, j'avais peur des feux d'artifice ... Je ne pouvais pas avoir ça." «Avez-vous des cierges magiques? "Ouais ... Je me suis demandé pourquoi tout le monde serait heureux de faire une chose aussi dangereuse."

"Tout devient F" (Hiroshi Mori)

introduction

J'aurais dû dire que je pourrais utiliser le cloud en étant capable de programmer l'infrastructure à l'aide du SDK, mais pour une raison quelconque, le package python- <hoge> client n'est pas révélé.

Vous pouvez le faire avec awk et grep pour la sortie CLI, mais vous pouvez recréer un port avec la même adresse IP qu'un port d'un sous-réseau vers un autre sous-réseau et le rattacher à la VM sans changer l'IP de la VM. Lorsque vous souhaitez déplacer le sous-réseau d'un port vers, il est difficile de faire de l'art shell seul. En premier lieu, il peut être difficile de créer une telle situation. Pourquoi est-ce arrivé (^ ω ^) Le script Python que j'ai créé a bien fonctionné et le déplacement a été effectué avec succès, mais je suis sûr que je n'utiliserai plus jamais un tel script. Je veux dire, ce script est un shiromono qui génère alternativement nova interface-detach / attach en standard lorsqu'il est exécuté. Script Python qui génère des scripts shell! Quel héritage négatif! Soyez très prudent lors de la création d'un réseau. Surtout le nombre de bits dans le masque de sous-réseau.

Recommandé pour les parasites avec SDK

Maintenant, lorsque vous avez besoin d'un script comme celui-ci, vous n'avez généralement pas le temps. Par conséquent, il devient un script Python qui génère un script shell. Compte tenu du reste, la partie authentification est requise à chaque fois, je veux donc copier et coller cette partie. Vous pouvez rechercher les autres méthodes sur Google. Donc, si vous copiez ceci pour le moment et commencez à écrire le script, le reste sera gérable! J'ai pensé que j'écrirais le mémo pour moi-même.

Pour le moment, cela semble pratique si vous ne pouvez utiliser que Nova et Neutron. En fait, je pense que la programmation du SDK est pratique même avec Keystone.

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

Il est gênant que les informations d'identification requises soient différentes entre Nova et Neutron. Au lieu de réécrire le script à chaque exécution, il vaut mieux éviter de réécrire la partie authentification en lisant les variables d'environnement. Vous pouvez maintenant exécuter le script en tapant simplement . Adminrc.

Trouvez l'API Python

La documentation de l'API Python peut être trouvée par google, donc trouver une méthode ne devrait pas être trop difficile. Je pense que le document lui-même semble être généré à partir des commentaires du code source, il est donc difficile de dire qu'il est gentil et poli.

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

L'astuce pour google est de google avec "en quelque sorte client" comme ʻopenstack client. Cela fera apparaître le document du développeur en haut. Regarder le code github est une perte de temps, alors ne le faites pas. Si vous avez envie de le voir, vous pouvez tricher en produisant un script shell. Je ne connais pas l'argument de ʻinterface_attach. Est-il acceptable d'utiliser net_id ou nil?

Ceux qui sont physiologiquement insatisfaits de la lecture de la documentation doivent savoir comment imprimer les méthodes dont dispose l'objet. Non, l'habitude de ne pas lire le document lui-même n'est pas du tout bonne. Mais c'est Python, pas SDK.

import pprint

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

Vous pouvez lister les attributs d'un objet avec la fonction dir intégrée à Python. Si vous formatez ceci proprement avec pprint, vous pourrez lancer la méthode.

Résumé

Je pense qu'un script errant peut être créé s'il existe un moyen de copier et de rechercher sur Google le document, ainsi qu'une méthode de débogage. Vous trouverez ci-dessous un exemple de script démon qui utilise la fonction diagnostics de novaclient pour continuer à obtenir régulièrement l'état de la VM. Peut être utile si vous n'utilisez pas Ceilometer.

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)

L'explication du code est la suivante. En d'autres termes, "Dr. a construit le système d'exploitation uniquement en mode réel, ou a claqué le processeur de Sufami."

Recommended Posts

Travailler avec OpenStack à l'aide du SDK Python
Derrière le flyer: utiliser Docker avec Python
[S3] CRUD avec S3 utilisant Python [Python]
Exploitez LibreOffice avec Python
Utilisation de Quaternion avec Python ~ numpy-quaternion ~
[AWS IoT] Enregistrer des éléments dans AWS IoT à l'aide du SDK AWS IoT Python
[Python] Utilisation d'OpenCV avec Python (basique)
Gérer les sons en Python
Appelez l'API avec python3.
Utiliser OpenCV avec Python @Mac
Envoyer en utilisant Python avec Gmail
Une note sur l'utilisation de l'API Facebook avec le SDK Python
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
Essayez une recherche similaire de recherche d'images à l'aide du SDK Python [Recherche]
[Python] Régression LASSO avec contrainte d'équation utilisant la méthode du multiplicateur
Créez un Twitter BOT avec le SDK GoogleAppEngine pour Python
Histoire que Python a cessé de travailler avec VS Code (Windows 10)
Touchez NoSQL avec Python à l'aide d'Oracle NoSQL Database Cloud Simulator
Compléter python avec emacs en utilisant company-jedi
Moyenne harmonique par Python (en utilisant SciPy)
Extraire le fichier xz avec python
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
Utilisation de Rstan de Python avec PypeR
Travailler avec LibreOffice en Python: import
[Python] Utilisation d'OpenCV avec Python (transformation d'image)
[Python] Utilisation d'OpenCV avec Python (détection des bords)
Obtenez la météo avec les requêtes Python
Obtenez la météo avec les requêtes Python 2
Trouvez la distance d'édition (distance de Levenshtein) avec python
Accédez à l'API Etherpad-lite avec Python
Installer le plug-in Python avec Netbeans 8.0.2
J'ai aimé le tweet avec python. ..
Extraire le fichier targz en utilisant python
Notes sur l'utilisation de rstrip avec python.
Maîtriser le type avec Python [compatible Python 3.9]
Essayez d'utiliser le module Python Cmd
Lors de l'utilisation de MeCab avec python dans virtualenv
Précautions lors de l'utilisation de six avec Python 2.5
Travailler avec des images DICOM en Python
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
[Didacticiel d'analyse Python dans la base de données avec SQL Server 2017] Étape 6: Utilisation du modèle
Rendre la console Python couverte d'UNKO
[AWS] Utilisation de fichiers ini avec Lambda [Python]
Charger le SDK Python distant avec IntelliJ
Essayez d'utiliser l'API Wunderlist en Python
[Python] Définissez la plage du graphique avec matplotlib
Essayez une formule utilisant Σ avec python
Essayez d'utiliser l'API Kraken avec Python
Essayez de travailler avec des données binaires en Python
Utilisation de Python et MeCab avec Azure Databricks
Vérifier l'existence du fichier avec python
Essayez d'utiliser l'appareil photo avec OpenCV de Python
Communication de socket en utilisant le serveur de socket avec python maintenant
Dialogflow (anciennement: API.AI) Essayez d'utiliser le SDK Python #dialogflow
[Python] Récupère le nom de la variable avec str
[Python] Arrondissez avec juste l'opérateur
Afficher Python 3 dans le navigateur avec MAMP
Tweet à l'aide de l'API Twitter en Python
Rechercher le labyrinthe avec l'algorithme python A *