#!<%= @venv_path %>/bin/python """ External Node Classifier (ENC) for Puppet. If the environment specified in the YAML file is 'testing', the environment is not included in the output. """ import sys import yaml import requests def fetch_enc_data(cobbler_url: str, hostname: str) -> str: """ Fetches and modifies ENC data from a given URL to ensure classes are in list format. """ url = f"{cobbler_url}/cblr/svc/op/puppet/hostname/{hostname}" try: response = requests.get(url, verify='<%= @trusted_ca_cert %>') response.raise_for_status() except requests.RequestException as e: sys.exit(f"Request failed: {e}") data = yaml.safe_load(response.text) data["parameters"] = data.get("parameters", {}) # Ensure 'classes' is in the desired list format if "classes" in data: if isinstance(data["classes"], dict): data["parameters"]["enc_role"] = list(data["classes"].keys()) data["classes"] = list(data["classes"].keys()) else: data["parameters"]["enc_role"] = list(data["classes"]) data["classes"] = list(data["classes"]) if "environment" in data: data["parameters"]["enc_env"] = data["environment"] if data["environment"] == "testing": del data["environment"] return yaml.dump(data) if __name__ == "__main__": if len(sys.argv) != 2: sys.exit(f"Usage: {sys.argv[0]} ") print(fetch_enc_data("<%= @cobbler_base_url %>", sys.argv[1]))