K5 Inter-Project Routing – Déploiement entièrement automatisé de l'API de services partagés

2017-01-18

K5 Inter-Project Routing – Déploiement entièrement automatisé de l'API de services partagés

Machine-translated — the English original is authoritative.

Dans les articles précédents, j'ai mentionné une fonctionnalité réseau spécifique à K5 appelée routage inter-projets. K5 étant un cloud public basé sur OpenStack et non un cloud OpenStack privé traditionnel, les propriétaires de contrats (alias administrateurs de domaine OpenStack) n'ont pas, par conception, la permission de créer des réseaux partagés. Cependant, de nombreux propriétaires de contrats constatent souvent le besoin de partager des ressources entre les projets, et c'est ici que le routage inter-projets K5 entre en jeu. Reprenez les articles de blog précédents sur les services partagés – tout cela est rendu possible grâce à cette fonctionnalité.

Note : Nous parlons ici du routage entre les sous-réseaux de projets au sein de la même zone de disponibilité et du même contrat. Les liens inter-zones de disponibilité sont également possibles et ont été discutés dans des articles précédents.

InterProjectBlog.PNG

Afin que les machines virtuelles (VM) situées sur les sous-réseaux du Projet A ci-dessus puissent atteindre les VMs sur LES DEUX sous-réseaux du Projet B, il est nécessaire de créer un lien inter-projets vers CHACUN des sous-réseaux du Projet B. Cela représente donc deux liens inter-projets pour le scénario ci-dessus !

Étapes requises par sous-réseau

Ce fichier contient du texte Unicode caché ou bidirectionnel qui peut être interprété ou compilé différemment de ce qui est affiché ci-dessous. Pour examiner, ouvrez le fichier dans un éditeur qui révèle les caractères Unicode cachés.
En savoir plus sur les caractères Unicode bidirectionnels

Afficher les caractères cachés

def get_scoped_token(adminUser, adminPassword, contract, projectid, region):
"""Résumé – Obtenir un jeton de projet régional étendu à l'aide d'un nom d'utilisateur et d'un mot de passe
Retourne :
Objet : Objet de jeton de projet étendu régionalement
Args :
adminUser (TYPE) : nom d'utilisateur
adminPassword (TYPE) : mot de passe
contract (TYPE) : nom du contrat
projectid (TYPE) : identifiant du projet
region (TYPE) : région
"""
identityURL = 'https://identity.' + region + \
'.cloud.global.fujitsu.com/v3/auth/tokens'
try:
response = requests.post(identityURL,
headers={'Content-Type': 'application/json',
'Accept': 'application/json'},
json={"auth":
{"identity":
{"methods": ["password"], "password":
{"user":
{"domain":
{"name": contract},
"name": adminUser,
"password": adminPassword
}}},
"scope":
{"project":
{"id": projectid
}}}})
return response
except:
return 'Échec de l'étendue du jeton de projet régional'

voir brut
Get_Scoped_Token.py
hébergé avec ❤ par GitHub

Ce fichier contient du texte Unicode caché ou bidirectionnel qui peut être interprété ou compilé différemment de ce qui est affiché ci-dessous. Pour examiner, ouvrez le fichier dans un éditeur qui révèle les caractères Unicode cachés.
En savoir plus sur les caractères Unicode bidirectionnels

Afficher les caractères cachés

def create_port(k5token, name, netid, sg_id, az, region):
portURL = 'https://networking.' + region + \
'.cloud.global.fujitsu.com/v2.0/ports'
try:
response = requests.post(portURL,
headers={
'X-Auth-Token': k5token, 'Content-Type': 'application/json', 'Accept': 'application/json'},
json={"port":
{"network_id": netid,
"name": name,
"admin_state_up": True,
"availability_zone": az,
"security_groups":
[sg_id]}})
return response
except:
return ("\nErreur inattendue :", sys.exc_info())

voir brut
CreatePortonK5Subnet.py
hébergé avec ❤ par GitHub

Ce fichier contient du texte Unicode caché ou bidirectionnel qui peut être interprété ou compilé différemment de ce qui est affiché ci-dessous. Pour examiner, ouvrez le fichier dans un éditeur qui révèle les caractères Unicode cachés.
En savoir plus sur les caractères Unicode bidirectionnels

Afficher les caractères cachés

def get_rescoped_token(k5token, projectid, region):
"""Obtenir un jeton de projet régional – redéfini
Retourne :
STRING : Jeton de projet étendu régionalement
Args :
k5token (TYPE) : jeton régional valide
projectid (TYPE) : identifiant du projet vers lequel étendre
region (TYPE) : région K5
"""
identityURL = 'https://identity.' + region + \
'.cloud.global.fujitsu.com/v3/auth/tokens'
try:
response = requests.post(identityURL,
headers={'Content-Type': 'application/json',
'Accept': 'application/json'},
json={
"auth": {
"identity": {
"methods": [
"token"
],
"token": {
"id": k5token
}
},
"scope": {
"project": {
"id": projectid
}
}
}
})
return response
except:
return 'Échec de la redéfinition du projet régional'

