Пример #1
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()
Пример #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 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()
Пример #4
0
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()