def deleteBase(datastore, name): ''' Delete a base image ''' try: # get base base = datastore.getBase(name) if base == None: raise errors.NotFoundError("Base does not exist.") # check if building and stop in case docker.stopBaseBuild(name) # delete docker image if docker.deleteBaseImage(datastore, name) == False: raise errors.ControllerError("Can't delete docker base image.") # remove from filesystem files.deleteBaseDir(name) # remove from datastore datastore.delBase(name) base['status'] = 'deleted' base['description'] = '' return base, 200 except errors.NotFoundError, e: return e.getResponse()
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 deleteCluster(datastore, token): ''' Deletes the cluster and all reference with it. ''' try: # Retrieve cluster information in datastore cluster = datastore.getCluster(token) if cluster == None: raise errors.NotFoundError("Cluster does not exist.") # stop cluster (depends on the type of cluster) if cluster['type'] is 'simple-preprovisioned': pass else: raise errors.ControllerError( "Don't know how to remove a cluster of this type (" + cluster['type'] + ").") # delete folder files.deleteClusterDir(token) # delete from datastore datastore.delCluster(token) # fake cluster just to return a response cluster = {} cluster['status'] = 'deleted' cluster[ 'description'] = 'Cluster has been removed and will not be accesible anymore.' return cluster except errors.NotFoundError, e: return e.getResponse()
def checkImage(datastore, imageToken, detail=False): ''' Checks if the image exists, checks if it is under construction and in case it has finished, checks if it was succefully or not. ''' try: # get image image = datastore.getImage(imageToken) if image == None: raise errors.NotFoundError("Image does not exist.") # Check previous stored status if image['status'] == 'building': if not docker.isDockerBuildRunning(image['context'], image['imageName']): bErrors = docker.getBuildErrors(image['context'], image['imageName']) if bErrors == None: # finished and no errors # update datastore image['status'] = 'finished' image['description'] = 'Build finished without errors' datastore.updateImage(imageToken, image) else: # finished but with errors # update datastore image['status'] = 'error' image['description'] = 'Build finished unsuccefully.' datastore.updateImage(imageToken, image) else: pass elif image['status'] == 'finished': pass else: pass if detail: log = docker.getBuildLog(image['context'], image['imageName']) errLog = docker.getBuildErrors(image['context'], image['imageName']) image['log'] = '' if log == None else log image['error_log'] = '' if errLog == None else errLog return image, 200 except errors.NotFoundError, e: return e.getResponse()
def checkContext(datastore, token, detail=False): ''' Checks if the context exists, checks if it is under construction and in case it has finished, checks if it was succefully or not. ''' try: # retrieve context information in datastore context = datastore.getContext(token) if context == None: raise errors.NotFoundError("Context does not exist.") # Check previous stored status if context['status'] == 'building': if not puppet.isBuildingContextRunning(token): bErrors = puppet.getBuildingErrors(token) if bErrors == None: # finished and no errors # update datastore context['status'] = 'finished' context['description'] = 'Build finished without errors' datastore.updateContext(token, context) else: # finished but with errors # update datastore context['status'] = 'error' context['description'] = 'Build finished unsuccefully.' datastore.updateContext(token, context) else: pass elif context['status'] == 'finished': pass else: pass if detail: log = puppet.getBuildingLog(token) errLog = puppet.getBuildingErrors(token) context['log'] = '' if log == None else log context['error_log'] = '' if errLog == None else errLog return context, 200 except errors.NotFoundError, e: return e.getResponse()
def checkBase(datastore, name, detail=False): ''' Check the status of a base image ''' try: # get base base = datastore.getBase(name) if base == None: raise errors.NotFoundError("Base does not exist.") # Check previous stored status if base['status'] == 'building': if not docker.isBaseBuildRunning(name): bErrors = docker.getBaseBuildErrors(name) if bErrors == None: # finished and no errors # update datastore base['status'] = 'finished' base['description'] = 'Build finished without errors' datastore.updateBase(name, base) else: # finished but with errors # update datastore base['status'] = 'error' base['description'] = 'Build finished unsuccefully.' datastore.updateBase(name, base) else: pass elif base['status'] == 'finished': pass else: pass if detail: log = docker.getBaseBuildLog(name) errLog = docker.getBaseBuildErrors(name) base['log'] = '' if log == None else log base['error_log'] = '' if errLog == None else errLog return base, 200 except errors.NotFoundError, e: return e.getResponse()
def checkCluster(datastore, token, detail=False): ''' Retrieve information from the cluster. ''' try: status = 200 # Retrieve cluster information in datastore cluster = datastore.getCluster(token) if cluster == None: raise errors.NotFoundError("Cluster does not exist.") # Ask docker daemons clusterStatus = 'ready' for node in cluster['nodes']: info = None try: info = __obtainDockerHostInfo__(node['endpoint']) if info['Driver'] is not None: node['status'] = 'ready' else: node['status'] = 'error' clusterStatus = 'error' cluster[ 'description'] = 'Unexpected response from node \'' + node[ 'endpoint'] + '\'.' except Exception, e: node['status'] = 'error' clusterStatus = 'error' cluster['description'] = 'Cannot connect with node \'' + node[ 'endpoint'] + '\'. Maybe it is down.' # update datastore datastore.updateCluster(token, cluster) # details if detail: cluster['detail'] = info cluster['status'] = clusterStatus return cluster, 200
def deleteContext(datastore, token): ''' Stops the building process of a context (if running) and deletes the folder in the filesystem and the entry in the datastore. ''' try: # retrieve context information in datastore context = datastore.getContext(token) if context == None: raise errors.NotFoundError("Token does not exist.") # stop process if running puppet.stopBuildingContext(token) # delete folder files.deleteContextDir(token) # delete from datastore datastore.delContext(token) # fake context just to return a response context = {} context['status']='deleted' context['description']='Context has been removed and will not be accesible anymore.' return context except errors.NotFoundError, e: return e.getResponse()