voir brut
ReScope_K5_Token.py
hébergé avec ❤ par GitHub

Ce fichier contient du texte Unicode caché ou bidirectionnel qui peut être interprété ou compilé différemment de ce qui est affiché ci-dessous. Pour examiner, ouvrez le fichier dans un éditeur qui révèle les caractères Unicode cachés.
En savoir plus sur les caractères Unicode bidirectionnels

Afficher les caractères cachés

def inter_project_connection_create(k5token, router, port, region):
routerURL = 'https://networking-ex.' + region + \
'.cloud.global.fujitsu.com/v2.0/routers/' + \
router + '/add_cross_project_router_interface'
try:
response = requests.put(routerURL,
headers={'X-Auth-Token': k5token,
'Content-Type': 'application/json'},
json={"port_id": port})
return response
except:
return ("\nErreur inattendue :", sys.exc_info())

voir brut
AddInterPojectRoute.py
hébergé avec ❤ par GitHub

Mise à jour du routeur

Ce fichier contient du texte Unicode caché ou bidirectionnel qui peut être interprété ou compilé différemment de ce qui est affiché ci-dessous. Pour examiner, ouvrez le fichier dans un éditeur qui révèle les caractères Unicode cachés.
En savoir plus sur les caractères Unicode bidirectionnels

Afficher les caractères cachés

def update_router_routes(k5token, routerid, routes, region):
# ex. routes = [{'destination': '192.168.10.0/24', 'nexthop': u'192.168.100.2'}, {'destination': '192.168.11.0/24', 'nexthop': u'192.168.100.2'}]
try:
routerURL = 'https://networking-ex.' + region + \
'.cloud.global.fujitsu.com/v2.0/routers/' + routerid
response = requests.put(routerURL,
headers={'X-Auth-Token': k5token,
'Content-Type': 'application/json'},
json={"router": {"routes": routes}})
return response
except:
return ("\nErreur inattendue :", sys.exc_info())

voir brut
K5-Update-Router-Routes.py
hébergé avec ❤ par GitHub

Mise à jour alternative du sous-réseau

Ce fichier contient du texte Unicode caché ou bidirectionnel qui peut être interprété ou compilé différemment de ce qui est affiché ci-dessous. Pour examiner, ouvrez le fichier dans un éditeur qui révèle les caractères Unicode cachés.
En savoir plus sur les caractères Unicode bidirectionnels

Afficher les caractères cachés

def add_static_route_to_subnet(k5token, subnetid, routes, region):
# ex. routes = = [{'destination': '192.168.101.0/24', 'nexthop': u'192.168.100.2'},{'destination': '192.168.100.0/24', 'nexthop': u'192.168.100.2'}]
subnetURL = 'https://networking.' + region + \
'.cloud.global.fujitsu.com/v2.0/subnets/' + subnetid
try:
response = requests.put(subnetURL,
headers={'X-Auth-Token': k5token,
'Content-Type': 'application/json'},
json={"subnet": {"host_routes": routes}})
return response
except:
return ("\nErreur inattendue :", sys.exc_info())

voir brut
K5-Subnet-Route-Update.py
hébergé avec ❤ par GitHub

Et c'est tout ! Vous devriez maintenant être en mesure de router entre vos projets.

Où est l'automatisation, me demandez-vous...

Et bien, j'ai rapidement « bidouillé » les deux scripts Python suivants pour une démo client. Le code Python n'est en aucun cas efficace (alias DRY - Don't Repeat Yourself), mais il est adapté à l'objectif de ce tutoriel :

Dépôt : https://github.com/allthingsclowd/K5-InterProject-Demo

K5-InterProject-Demo

Déploiement entièrement automatisé de l'API de services partagés sur Fujitsu K5

Cible – Plateforme Cloud IaaS Fujitsu K5

Auteur : Graham Land
Date : 18/01/17
Twitter : @allthingsclowd
Github : https://github.com/allthingscloud
Blog : https://allthingscloud.eu

Les scripts Python de ce dépôt peuvent être utilisés pour créer le modèle de services partagés ci-dessous auto-magiquement 🙂

image

Étapes :

  1. Copiez tous ces fichiers dans le même répertoire
  2. Modifiez le fichier k5contractsettingsv10.py pour inclure les détails de votre contrat K5
    Avertissement : Assurez-vous d'utiliser deux projets « jetables » au sein de votre contrat et ajoutez leurs noms et identifiants dans le fichier ci-dessus.
    Toutes les ressources dans ces projets seront supprimées, assurez-vous donc de ne pas les partager avec d'autres utilisateurs.
  3. Lancez le script build_multi_project_demo.py et détendez-vous ! Toutes les clés SSH, adresses IP publiques, etc. sont retournées à la console.
  4. Une fois que vous avez fini de jouer avec le routage, vous pouvez utiliser purge_project.py pour tout réinitialiser.

Happy Stacking !

voir brut
MultiProjectAPIDemo.md
hébergé avec ❤ par GitHub

Happy Stacking !

withk5youcan

Originally published on allthingscloud.eu (2017-01-18).

← All posts