Compartir una imagen personalizada de Fujitsu K5 con proyectos de miembros
2016-10-09
Machine-translated — the English original is authoritative.
El siguiente script se puede utilizar para compartir una imagen personalizada cargada desde el proyecto predeterminado a otros proyectos de miembros.
Requisitos previos : El script depende de un archivo de configuración, k5contractsettings.py, que debe contener todos los detalles de su contrato y colocarse en el mismo directorio, por ejemplo:
Este archivo contiene texto Unicode oculto o bidireccional que puede interpretarse o compilarse de manera diferente a lo que aparece a continuación. Para revisarlo, abra el archivo en un editor que revele caracteres Unicode ocultos.
Más información sobre caracteres Unicode bidireccionales
| #!/usr/bin/python | |
| adminUser = 'username' | |
| adminPassword = 'password' | |
| contract = 'contract_name' | |
| contractid = 'contract_id' | |
| defaultid = 'default_project_id' | |
| project = 'working_project' | |
| region = 'uk-1' |
ver original
k5contractsettings.py
alojado con ❤ por GitHub
Script de compartición de imágenes personalizadas de K5
Este archivo contiene texto Unicode oculto o bidireccional que puede interpretarse o compilarse de manera diferente a lo que aparece a continuación. Para revisarlo, abra el archivo en un editor que revele caracteres Unicode ocultos.
Más información sobre caracteres Unicode bidireccionales
| #!/usr/bin/python | |
| # Autor: Graham Land | |
| # Fecha: 08/10/2016 | |
| # | |
| # Propósito: Compartir una imagen personalizada desde el proyecto predeterminado a un proyecto de miembro en K5 | |
| # Parámetros de la línea de comandos – | |
| # -i image_id | |
| # -p member_project | |
| # | |
| # Requisitos previos: archivo k5contractsettings.py en el mismo directorio con los detalles de inicio de sesión | |
| # | |
| # adminUser = 'username' | |
| # adminPassword = 'password' | |
| # contract = 'contract_name' | |
| # contractid = 'contract_id' | |
| # defaultid = 'default_project_id' | |
| # project = 'working_project' | |
| # region = 'uk-1' | |
| # | |
| # blog: https://allthingscloud.eu | |
| # twitter: @allthingsclowd | |
| import sys | |
| import os | |
| import requests | |
| import uuid | |
| import base64 | |
| import time | |
| import getopt | |
| import ntpath | |
| # cargar los detalles de su contrato K5 desde el archivo k5contractsettings.py | |
| from k5contractsettings import * | |
| # obtener un token de autenticación con ámbito | |
| def get_scoped_token(uname,upassword,uproject,udomain,uregion): | |
| identityURL = 'https://identity.' + uregion + '.cloud.global.fujitsu.com/v3/auth/tokens' | |
| response = requests.post(identityURL, | |
| headers={'Content-Type': 'application/json','Accept':'application/json'}, | |
| json={"auth": | |
| {"identity": | |
| {"methods":["password"],"password": | |
| {"user": | |
| {"domain": | |
| {"name":udomain}, | |
| "name":uname, | |
| "password": upassword | |
| }}}, | |
| "scope": | |
| { "project": | |
| {"id":uproject | |
| }}}}) | |
| return response.headers['X-Subject-Token'] | |
| def get_unscoped_token(uname,upassword,udomain,uregion): | |
| identityURL = 'https://identity.' + uregion + '.cloud.global.fujitsu.com/v3/auth/tokens' | |
| response = requests.post(identityURL, | |
| headers={'Content-Type': 'application/json','Accept':'application/json'}, | |
| json={"auth": | |
| {"identity": | |
| {"methods":["password"],"password": | |
| {"user": | |
| {"domain": | |
| {"name":udomain}, | |
| "name":uname, | |
| "password": upassword | |
| }}}}}) | |
| return response.headers['X-Subject-Token'] | |
| # obtener un token del portal de identidad central | |
| def get_unscoped_idtoken(uname,upassword,udomain): | |
| response = requests.post('https://auth-api.jp-east-1.paas.cloud.global.fujitsu.com/API/paas/auth/token', | |
| headers={'Content-Type': 'application/json'}, | |
| json={"auth": | |
| {"identity": | |
| {"password": | |
| {"user": | |
| {"contract_number":udomain, | |
| "name":uname, | |
| "password": upassword | |
| }}}}}) | |
| return response.headers['X-Access-Token'] | |
| def share_image_with_project(adminUser,adminPassword,defaultid,projectid,image_id,contract,region): | |
| # obtener un token con ámbito de dominio regional para realizar consultas que faciliten la conversión de nombres de objetos a identificadores | |
| scoped_k5token = get_scoped_token(adminUser,adminPassword,defaultid,contract,region) | |
| imageURL = 'https://image.' + region + '.cloud.global.fujitsu.com/v2/images/' + image_id + '/members' | |
| response = requests.post(imageURL, | |
| headers={'X-Auth-Token':scoped_k5token,'Content-Type': 'application/json','Accept':'application/json'}, | |
| json={"member": projectid}) | |
| print response.json() | |
| return response.json()['status'] | |
| def accept_image_share_from_default_project(adminUser,adminPassword,defaultid,projectid,image_id,contract,region): | |
| # obtener un token con ámbito de dominio regional para realizar consultas que faciliten la conversión de nombres de objetos a identificadores | |
| scoped_k5token = get_scoped_token(adminUser,adminPassword,projectid,contract,region) | |
| imageURL = 'https://image.' + region + '.cloud.global.fujitsu.com/v2/images/' + image_id + '/members/' + projectid | |
| response = requests.put(imageURL, | |
| headers={'X-Auth-Token':scoped_k5token,'Content-Type': 'application/json','Accept':'application/json'}, | |
| json={"status": "accepted"}) | |
| print response.json() | |
| return response.json()['status'] | |
| def main(): | |
| try: | |
| # definir variables globales a partir de los parámetros de la línea de comandos | |
| global image_id | |
| global projects | |
| global status | |
| # asegurarse de que se hayan proporcionado los parámetros mínimos de la línea de comandos | |
| if (len(sys.argv)<4): | |
| print("Uso1: %s -i 'image_id' -p 'project_id'" % sys.argv[0]) | |
| sys.exit(2) | |
| # cargar los parámetros de la línea de comandos | |
| myopts, args = getopt.getopt(sys.argv[1:],"i:p:",["imageid=","projects="]) | |
| except getopt.GetoptError: | |
| # si los parámetros son incorrectos, mostrar mensaje de error | |
| print("Uso1: %s -i 'image_id' -p 'project_id'" % sys.argv[0]) | |
| sys.exit(2) | |
| ############################### | |
| # o == opción | |
| # a == argumento pasado a la o | |
| ############################### | |
| for o, a in myopts: | |
| if o in ('-i','–imageid'): | |
| image_id=a | |
| elif o in ('-p','–projects'): | |
| projects=a | |
| else: | |
| print("Uso1: %s -i 'image_id' -p 'project_id'" % sys.argv[0]) | |
| # habilitar la compartición desde el proyecto principal al proyecto de miembro | |
| print "\nCompartiendo imagen " + image_id + " del inquilino predeterminado " + defaultid + " con " + projects | |
| result = share_image_with_project(adminUser,adminPassword,defaultid,projects,image_id,contract,region) | |
| print result | |
| print "\nImagen compartida " + image_id + " del inquilino predeterminado " + defaultid + " con " + projects | |
| # activar la compartición dentro del proyecto de miembro para completar el proceso | |
| print "\nAceptando imagen " + image_id + " del inquilino predeterminado " + defaultid + " con " + projects | |
| result = accept_image_share_from_default_project(adminUser,adminPassword,defaultid,projects,image_id,contract,region) | |
| print result | |
| print "\nImagen aceptada " + image_id + " del inquilino predeterminado " + defaultid + " con " + projects | |
| if __name__ == "__main__": | |
| main() |
ver original
k5ShareImage.py
alojado con ❤ por GitHub
Salida de ejemplo del script:
<
p style=”background:#f8f8f8;overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;”>
Compartiendo imagen 956a044a-c486-4894-b72c-5e3feb72625b del inquilino predeterminado eadb88257
3ac40b1b101eac93009a313 con 15f5aa927ec44f1e8525a1e824997231
{u'status': u'pending', u'created_at': u'2016-10-08T19:50:13Z', u'updated_at': u
'2016-10-08T19:50:13Z', u'image_id': u'956a044a-c486-4894-b72c-5e3feb72625b', u'
member_id': u'15f5aa927ec44f1e8525a1e824997231', u'schema': u'/v2/schemas/member
'}
pending
Imagen compartida 956a044a-c486-4894-b72c-5e3feb72625b del inquilino predeterminado eadb882573
ac40b1b101eac93009a313 con 15f5aa927ec44f1e8525a1e824997231
Aceptando imagen 956a044a-c486-4894-b72c-5e3feb72625b del inquilino predeterminado eadb882
573ac40b1b101eac93009a313 con 15f5aa927ec44f1e8525a1e824997231
{u'status': u'accepted', u'created_at': u'2016-10-08T19:50:13Z', u'updated_at':
u'2016-10-08T19:50:14Z', u'image_id': u'956a044a-c486-4894-b72c-5e3feb72625b', u
'member_id': u'15f5aa927ec44f1e8525a1e824997231', u'schema': u'/v2/schemas/membe
r'}
accepted
Imagen aceptada 956a044a-c486-4894-b72c-5e3feb72625b del inquilino predeterminado eadb8825
73ac40b1b101eac93009a313 con 15f5aa927ec44f1e8525a1e824997231
¡Feliz apilamiento!
Originally published on allthingscloud.eu (2016-10-09).