Condividere un'immagine personalizzata Fujitsu K5 con i progetti dei membri

2016-10-09

Condividere un'immagine personalizzata Fujitsu K5 con i progetti dei membri

Machine-translated — the English original is authoritative.

Lo script seguente può essere utilizzato per condividere un'immagine personalizzata caricata dal progetto predefinito con altri progetti dei membri.

Prerequisiti : Lo script si basa su un file di impostazioni, k5contractsettings.py, che deve contenere tutti i dettagli del contratto ed essere posizionato nella stessa directory – ad esempio:

Questo file contiene caratteri Unicode nascosti o bidirezionali che potrebbero essere interpretati o compilati in modo diverso rispetto a quanto appare di seguito. Per esaminarli, apri il file in un editor che riveli i caratteri Unicode nascosti.
Maggiori informazioni sui caratteri Unicode bidirezionali

Mostra caratteri nascosti

#!/usr/bin/python
adminUser = 'username'
adminPassword = 'password'
contract = 'contract_name'
contractid = 'contract_id'
defaultid = 'default_project_id'
project = 'working_project'
region = 'uk-1'

visualizza raw
k5contractsettings.py
ospitato con ❤ da GitHub

Script di condivisione immagine personalizzata K5

Questo file contiene caratteri Unicode nascosti o bidirezionali che potrebbero essere interpretati o compilati in modo diverso rispetto a quanto appare di seguito. Per esaminarli, apri il file in un editor che riveli i caratteri Unicode nascosti.
Maggiori informazioni sui caratteri Unicode bidirezionali

Mostra caratteri nascosti

#!/usr/bin/python
# Autore : Graham Land
# Data: 08/10/2016
#
# Scopo: Condividere un'immagine personalizzata dal progetto predefinito a un progetto membro in K5
# Parametri della riga di comando –
# -i image_id
# -p member_project
#
# Prerequisiti: file k5contractsettings.py nella stessa directory con i dettagli di accesso
#
# 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
# carica i dettagli del contratto K5 dal file k5contractsettings.py
from k5contractsettings import *
# ottieni un token di autenticazione scoped
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']
# ottieni un token del portale di identità centrale
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):
# ottieni un token scoped del dominio regionale per eseguire query che facilitino la conversione dei nomi degli oggetti in ID
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):
# ottieni un token scoped del dominio regionale per eseguire query che facilitino la conversione dei nomi degli oggetti in ID
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:
# definisci le variabili globali dai parametri della riga di comando
global image_id
global projects
global status
# assicurati che siano stati forniti i parametri minimi della riga di comando
if (len(sys.argv)<4):
print("Usage1: %s -i 'image_id' -p 'project_id'" % sys.argv[0])
sys.exit(2)
# carica i parametri della riga di comando
myopts, args = getopt.getopt(sys.argv[1:],"i:p:",["imageid=","projects="])
except getopt.GetoptError:
# se i parametri non sono corretti, visualizza il messaggio di errore
print("Usage1: %s -i 'image_id' -p 'project_id'" % sys.argv[0])
sys.exit(2)
###############################
# o == opzione
# a == argomento passato all'opzione o
###############################
for o, a in myopts:
if o in ('-i','–imageid'):
image_id=a
elif o in ('-p','–projects'):
projects=a
else:
print("Usage1: %s -i 'image_id' -p 'project_id'" % sys.argv[0])
# abilita la condivisione dal progetto principale al progetto membro
print "\nCondivisione immagine " + image_id + " dal tenant predefinito " + defaultid + " con " + projects
result = share_image_with_project(adminUser,adminPassword,defaultid,projects,image_id,contract,region)
print result
print "\nImmagine condivisa " + image_id + " dal tenant predefinito " + defaultid + " con " + projects
# attiva la condivisione all'interno del progetto membro per completare il processo
print "\nAccettazione immagine " + image_id + " dal tenant predefinito " + defaultid + " con " + projects
result = accept_image_share_from_default_project(adminUser,adminPassword,defaultid,projects,image_id,contract,region)
print result
print "\nImmagine accettata " + image_id + " dal tenant predefinito " + defaultid + " con " + projects
if __name__ == "__main__":
main()

visualizza raw
k5ShareImage.py
ospitato con ❤ da GitHub

Output di esempio dello script:

<

p style=”background:#f8f8f8;overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;”>

Condivisione immagine 956a044a-c486-4894-b72c-5e3feb72625b dal tenant predefinito 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

Immagine condivisa 956a044a-c486-4894-b72c-5e3feb72625b dal tenant predefinito eadb882573
ac40b1b101eac93009a313 con 15f5aa927ec44f1e8525a1e824997231

Accettazione immagine 956a044a-c486-4894-b72c-5e3feb72625b dal tenant predefinito 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

Immagine accettata 956a044a-c486-4894-b72c-5e3feb72625b dal tenant predefinito eadb8825
73ac40b1b101eac93009a313 con 15f5aa927ec44f1e8525a1e824997231

Happy Stacking!

Originally published on allthingscloud.eu (2016-10-09).

← All posts