示例#1
0
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()
示例#2
0
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()
示例#3
0
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()
示例#4
0
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()
示例#5
0
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()
示例#6
0
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()
示例#7
0
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
示例#8
0
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()