Teilen Sie ein benutzerdefiniertes Fujitsu K5-Image mit Mitgliedsprojekten
2016-10-09
Machine-translated — the English original is authoritative.
Das folgende Skript kann verwendet werden, um ein benutzerdefiniertes, hochgeladenes Image vom Standardprojekt an andere Mitgliedsprojekte weiterzugeben.
Voraussetzungen : Das Skript basiert auf einer Einstellungsdatei, k5contractsettings.py, die alle Ihre Vertragsdetails enthalten muss und im selben Verzeichnis platziert werden muss – zum Beispiel:
Diese Datei enthält versteckte oder bidirektionale Unicode-Zeichen, die anders interpretiert oder kompiliert werden können als das, was unten angezeigt wird. Um sie zu überprüfen, öffnen Sie die Datei in einem Editor, der versteckte Unicode-Zeichen anzeigt.
Erfahren Sie mehr über bidirektionale Unicode-Zeichen
| #!/usr/bin/python | |
| adminUser = 'username' | |
| adminPassword = 'password' | |
| contract = 'contract_name' | |
| contractid = 'contract_id' | |
| defaultid = 'default_project_id' | |
| project = 'working_project' | |
| region = 'uk-1' |
view raw
k5contractsettings.py
hosted with ❤ by GitHub
K5 Custom Image Sharing Script
Diese Datei enthält versteckte oder bidirektionale Unicode-Zeichen, die anders interpretiert oder kompiliert werden können als das, was unten angezeigt wird. Um sie zu überprüfen, öffnen Sie die Datei in einem Editor, der versteckte Unicode-Zeichen anzeigt.
Erfahren Sie mehr über bidirektionale Unicode-Zeichen
| #!/usr/bin/python | |
| # Author : Graham Land | |
| # Date: 08/10/2016 | |
| # | |
| # Purpose: Share a custom image from the default project to a member project in K5 | |
| # Command line parameters – | |
| # -i image_id | |
| # -p member_project | |
| # | |
| # Prerequisites: k5contractsettings.py file in the same directory with login details | |
| # | |
| # 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 | |
| # load your K5 contract details from k5contractsettings.py file | |
| from k5contractsettings import * | |
| # get a scoped auth token | |
| 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'] | |
| # get a central identity portal token | |
| 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): | |
| # get a regional domain scoped token to make queries to facilitate conversion of object names to ids | |
| 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): | |
| # get a regional domain scoped token to make queries to facilitate conversion of object names to ids | |
| 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: | |
| # define global variables from the command line parameters | |
| global image_id | |
| global projects | |
| global status | |
| # ensure minimium commandline paramaters have been supplied | |
| if (len(sys.argv)<4): | |
| print("Usage1: %s -i 'image_id' -p 'project_id'" % sys.argv[0]) | |
| sys.exit(2) | |
| # load the command line parameters | |
| myopts, args = getopt.getopt(sys.argv[1:],"i:p:",["imageid=","projects="]) | |
| except getopt.GetoptError: | |
| # if the parameters are incorrect display error message | |
| print("Usage1: %s -i 'image_id' -p 'project_id'" % sys.argv[0]) | |
| sys.exit(2) | |
| ############################### | |
| # o == option | |
| # a == argument passed to the 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]) | |
| # enable sharing from primary project to member project | |
| print "\nSharing image " + image_id + " from default tenant " + defaultid + " with " + projects | |
| result = share_image_with_project(adminUser,adminPassword,defaultid,projects,image_id,contract,region) | |
| print result | |
| print "\nShared image " + image_id + " from default tenant " + defaultid + " with " + projects | |
| # activate sharing within member project to complete process | |
| print "\nAccepting image " + image_id + " from default tenant " + defaultid + " with " + projects | |
| result = accept_image_share_from_default_project(adminUser,adminPassword,defaultid,projects,image_id,contract,region) | |
| print result | |
| print "\nAccepted image " + image_id + " from default tenant " + defaultid + " with " + projects | |
| if __name__ == "__main__": | |
| main() |
view raw
k5ShareImage.py
hosted with ❤ by GitHub
Beispielausgabe des Skripts:
<
p style=”background:#f8f8f8;overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;”>
Sharing image 956a044a-c486-4894-b72c-5e3feb72625b from default tenant eadb88257
3ac40b1b101eac93009a313 with 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
Shared image 956a044a-c486-4894-b72c-5e3feb72625b from default tenant eadb882573
ac40b1b101eac93009a313 with 15f5aa927ec44f1e8525a1e824997231
Accepting image 956a044a-c486-4894-b72c-5e3feb72625b from default tenant eadb882
573ac40b1b101eac93009a313 with 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
Accepted image 956a044a-c486-4894-b72c-5e3feb72625b from default tenant eadb8825
73ac40b1b101eac93009a313 with 15f5aa927ec44f1e8525a1e824997231
Happy Stacking!
Originally published on allthingscloud.eu (2016-10-09).