Пример #1
0
def newContext(puppetfile, datastore, group='default'):
    '''
    Reads and checks puppetfile, creates the directory in the filesystem and launch puppetfile processing.
    '''
    try:
        token = tokens.newContextToken(datastore)

        # Create context in filesystem
        try:
            files.createContextDir(token)
        except os.error:
            files.deleteContextDir(token)
            raise errors.OperationError("Couldn't create context in the filesystem")

        # Save puppetfile
        files.savePuppetfile(token, puppetfile)

        # Check puppetfile
        aux = puppet.checkPuppetfile(token)
        if not aux==True:
            files.deleteContextDir(token)
            raise errors.OperationError("Syntax error in provided puppetfile: " + aux)

        # Launch build operation
        puppet.buildContext(token)

        # Create context in datastore
        datastorecontext = {'token':token, 'group':group, 'status':'building', 'description':'Under creation', 'images':[]}
        datastore.addContext(token, datastorecontext)

        return datastorecontext

    except errors.ControllerError, e:
        return e.getResponse()
Пример #2
0
def newContext(datastore, puppetfile= None, group='default'):
    '''
    Reads and checks puppetfile, creates the directory in the filesystem and launch puppetfile processing.
    '''
    try:
        token = tokens.newContextToken(datastore)

        # Create context in filesystem
        try:
            files.createContextDir(token)
        except os.error:
            files.deleteContextDir(token)
            raise errors.OperationError("Couldn't create context in the filesystem")

        if not puppetfile == None:
            # Save puppetfile
            files.savePuppetfile(token, puppetfile)

            # Check puppetfile
            aux = puppet.checkPuppetfile(token)
            if not aux==True:
                files.deleteContextDir(token)
                raise errors.OperationError("Syntax error in provided puppetfile: " + aux)

            # Launch build operation
            puppet.buildContext(token)

            # Create context in datastore
            datastorecontext = {'token':token, 'group':group, 'status':'building', 'description':'Under creation', 'images':[]}
            datastore.addContext(token, datastorecontext)
        else:
            pid = os.path.join(settings.FS_BUILDS, token)
            pid = os.path.join(pid, settings.FS_DEF_CONTEXT_PID)
            files.createFile(pid,'')

            contextlog =  os.path.join(settings.FS_BUILDS, token)
            contextlog =  os.path.join(contextlog, settings.FS_DEF_CONTEXT_LOG)
            files.createFile(contextlog,'')

            contextlogE =  os.path.join(settings.FS_BUILDS, token)
            contextlogE =  os.path.join(contextlogE, settings.FS_DEF_CONTEXT_ERR_LOG)
            files.createFile(contextlogE,'')

            datastorecontext = {'token':token, 'group':group, 'status':'finished', 'description':'Build finished without errors', 'images':[]}
            datastore.addContext(token, datastorecontext)
            
        return datastorecontext

    except errors.ControllerError, e:
        return e.getResponse()
Пример #3
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()
Пример #4
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()