commit a6411ba7ea104ab8dc4552c1274c17bcd8248052 Author: giancarlo Date: Wed Oct 7 09:53:01 2020 +0200 First Release diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4765f1e --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/globalvariables.csv +/sortableelemnts.txt +/sortapp-img.tar.gz +/result.zip diff --git a/.project b/.project new file mode 100644 index 0000000..5bfebbd --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + dockerimageexecutor + + + + + + org.python.pydev.PyDevBuilder + + + + + + org.python.pydev.pythonNature + + diff --git a/.pydevproject b/.pydevproject new file mode 100644 index 0000000..70098b5 --- /dev/null +++ b/.pydevproject @@ -0,0 +1,8 @@ + + +python interpreter +Default + +/${PROJECT_DIR_NAME} + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..3a45744 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,13 @@ +eclipse.preferences.version=1 +encoding//engine/dmonitor.py=utf-8 +encoding//engine/dockerengine.py=utf-8 +encoding//engine/swarmengine.py=utf-8 +encoding//storagehub/storagehubcommand.py=utf-8 +encoding//storagehub/storagehubcommandcreatefolder.py=utf-8 +encoding//storagehub/storagehubcommandcreatetempfolder.py=utf-8 +encoding//storagehub/storagehubcommanditemdelete.py=utf-8 +encoding//storagehub/storagehubcommanditemdownload.py=utf-8 +encoding//storagehub/storagehubcommanditemupload.py=utf-8 +encoding//storagehub/storagehubcommandrootitemid.py=utf-8 +encoding/dockerimageexecutor.py=utf-8 +encoding/issupport.py=utf-8 diff --git a/.settings/org.eclipse.ltk.core.refactoring.prefs b/.settings/org.eclipse.ltk.core.refactoring.prefs new file mode 100644 index 0000000..b196c64 --- /dev/null +++ b/.settings/org.eclipse.ltk.core.refactoring.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false diff --git a/README.md b/README.md new file mode 100644 index 0000000..0b9db81 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +#Docker Image Executor + +This is a simple algorithm that execute image on Docker using a image file or Swarm Cluster using local registry. + +- python3 dockerimageexecutor.py + + +##Example + +- python3 dockerimageexecutor.py "microservices-VirtualBox:443/sortapp" sortapp 548eade8-25cf-4978-9f61-0f0c652900be + diff --git a/__main__.py b/__main__.py new file mode 100644 index 0000000..5ecce1d --- /dev/null +++ b/__main__.py @@ -0,0 +1,4 @@ +print('dockerimageexecutor/__main__.py executed') +#import dockerimageexecutor + + diff --git a/dockerimageexecutor.py b/dockerimageexecutor.py new file mode 100644 index 0000000..28622d2 --- /dev/null +++ b/dockerimageexecutor.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# @author: Giancarlo Panichi +# +# Created on 2020/06/12 +# +import os +import sys + +from issupport import ISSupport +from engine.dockerengine import DockerEngine +from engine.swarmengine import SwarmEngine +from storagehub.storagehubcommanditemdownload import StorageHubCommandItemDownload +from storagehub.storagehubcommandcreatetempfolder import StorageHubCommandCreateTempFolder +from storagehub.storagehubcommanditemdelete import StorageHubCommandItemDelete + + +class DockerImageExecutor: + + def __init__(self): + self.resultFile = "result.zip" + self.globalVariablesFile = "globalvariables.csv" + self.gcubeToken = None + self.storageHubUrl = None + self.softwareImage = sys.argv[1] # Software Image + self.softwareExecuteCommandName = sys.argv[2] # Command to Run + self.fileItemId = sys.argv[3] # Input Data File + self.tempFolderItemId = None # '32c0422f-a777-4452-adea-007347ec4484' + + def main(self): + print(self) + self.retrieveToken() + issup = ISSupport() + self.storageHubUrl = issup.discoverStorageHub(self.gcubeToken) + self.createTempFolder() + # self.executeOnDocker() + self.executeOnSwarm() + + def retrieveToken(self): + print("Retrieve gcubeToken") + if not os.path.isfile(self.globalVariablesFile): + print("File does not exist: " + self.globalVariablesFile) + raise Exception("File does not exist: " + self.globalVariablesFile) + with open(self.globalVariablesFile) as fp: + for line in fp: + if line.find("gcube_token") != -1: + tk = line[14:] + self.gcubeToken = tk.replace('"', '').strip() + print("Found gcube_token") + break + if self.gcubeToken == None: + print('Error gcube_token not found!') + raise Exception('Error gcube_token not found!') + + def createTempFolder(self): + print("Create Temp Folder") + cmdCreateTempFolder = StorageHubCommandCreateTempFolder(self.gcubeToken, self.storageHubUrl) + self.tempFolderItemId = cmdCreateTempFolder.execute() + + def deleteTempFolder(self): + print("Delete Temp Folder") + cmdDeleteTempFolder = StorageHubCommandItemDelete(self.gcubeToken, self.storageHubUrl, self.tempFolderItemId) + cmdDeleteTempFolder.execute() + + def downloadResults(self): + print("Get Results") + cmdItemDownload = StorageHubCommandItemDownload(self.gcubeToken, self.storageHubUrl, + self.tempFolderItemId, self.resultFile) + cmdItemDownload.execute() + self.deleteTempFolder() + + def executeOnDocker(self): + print("Execute On Docker") + dEngine = DockerEngine(self.gcubeToken, self.storageHubUrl, + self.softwareImage, self.softwareExecuteCommandName, self.fileItemId, self.tempFolderItemId) + dEngine.execute() + self.downloadResults() + + def executeOnSwarm(self): + print("Execute On Swarm") + sEngine = SwarmEngine(self.gcubeToken, self.storageHubUrl, + self.softwareImage, self.softwareExecuteCommandName, self.fileItemId, self.tempFolderItemId) + sEngine.execute() + self.downloadResults() + + def __str__(self): + return 'DockerImageExecutor' + + +def main(): + print('docker_image_executor') + dockerImageExecutor = DockerImageExecutor() + dockerImageExecutor.main() + + +main() + diff --git a/dockerimageexecutor.zip b/dockerimageexecutor.zip new file mode 100644 index 0000000..4765224 Binary files /dev/null and b/dockerimageexecutor.zip differ diff --git a/engine/__init__.py b/engine/__init__.py new file mode 100644 index 0000000..b537dea --- /dev/null +++ b/engine/__init__.py @@ -0,0 +1 @@ +print("dockerimageexecutor/engine init") \ No newline at end of file diff --git a/engine/dmonitor.py b/engine/dmonitor.py new file mode 100644 index 0000000..9f0ab14 --- /dev/null +++ b/engine/dmonitor.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# @author: Giancarlo Panichi +# +# Created on 2020/06/12 +# + +from threading import Thread + + +class DMonitor (Thread): + + def __init__(self, name, interval, client): + Thread.__init__(self) + self.name = name + self.interval = interval + self.client = client + self.end = False + self.count = 0 + + def conclude(self): + print("Call End") + self.end = True + + def run(self): + print ("Thread '" + self.name + "' start") + for event in self.client.events(decode=True): + print(event) + if self.end: + break + print ("Thread '" + self.name + "' end") + \ No newline at end of file diff --git a/engine/dockerengine.py b/engine/dockerengine.py new file mode 100644 index 0000000..418a6cf --- /dev/null +++ b/engine/dockerengine.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# @author: Giancarlo Panichi +# +# Created on 2020/06/12 +# +import docker +import json +import gzip + + +class DockerEngine: + + def __init__(self, gcubeToken, storageHubUrl, softwareImage, softwareExecuteCommandName, fileItemId, tempFolderItemId): + self.gcubeToken = gcubeToken + self.storageHubUrl = storageHubUrl + + # Software image for example: "microservices-VirtualBox:443/sortapp-img" + self.softwareImage = softwareImage + # Software Execute Command Name for example: "sortapp" + self.softwareExecuteCommandName = softwareExecuteCommandName + + # Input Data File + self.fileItemId = fileItemId + self.tempFolderItemId = tempFolderItemId + self.dockerImageArchive = "sortapp-img.tar.gz" + + def execute(self): + print("Execute DockerImageEngine") + + print("Create Client") + + # TLS support + # tls_config = docker.tls.TLSConfig( + # client_cert=('/path/to/client-cert.pem', '/path/to/client-key.pem') + # ) + # client = docker.DockerClient(base_url='', tls=tls_config) + + client = docker.DockerClient(base_url='unix://var/run/docker.sock') + print(json.dumps(client.info(), indent=2)) + # print(json.dumps(client.version(), indent=2)) + + print("Add File Image") + with gzip.open(self.dockerImageArchive, "rb") as imageZip: + imagedata = imageZip.read() + sortAppImg = client.images.load(imagedata) + print(sortAppImg) + + imagesList = client.images.list(all=True) + print ("Images found: ") + print(*imagesList, sep="\n") + + print("Create Container") + cmdValue = "{} {} {} {}".format(self.softwareExecuteCommandName, self.gcubeToken, self.fileItemId, self.tempFolderItemId) + print("CommandValue: " + cmdValue) + hostConf = client.api.create_host_config(auto_remove=True); + container = client.api.create_container( + image='sortapp-img:latest', + command=cmdValue, + host_config=hostConf) + + print("Start Container") + client.api.start(container=container.get('Id')) + client.api.wait(container=container.get('Id'), timeout=3600) + print("Container Execution End") + + def __str__(self): + return ('DEngine[storageHubUrl=' + str(self.storageHubUrl) + + ', softwareImage=' + str(self.softwareImage) + + ', softwareExecuteCommandName=' + str(self.softwareExecuteCommandName) + + ', fileItemId=' + str(self.fileItemId) + + ', tempFolderItemId=' + str(self.tempFolderItemId) + ']') diff --git a/engine/swarmengine.py b/engine/swarmengine.py new file mode 100644 index 0000000..75a8cb3 --- /dev/null +++ b/engine/swarmengine.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# @author: Giancarlo Panichi +# +# Created on 2020/06/12 +# +import docker +import json +import time +from docker.types.services import RestartPolicy + + +class SwarmEngine: + + def __init__(self, gcubeToken, storageHubUrl, softwareImage, softwareExecuteCommandName, fileItemId, tempFolderItemId): + self.gcubeToken = gcubeToken + self.storageHubUrl = storageHubUrl + + # Software image for example: "microservices-VirtualBox:443/sortapp" + self.softwareImage = softwareImage + # Software Execute Command Name for example: "sortapp" + self.softwareExecuteCommandName = softwareExecuteCommandName + + # Input Data File + self.fileItemId = fileItemId + self.tempFolderItemId = tempFolderItemId + + + def monitorTask(self, srv): + print("Monitor Task") + + end = False + sId=None + + while not end: + for task in srv.tasks(): + print("Task: " + str(task)) + sId = task['ServiceID'] + if sId and sId == srv.id: + status = task['DesiredState'] + print("Task DesiredState: " + str(status)) + if status == 'shutdown' or status == 'complete': + print("Task End") + srv.remove() + print("Service Removed") + end = True + elif (status == 'failed' or status == 'rejected' + or status == 'orphaned' or status == 'remove'): + print("Error in execute Docker Image on Swarm Node: " + str(status)) + raise Exception("Error in execute Docker Image on Swarm Node: " + str(status)) + else: + time.sleep(2) + else: + continue + if sId==None: + print("Waiting Task load on Service") + time.sleep(2) + + def execute(self): + print("Execute SwarmRegistryEngine") + + print("Create Client") + + # DockerClient + # for example: http://microservices-VirtualBox:2375/ + # + # TLS support + # tls_config = docker.tls.TLSConfig( + # client_cert=('/path/to/client-cert.pem', '/path/to/client-key.pem') + # ) + # client = docker.DockerClient(base_url='', tls=tls_config) + + client = docker.DockerClient(base_url='http://docker-swarm1.int.d4science.net:2376/') + # client = docker.DockerClient(base_url='unix://var/run/docker.sock') + print(json.dumps(client.info(), indent=2)) + + image=client.images.pull(self.softwareImage, tag='latest') + + print("Pulled: "+str(image)) + + print("Services: " + str(client.services.list())) + + cmdValue = "{} {} {} {}".format(self.softwareExecuteCommandName, self.gcubeToken, self.fileItemId, self.tempFolderItemId) + print("CommandValue: " + cmdValue) + + print("Create Service") + + srv = client.services.create(self.softwareImage, command=cmdValue, + restart_policy=RestartPolicy(condition='none', delay=0, max_attempts=0, window=0)) + + print("Service: " + str(srv)) + + print("Service Id: " + str(srv.id)) + + print("Node: " + str(client.nodes.list())) + + self.monitorTask(srv) + + print("Service Execution End") + + def __str__(self): + return ('SwarmRegistryEngine[storageHubUrl=' + str(self.storageHubUrl) + + ', softwareImage=' + str(self.softwareImage) + + ', softwareExecuteCommandName=' + str(self.softwareExecuteCommandName) + + ', fileItemId=' + str(self.fileItemId) + + ', tempFolderItemId=' + str(self.tempFolderItemId) + ']') + diff --git a/issupport.py b/issupport.py new file mode 100644 index 0000000..536453d --- /dev/null +++ b/issupport.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# @author: Giancarlo Panichi +# +# Created on 2018/06/15 +# +import requests +from xml.etree import ElementTree + + +class ISSupport: + + def __init__(self): + # dev + # self.serviceUrl = "https://node10-d-d4s.d4science.org" + # prod + self.serviceUrl = "http://registry.d4science.org" + self.storageHubServiceClass = "DataAccess" + self.storageHubServiceName = "StorageHub" + + def discoverStorageHub(self, gcubeToken): + print("Discover StorageHub") + urlString = self.serviceUrl + "/icproxy/gcube/service/GCoreEndpoint/" + self.storageHubServiceClass + "/" + self.storageHubServiceName + "?gcube-token=" + gcubeToken + r = requests.get(urlString) + print(r.status_code) + print(r.text) + if r.status_code != 200: + print("Error discovering StorageHub: " + r.status_code) + raise Exception("Error retrieving StorageHub url info: " + r.status_code) + else: + root = ElementTree.fromstring(r.text) + print(root) + gcoreEndpoint = root.findall("Result/Resource/Profile/AccessPoint/RunningInstanceInterfaces/Endpoint") + print(gcoreEndpoint) + for child in gcoreEndpoint: + print(child.tag, child.attrib) + if child.attrib["EntryName"] == "org.gcube.data.access.storagehub.StorageHub": + print("Endpoint Found") + print(child.text) + return child.text + + print("Error discovering StorageHub url not found") + raise Exception("Error retrieving StorageHub url not found!") + + def __str__(self): + return 'ISSupport[serviceUrl=' + str(self.serviceUrl) + ']' diff --git a/storagehub/__init__.py b/storagehub/__init__.py new file mode 100644 index 0000000..79e232c --- /dev/null +++ b/storagehub/__init__.py @@ -0,0 +1 @@ +print("sortapp/command init") \ No newline at end of file diff --git a/storagehub/storagehubcommand.py b/storagehub/storagehubcommand.py new file mode 100644 index 0000000..85eb1d4 --- /dev/null +++ b/storagehub/storagehubcommand.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# @author: Giancarlo Panichi +# +# Created on 2018/06/15 +# + + +class StorageHubCommand: + + def execute(self): + print("StorageHubCommand") + + def __str__(self): + return 'StorageHubCommand' + diff --git a/storagehub/storagehubcommandcreatefolder.py b/storagehub/storagehubcommandcreatefolder.py new file mode 100644 index 0000000..186cad2 --- /dev/null +++ b/storagehub/storagehubcommandcreatefolder.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# @author: Giancarlo Panichi +# +# Created on 2018/06/15 +# +import requests + +from .storagehubcommand import StorageHubCommand + + +class StorageHubCommandCreateFolder(StorageHubCommand): + + def __init__(self, gcubeToken, storageHubUrl, folderItemId, folderName, folderDescription, folderHidden="false"): + self.gcubeToken = gcubeToken + self.storageHubUrl = storageHubUrl + self.folderItemId = folderItemId + self.folderName = folderName + self.folderDescription = folderDescription + self.folderHidden = folderHidden + + def execute(self): + print("Execute StorageHubCommandCreateFolder") + print(self.storageHubUrl + "/items/" + self.folderItemId + "/create/FOLDER?"); + + folderdata = {'name': self.folderName, 'description': self.folderDescription, 'hidden': self.folderHidden} + print(str(folderdata)) + + urlString = self.storageHubUrl + "/items/" + self.folderItemId + "/create/FOLDER?gcube-token=" + self.gcubeToken + r = requests.post(urlString, data=folderdata) + print(r) + print(r.status_code) + if r.status_code != 200: + print("Error in execute StorageHubCommandCreateFolder: " + r.status_code) + raise Exception("Error in execute StorageHubCommandCreateFolder: " + r.status_code) + print('Created Folder ItemId: ' + str(r.text)) + return r.text + + def __str__(self): + return ('StorageHubCommandItemUpload[ storageHubUrl=' + str(self.storageHubUrl) + + ' folderItemId=' + str(self.folderItemId) + + ', folderName=' + str(self.folderName) + + ', folderDescription=' + str(self.folderDescription) + + ', folderHidden=' + str(self.folderHidden) + ']') diff --git a/storagehub/storagehubcommandcreatetempfolder.py b/storagehub/storagehubcommandcreatetempfolder.py new file mode 100644 index 0000000..8c8ca52 --- /dev/null +++ b/storagehub/storagehubcommandcreatetempfolder.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# @author: Giancarlo Panichi +# +# Created on 2018/06/15 +# +import uuid + +from .storagehubcommand import StorageHubCommand +from .storagehubcommandrootitemid import StorageHubCommandRootItemId +from .storagehubcommandcreatefolder import StorageHubCommandCreateFolder + + +class StorageHubCommandCreateTempFolder(StorageHubCommand): + + def __init__(self, gcubeToken, storageHubUrl): + self.gcubeToken = gcubeToken + self.storageHubUrl = storageHubUrl + self.tempFolderName = "DataMinerResult" + self.tempFolderDescription = "DataMiner temporary result folder" + self.tempFolderHidden = "false" + + def execute(self): + print("Execute StorageHubCommandCreateTempFolder") + + print("Retrieve RootFolder") + cmdRootItemId = StorageHubCommandRootItemId(self.gcubeToken, self.storageHubUrl) + rootFolderItemId = cmdRootItemId.execute() + + print("Create Temp Folder Name") + tempFolderPostfix = uuid.uuid4().hex + self.tempFolderName = self.tempFolderName + tempFolderPostfix + print("Temp Folder Name: " + str(self.tempFolderName)) + + cmdCreateFolder = StorageHubCommandCreateFolder(self.gcubeToken, self.storageHubUrl, rootFolderItemId, + self.tempFolderName, self.tempFolderDescription, self.tempFolderHidden) + tempFolderItemId = cmdCreateFolder.execute() + + print("Temp Folder Item Id: " + str(tempFolderItemId)) + + return tempFolderItemId + + def __str__(self): + return 'StorageHubCommandCreateTempFolder[storageHubUrl=' + str(self.storageHubUrl) + ']' diff --git a/storagehub/storagehubcommanditemdelete.py b/storagehub/storagehubcommanditemdelete.py new file mode 100644 index 0000000..5104163 --- /dev/null +++ b/storagehub/storagehubcommanditemdelete.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# @author: Giancarlo Panichi +# +# Created on 2018/06/15 +# +import requests +from .storagehubcommand import StorageHubCommand + + +class StorageHubCommandItemDelete(StorageHubCommand): + + def __init__(self, gcubeToken, storageHubUrl, itemId, permanently="false"): + self.gcubeToken = gcubeToken + self.storageHubUrl = storageHubUrl + self.itemId = itemId + self.permanently = permanently + + def execute(self): + print("Execute StorageHubCommandItemDelete") + print(self.storageHubUrl + "/items/" + self.itemId + "?force=" + self.permanently); + + urlString = self.storageHubUrl + "/items/" + self.itemId + "?force=" + self.permanently + "&gcube-token=" + self.gcubeToken + r = requests.delete(urlString) + print(r.status_code) + if r.status_code != 200: + print("Error in execute StorageHubCommandItemDelete: " + r.status_code) + raise Exception("Error in execute StorageHubCommandItemDelete: " + r.status_code) + + def __str__(self): + return ('StorageHubCommandItemDelete[storageHubUrl=' + str(self.storageHubUrl) + + ', itemId=' + self.itemId + + ', permanently=' + self.permanently + ']') diff --git a/storagehub/storagehubcommanditemdownload.py b/storagehub/storagehubcommanditemdownload.py new file mode 100644 index 0000000..d4ea1fe --- /dev/null +++ b/storagehub/storagehubcommanditemdownload.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# @author: Giancarlo Panichi +# +# Created on 2018/06/15 +# +import requests +from .storagehubcommand import StorageHubCommand + + +class StorageHubCommandItemDownload(StorageHubCommand): + + def __init__(self, gcubeToken, storageHubUrl, itemId, destinationFile): + self.gcubeToken = gcubeToken + self.storageHubUrl = storageHubUrl + self.itemId = itemId + self.destinationFile = destinationFile + + def execute(self): + print("Execute StorageHubCommandItemDownload") + print(self.storageHubUrl + "/items/" + self.itemId + "/download?"); + + urlString = self.storageHubUrl + "/items/" + self.itemId + "/download?gcube-token=" + self.gcubeToken + r = requests.get(urlString) + print(r.status_code) + if r.status_code != 200: + print("Error in execute StorageHubCommandItemDownload: " + r.status_code) + raise Exception("Error in execute StorageHubCommandItemDownload: " + r.status_code) + with open(self.destinationFile, 'wb') as file: + file.write(r.content) + + def __str__(self): + return ('StorageHubCommandItemDownload[storageHubUrl=' + str(self.storageHubUrl) + + ', itemId=' + self.itemId + + ', destinationFile=' + self.destinationFile + ']') diff --git a/storagehub/storagehubcommanditemupload.py b/storagehub/storagehubcommanditemupload.py new file mode 100644 index 0000000..532e7dc --- /dev/null +++ b/storagehub/storagehubcommanditemupload.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# @author: Giancarlo Panichi +# +# Created on 2018/06/15 +# +import requests +from .storagehubcommand import StorageHubCommand + + +class StorageHubCommandItemUpload(StorageHubCommand): + + def __init__(self, gcubeToken, storageHubUrl, folderItemId, file, filename, fileDescription): + self.gcubeToken = gcubeToken + self.storageHubUrl = storageHubUrl + self.folderItemId=folderItemId + self.file=file + self.filename=filename + self.fileDescription=fileDescription + + + def execute(self): + print("Execute StorageHubCommandItemUpload") + print(self.storageHubUrl + "/items/" + self.folderItemId + "/create/FILE?"); + + filedata = {'name': self.filename, 'description': self.fileDescription, "file": ("file", open(self.file, "rb"))} + + urlString = self.storageHubUrl + "/items/" + self.folderItemId + "/create/FILE?gcube-token=" + self.gcubeToken + r = requests.post(urlString, files=filedata) + print(r) + print(r.status_code) + if r.status_code != 200: + print("Error in execute StorageHubCommandItemUpload: " + r.status_code) + raise Exception("Error in execute StorageHubCommandItemUpload: " + r.status_code) + print(str(r.text)) + return r.text + + + def __str__(self): + return ('StorageHubCommandItemUpload[itemId='+self.folderItemId+ + ', storageHubUrl=' + str(self.storageHubUrl)+ + ', folderItemId=' + str(self.folderItemId) + + ', filename=' + str(self.filename)+ + ', fileDescription=' + str(self.fileDescription) + ']') diff --git a/storagehub/storagehubcommandrootitemid.py b/storagehub/storagehubcommandrootitemid.py new file mode 100644 index 0000000..6f587aa --- /dev/null +++ b/storagehub/storagehubcommandrootitemid.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# @author: Giancarlo Panichi +# +# Created on 2018/06/15 +# +import requests +import json +from .storagehubcommand import StorageHubCommand + + +class StorageHubCommandRootItemId(StorageHubCommand): + + def __init__(self, gcubeToken, storageHubUrl): + self.gcubeToken = gcubeToken + self.storageHubUrl = storageHubUrl + + def execute(self): + print("Execute StorageHubCommandRootItemId") + print(self.storageHubUrl + "/?exclude=hl:accounting"); + urlString = self.storageHubUrl + "/?exclude=hl:accounting&gcube-token=" + self.gcubeToken + r = requests.get(urlString) + print(r.status_code) + if r.status_code != 200: + print("Error in execute StorageHubCommandRootItemId: " + r.status_code) + raise Exception("Error in execute StorageHubCommandRootItemId: " + r.status_code) + + rootItemJ = json.loads(r.text) + rootId = rootItemJ['item']['id'] + print('RootItemId:' + str(rootId)) + return rootId + + def __str__(self): + return 'StorageHubCommandRootItemId[storageHubUrl=' + str(self.storageHubUrl) + ']'