def repr_for_yaml(self, what=None): """ Create representation of self suitable for printing as yaml. parameter 'what' is a list of identifiers to represent. If 'what' is None (the default) create representation of everything. InstlInstanceBase object is represented as two yaml documents: one for define (tagged !define), one for the index (tagged !index). """ retVal = list() if what is None: # None is all retVal.append(augmentedYaml.YamlDumpDocWrap(var_list, '!define', "Definitions", explicit_start=True, sort_mappings=True)) retVal.append(augmentedYaml.YamlDumpDocWrap(self.install_definitions_index, '!index', "Installation index", explicit_start=True, sort_mappings=True)) else: defines = list() indexes = list() unknowns = list() for identifier in what: if identifier in var_list: defines.append(var_list.repr_for_yaml(identifier)) elif identifier in self.install_definitions_index: indexes.append({identifier: self.install_definitions_index[identifier].repr_for_yaml()}) else: unknowns.append(augmentedYaml.YamlDumpWrap(value="UNKNOWN VARIABLE", comment=identifier+" is not in variable list")) if defines: retVal.append(augmentedYaml.YamlDumpDocWrap(defines, '!define', "Definitions", explicit_start=True, sort_mappings=True)) if indexes: retVal.append(augmentedYaml.YamlDumpDocWrap(indexes, '!index', "Installation index", explicit_start=True, sort_mappings=True)) if unknowns: retVal.append(augmentedYaml.YamlDumpDocWrap(unknowns, '!unknowns', "Installation index", explicit_start=True, sort_mappings=True)) return retVal
def do_create_repo_rev_file(self): if "REPO_REV_FILE_VARS" not in var_list: raise ValueError("REPO_REV_FILE_VARS must be defined") repo_rev_vars = var_list.resolve_to_list("$(REPO_REV_FILE_VARS)") var_list.set_var("REPO_REV").append("$(TARGET_REPO_REV)") # override the repo rev from the config file dangerous_intersection = set(repo_rev_vars).intersection(set(("AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY", "PRIVATE_KEY", "PRIVATE_KEY_FILE"))) if dangerous_intersection: print("found", str(dangerous_intersection), "in REPO_REV_FILE_VARS, aborting") raise ValueError("file REPO_REV_FILE_VARS "+str(dangerous_intersection)+" and so is forbidden to upload") info_map_file = var_list.resolve("$(ROOT_LINKS_FOLDER_REPO)/$(TARGET_REPO_REV)/instl/info_map.txt") info_map_sigs = self.create_sig_for_file(info_map_file) var_list.set_var("INFO_MAP_SIG").append(info_map_sigs["SHA-512_rsa_sig"]) var_list.set_var("INFO_MAP_CHECKSUM").append(info_map_sigs["sha1_checksum"]) var_list.set_var("INDEX_URL").append("$(SYNC_BASE_URL)/$(REPO_REV)/instl/index.yaml") index_file = var_list.resolve("$(ROOT_LINKS_FOLDER_REPO)/$(TARGET_REPO_REV)/instl/index.yaml") index_file_sigs = self.create_sig_for_file(index_file) var_list.set_var("INDEX_SIG").append(index_file_sigs["SHA-512_rsa_sig"]) var_list.set_var("INDEX_CHECKSUM").append(index_file_sigs["sha1_checksum"]) for var in repo_rev_vars: if var not in var_list: raise ValueError(var+" is missing cannot write repo rev file") repo_rev_yaml = YamlDumpDocWrap(var_list.repr_for_yaml(repo_rev_vars, include_comments=False), '!define', "", explicit_start=True, sort_mappings=True) safe_makedirs(var_list.resolve("$(ROOT_LINKS_FOLDER)/admin")) local_file = var_list.resolve("$(ROOT_LINKS_FOLDER)/admin/$(REPO_REV_FILE_NAME).$(TARGET_REPO_REV)") with open(local_file, "w") as wfd: writeAsYaml(repo_rev_yaml, out_stream=wfd, indentor=None, sort=True) print("created", local_file)
def write_history(self): selected_tab = self.notebook.tab(self.notebook.select(), option='text') var_stack.set_var("SELECTED_TAB").append(selected_tab) the_list_yaml_ready= var_stack.repr_for_yaml(which_vars=var_stack.resolve_var_to_list("__GUI_CONFIG_FILE_VARS__"), include_comments=False, resolve=False, ignore_unknown_vars=True) the_doc_yaml_ready = augmentedYaml.YamlDumpDocWrap(the_list_yaml_ready, '!define', "Definitions", explicit_start=True, sort_mappings=True) with open(var_stack.resolve_var("INSTL_GUI_CONFIG_FILE_NAME"), "w") as wfd: make_open_file_read_write_for_all(wfd) augmentedYaml.writeAsYaml(the_doc_yaml_ready, wfd)