def add_configlet_index(data, user): cfgindex = ConfigletIndex() cfgindex.name = data[NAME] cfgindex.updated_by = user cfgindex.save() cfg = Configlet() cfg.name = data[NAME] cfg.version = 1 cfg.group = data[GROUP] cfg.type = data[CONSTRUCT_TYPE] cfg.updated_by = user cfg.configletindex = cfgindex cfg.save() return cfg
def update_configlet(cfgindex_id, fileobject, cfg_id=0, new_version=None, user=''): cfg = None current_version = get_current_config_version(cfgindex_id) logger.debug("current version " + str(current_version)) cfg = Configlet.objects.get(configletindex_id=cfgindex_id, version=current_version) if cfg_id: logger.debug(str(cfg.id)) logger.debug(str(cfg_id)) if cfg_id != cfg.id: err = "Requested configlet is not latest version(%s)" % ( str(cfg_id)) logger.error(err) raise IgniteException(err) cfg = Configlet.objects.get(pk=cfg_id, configletindex_id=cfgindex_id) file_obj = fileobject[FILE] file_content = file_obj.read() if cfg.path and cfg_id: logger.debug(str(cfg.path)) try: old = hashlib.md5( open(os.path.join(MEDIA_ROOT, str(cfg.path)), 'rb').read()).hexdigest() logger.debug("existed configlet md5= " + old) logger.debug(str(old)) new = hashlib.md5(file_content).hexdigest() logger.debug("User given configlet md5= " + new) change = False params = None logger.debug(str(new)) if old == new: return cfg if cfg.type == SCRIPT: params = parse_file(file_content, PARAM_EXP_SCRIPT, PARAM_IDENTIFIER_SCRIPT) else: params = parse_file(file_content, PARAM_EXP_CONFIGLET, PARAM_IDENTIFIER_CONFIGLET) logger.debug("new parameters " + str(params)) logger.debug("old parameters " + str(cfg.parameters)) if params != cfg.parameters: change = True if change: logger.error(ERR_CHANGE_IN_PARAMS) raise IgniteException(ERR_CHANGE_IN_PARAMS) else: logger.debug("new version boolean is " + new_version) if str(new_version) in ['true', 'True']: logger.debug("User requested new version of configlet") new_cfg = Configlet() new_cfg.name = cfg.name new_cfg.updated_by = user new_cfg.group = cfg.group new_cfg.type = cfg.type new_cfg.parameters = params new_cfg.configletindex = cfg.configletindex new_cfg.save() new_cfg.version = current_version + 1 new_cfg.path.delete(save=False) new_cfg.path = file_obj new_cfg.save() logger.debug("File content: " + str(file_content)) logger.debug("File named %s saved in db" % (file_obj)) return new_cfg elif str(new_version) in ['false', 'False']: cfg.path.delete(save=False) cfg.path = file_obj cfg.updated_by = user cfg.save() logger.debug("File content: " + str(file_content)) logger.debug("File named %s saved in db" % (file_obj)) return cfg else: err = "Unknown version type-" + str(new_version) logger.error(err) raise IgniteException(err) except Exception as e: logger.error(e) raise IgniteException(str(e)) if cfg.path: err = "Update/Newversion is not possible on this request" logger.error(err) raise IgniteException(err) cfg.path.delete(save=False) cfg.path = file_obj logger.debug("adding a new configlet") if cfg.type == SCRIPT: params = parse_file(file_content, PARAM_EXP_SCRIPT, PARAM_IDENTIFIER_SCRIPT) else: params = parse_file(file_content, PARAM_EXP_CONFIGLET, PARAM_IDENTIFIER_CONFIGLET) cfg.parameters = params cfg.updated_by = user cfg.save() logger.debug("File content: " + str(file_content)) logger.debug("File named %s saved in db" % (file_obj)) return cfg
def update_configlet(cfgindex_id, fileobject, cfg_id=0, new_version=None, user=''): cfg = None current_version = get_current_config_version(cfgindex_id) logger.debug("current version " + str(current_version)) cfg = Configlet.objects.get(configletindex_id=cfgindex_id, version=current_version) if cfg_id: logger.debug(str(cfg.id)) logger.debug(str(cfg_id)) if cfg_id != cfg.id: err = "Requested configlet is not latest version(%s)" % (str(cfg_id)) logger.error(err) raise IgniteException(err) cfg = Configlet.objects.get(pk=cfg_id, configletindex_id=cfgindex_id) file_obj = fileobject[FILE] file_content = file_obj.read() if cfg.path and cfg_id: logger.debug(str(cfg.path)) try: old = hashlib.md5(open(os.path.join(MEDIA_ROOT, str(cfg.path)), 'rb').read()).hexdigest() logger.debug("existed configlet md5= " + old) logger.debug(str(old)) new = hashlib.md5(file_content).hexdigest() logger.debug("User given configlet md5= " + new) change = False params = None logger.debug(str(new)) if old == new: return cfg if cfg.type == SCRIPT: params = parse_file(file_content, PARAM_EXP_SCRIPT, PARAM_IDENTIFIER_SCRIPT) else: params = parse_file(file_content, PARAM_EXP_CONFIGLET, PARAM_IDENTIFIER_CONFIGLET) logger.debug("new parameters " + str(params)) logger.debug("old parameters " + str(cfg.parameters)) if params != cfg.parameters: change = True if change: logger.error(ERR_CHANGE_IN_PARAMS) raise IgniteException(ERR_CHANGE_IN_PARAMS) else: logger.debug("new version boolean is " + new_version) if str(new_version) in ['true', 'True']: logger.debug("User requested new version of configlet") new_cfg = Configlet() new_cfg.name = cfg.name new_cfg.updated_by = user new_cfg.group = cfg.group new_cfg.type = cfg.type new_cfg.parameters = params new_cfg.configletindex = cfg.configletindex new_cfg.save() new_cfg.version = current_version + 1 new_cfg.path.delete(save=False) new_cfg.path = file_obj new_cfg.save() logger.debug("File content: "+str(file_content)) logger.debug("File named %s saved in db" % (file_obj)) return new_cfg elif str(new_version) in ['false', 'False']: cfg.path.delete(save=False) cfg.path = file_obj cfg.updated_by = user cfg.save() logger.debug("File content: "+str(file_content)) logger.debug("File named %s saved in db" % (file_obj)) return cfg else: err = "Unknown version type-" + str(new_version) logger.error(err) raise IgniteException(err) except Exception as e: logger.error(e) raise IgniteException(str(e)) if cfg.path: err = "Update/Newversion is not possible on this request" logger.error(err) raise IgniteException(err) cfg.path.delete(save=False) cfg.path = file_obj logger.debug("adding a new configlet") if cfg.type == SCRIPT: params = parse_file(file_content, PARAM_EXP_SCRIPT, PARAM_IDENTIFIER_SCRIPT) else: params = parse_file(file_content, PARAM_EXP_CONFIGLET, PARAM_IDENTIFIER_CONFIGLET) cfg.parameters = params cfg.updated_by = user cfg.save() logger.debug("File content: "+str(file_content)) logger.debug("File named %s saved in db" % (file_obj)) return cfg