def test_common_filters(self, tmp_path): """Deal with empty or non-existing `_common_` filter.""" fname_ref = Filepath("tests/support/config.yaml") # ---------------------------------------------------------------------- # Empty _common_ filters. # ---------------------------------------------------------------------- # Clear the "_common_" filter and save the configuration again. ref = yaml.safe_load(fname_ref.read_text()) ref["filters"]["_common_"].clear() fout = tmp_path / "corrupt.yaml" fout.write_text(yaml.dump(ref)) # Load the new configuration. This must succeed and the filters must # match the ones defined in the file because there the "_common_" # filter was empty. cfg, err = cfgfile.load(fout) assert not err and ref["filters"] == cfg.filters # ---------------------------------------------------------------------- # Missing _common_ filters. # ---------------------------------------------------------------------- # Remove the "_common_" filter and save the configuration again. ref = yaml.safe_load(fname_ref.read_text()) del ref["filters"]["_common_"] fout = tmp_path / "valid.yaml" fout.write_text(yaml.dump(ref)) # Load the new configuration. This must succeed and the filters must # match the ones defined in the file because there was no "_common_" # filter to merge. cfg, err = cfgfile.load(fout) assert cfg.filters["_common_"] == [] del cfg.filters["_common_"] assert not err and ref["filters"] == cfg.filters
def test_load_folder_paths(self, tmp_path): """The folder paths must always be relative to the config file.""" fname = tmp_path / ".square.yaml" fname_ref = Filepath("tests/support/config.yaml") # The parsed folder must point to "tmp_path". ref = yaml.safe_load(fname_ref.read_text()) fname.write_text(yaml.dump(ref)) cfg, err = cfgfile.load(fname) assert not err and cfg.folder == tmp_path / "some/path" # The parsed folder must point to "tmp_path/folder". ref = yaml.safe_load(fname_ref.read_text()) ref["folder"] = "my-folder" fname.write_text(yaml.dump(ref)) cfg, err = cfgfile.load(fname) assert not err and cfg.folder == tmp_path / "my-folder" # An absolute path must ignore the position of ".square.yaml". # No idea how to handle this on Windows. if not sys.platform.startswith("win"): ref = yaml.safe_load(fname_ref.read_text()) ref["folder"] = "/absolute/path" fname.write_text(yaml.dump(ref)) cfg, err = cfgfile.load(fname) assert not err and cfg.folder == Filepath("/absolute/path")
def load_incluster_config( fname_token: Filepath = FNAME_TOKEN, fname_cert: Filepath = FNAME_CERT) -> Tuple[K8sConfig, bool]: """Return K8s access config from Pod service account. Returns None if we are not running in a Pod. Inputs: kubconfig: str Name of kubeconfig file. Returns: Config """ # Every K8s pod has this. server_ip = os.getenv('KUBERNETES_PORT_443_TCP_ADDR', None) fname_cert = pathlib.Path(fname_cert) fname_token = pathlib.Path(fname_token) # Sanity checks: URL and service account files either exist, or we are not # actually inside a Pod. try: assert server_ip is not None assert fname_cert.exists() assert fname_token.exists() except AssertionError: logit.debug("Could not find incluster (service account) credentials.") return K8sConfig(), True # Return the compiled K8s access configuration. logit.info("Use incluster (service account) credentials.") return K8sConfig( url=f'https://{server_ip}', token=fname_token.read_text(), ca_cert=fname_cert, client_cert=None, version="", name="", ), False