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()
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()
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()