Compartir una imagen personalizada de Fujitsu K5 con proyectos de miembros

2016-10-09

Compartir una imagen personalizada de Fujitsu K5 con proyectos de miembros

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

Mostrar caracteres ocultos

#!/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

Mostrar caracteres ocultos

#!/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).

← All posts