Condividere un'immagine personalizzata Fujitsu K5 con i progetti dei membri
2016-10-09
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
| #!/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
| #!/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).