def deleteImage(datastore, imageToken): ''' Deletes image and stops the build process. ''' try: # get image image = datastore.getImage(imageToken) if image == None: raise errors.NotFoundError("Image does not exist.") # check if building and stop in case docker.stopBuild(image['context'], image['imageName']) # delete docker image if docker.deleteImage(datastore, imageToken) == False: raise errors.ControllerError("Can't delete docker image.") # remove from filesystem files.deleteImageDir(image['context'], image['imageName']) # remove from datastore datastore.delImage(imageToken) image['status'] = 'deleted' image['description'] = '' return image, 200 except errors.NotFoundError, e: return e.getResponse()
def newImage(datastore, contextReference, imageName, puppetmanifest=None, base=None, dockerfile=None): ''' Saves the files in the filesystem, and launch the build process ''' try: imageName=''.join(ch for ch in imageName if ch.isalnum()) token = tokens.newImageToken(datastore, contextReference, imageName) # Check if context exists and if it is completed contextInfo, statusCode = checkContext(datastore, contextReference) if statusCode == 404: raise errors.OperationError("Context does not exist") if not statusCode == 200: raise errors.OperationError("Error while inspecting context") if not contextInfo['status']=='finished': raise errors.OperationError("Context is not ready") # Create image in datastore datastoreimage = {'token':token, 'context':contextReference, 'imageName':imageName, 'status':'building', 'description':'Under creation', 'tag':datastore.getContext(contextReference)['group']+'/'+imageName.lower()} datastore.addImage(contextReference, token, datastoreimage) # Create image in filesystem and save Dockerfile and Puppetmanifest try: files.createImageDir(contextReference, imageName) if puppetmanifest!=None: if dockerfile: filename=puppetmanifest.filename else: filename = None files.savePuppetManifest(contextReference, imageName, puppetmanifest, filename=filename) if dockerfile!=None: files.saveDockerfile(contextReference, imageName, dockerfile) if base!=None: baseImageName=settings.DK_DEFAULT_BASE_PROVIDER+'/'+base if docker.imageInRegistry(baseImageName) == False: raise errors.OperationError("Base image '"+baseImageName+"' does not exist in private registry") files.createBaseDockerfile(contextReference, imageName, settings.DK_RG_ENDPOINT+'/'+baseImageName) except os.error: files.deleteImageDir(contextReference, imageName) datastore.delImage(token) raise errors.OperationError("Couldn't create image in the filesystem") # Launch build operation docker.buildImage(datastore, contextReference, imageName, token) return datastoreimage except dataStore.DataStoreError, e: aux = errors.ControllerError("Runtime error: "+ e.message) return aux.getResponse()
def newImage(datastore, contextReference, imageName, puppetmanifest=None, base=None, dockerfile=None): ''' Saves the files in the filesystem, and launch the build process ''' try: imageName=''.join(ch for ch in imageName if ch.isalnum()) token = tokens.newImageToken(datastore, contextReference, imageName) # Check if context exists and if it is completed contextInfo, statusCode = checkContext(datastore, contextReference) if statusCode == 404: raise errors.OperationError("Context does not exist") if not statusCode == 200: raise errors.OperationError("Error while inspecting context") if not contextInfo['status']=='finished': raise errors.OperationError("Context is not ready") # Create image in datastore datastoreimage = {'token':token, 'context':contextReference, 'imageName':imageName, 'status':'building', 'description':'Under creation', 'tag':datastore.getContext(contextReference)['group']+'/'+imageName.lower()} datastore.addImage(contextReference, token, datastoreimage) # Create image in filesystem and save Dockerfile and Puppetmanifest try: files.createImageDir(contextReference, imageName) if puppetmanifest!=None: files.savePuppetManifest(contextReference, imageName, puppetmanifest) if dockerfile!=None: files.saveDockerfile(contextReference, imageName, dockerfile) if base!=None: baseImageName=settings.DK_DEFAULT_BASE_PROVIDER+'/'+base if docker.imageInRegistry(baseImageName) == False: raise errors.OperationError("Base image '"+baseImageName+"' does not exist in private registry") files.createBaseDockerfile(contextReference, imageName, settings.DK_RG_ENDPOINT+'/'+baseImageName) except os.error: files.deleteImageDir(contextReference, imageName) datastore.delImage(token) raise errors.OperationError("Couldn't create image in the filesystem") # Launch build operation docker.buildImage(datastore, contextReference, imageName, token) return datastoreimage except dataStore.DataStoreError, e: aux = errors.ControllerError("Runtime error: "+ e.message) return aux.getResponse()