def main(): print(f"{timestamp()} Starting collector") folder_annotation = os.getenv(FOLDER_ANNOTATION) if folder_annotation is None: print(f"{timestamp()} No folder annotation was provided, " "defaulting to k8s-sidecar-target-directory") folder_annotation = "k8s-sidecar-target-directory" label = os.getenv(LABEL) if label is None: print( f"{timestamp()} Should have added {LABEL} as environment variable! Exit" ) return -1 label_value = os.getenv(LABEL_VALUE) if label_value: print(f"{timestamp()} Filter labels with value: {label_value}") target_folder = os.getenv(FOLDER) if target_folder is None: print( f"{timestamp()} Should have added {FOLDER} as environment variable! Exit" ) return -1 resources = os.getenv(RESOURCE, "configmap") resources = ("secret", "configmap") if resources == "both" else (resources, ) print(f"{timestamp()} Selected resource type: {resources}") method = os.getenv(REQ_METHOD) url = os.getenv(REQ_URL) payload = os.getenv(REQ_PAYLOAD) script = os.getenv(SCRIPT) _initialize_kubeclient_configuration() unique_filenames = os.getenv(UNIQUE_FILENAMES) if unique_filenames is not None and unique_filenames.lower() == "true": print(f"{timestamp()} Unique filenames will be enforced.") unique_filenames = True else: print(f"{timestamp()} Unique filenames will not be enforced.") unique_filenames = False current_namespace = open( "/var/run/secrets/kubernetes.io/serviceaccount/namespace").read() if os.getenv(METHOD) == "LIST": for res in resources: list_resources(label, label_value, target_folder, url, method, payload, current_namespace, folder_annotation, res, unique_filenames, script) else: watch_for_changes(os.getenv(METHOD), label, label_value, target_folder, url, method, payload, current_namespace, folder_annotation, resources, unique_filenames, script)
def main(): print(f"{timestamp()} Starting collector") folder_annotation = os.getenv(FOLDER_ANNOTATION) if folder_annotation is None: print(f"{timestamp()} No folder annotation was provided, " "defaulting to k8s-sidecar-target-directory") folder_annotation = "k8s-sidecar-target-directory" label = os.getenv(LABEL) if label is None: print( f"{timestamp()} Should have added {LABEL} as environment variable! Exit" ) return -1 label_value = os.getenv(LABEL_VALUE) if label_value: print(f"{timestamp()} Filter labels with value: {label_value}") target_folder = os.getenv(FOLDER) if target_folder is None: print( f"{timestamp()} Should have added {FOLDER} as environment variable! Exit" ) return -1 resources = os.getenv(RESOURCE, "configmap") resources = ("secret", "configmap") if resources == "both" else (resources, ) print(f"{timestamp()} Selected resource type: {resources}") request_method = os.getenv(REQ_METHOD) request_url = os.getenv(REQ_URL) request_payload = os.getenv(REQ_PAYLOAD) script = os.getenv(SCRIPT) _initialize_kubeclient_configuration() unique_filenames = os.getenv(UNIQUE_FILENAMES) if unique_filenames is not None and unique_filenames.lower() == "true": print(f"{timestamp()} Unique filenames will be enforced.") unique_filenames = True else: print(f"{timestamp()} Unique filenames will not be enforced.") unique_filenames = False enable_5xx = os.getenv(ENABLE_5XX) if enable_5xx is not None and enable_5xx.lower() == "true": print(f"{timestamp()} 5xx response content will be enabled.") enable_5xx = True else: print(f"{timestamp()} 5xx response content will not be enabled.") enable_5xx = False ignore_already_processed = os.getenv(IGNORE_ALREADY_PROCESSED) if ignore_already_processed is not None and ignore_already_processed.lower( ) == "true": # Check API version version = client.VersionApi().get_code() if int(version.major) > 1 or (int(version.major) == 1 and int(version.minor) >= 19): print( f"{timestamp()} Ignore already processed resource version will be enabled." ) ignore_already_processed = True else: print( f"{timestamp()} Can't enable 'ignore already processed resource version', kubernetes api version is " f"lower than v1.19.") ignore_already_processed = False else: print( f"{timestamp()} Ignore already processed resource version will not be enabled." ) ignore_already_processed = False with open("/var/run/secrets/kubernetes.io/serviceaccount/namespace") as f: namespace = os.getenv("NAMESPACE", f.read()) method = os.getenv(METHOD) if method == "LIST": for res in resources: for ns in namespace.split(','): list_resources(label, label_value, target_folder, request_url, request_method, request_payload, ns, folder_annotation, res, unique_filenames, script, enable_5xx) else: watch_for_changes(method, label, label_value, target_folder, request_url, request_method, request_payload, namespace, folder_annotation, resources, unique_filenames, script, enable_5xx, ignore_already_processed)
def main(): print(f"{timestamp()} Starting collector") folder_annotation = os.getenv(FOLDER_ANNOTATION) if folder_annotation is None: print(f"{timestamp()} No folder annotation was provided, " "defaulting to k8s-sidecar-target-directory") folder_annotation = "k8s-sidecar-target-directory" label = os.getenv(LABEL) if label is None: print( f"{timestamp()} Should have added {LABEL} as environment variable! Exit" ) return -1 label_value = os.getenv(LABEL_VALUE) if label_value: print(f"{timestamp()} Filter labels with value: {label_value}") target_folder = os.getenv(FOLDER) if target_folder is None: print( f"{timestamp()} Should have added {FOLDER} as environment variable! Exit" ) return -1 resources = os.getenv(RESOURCE, "configmap") resources = ("secret", "configmap") if resources == "both" else (resources, ) print(f"{timestamp()} Selected resource type: {resources}") method = os.getenv(REQ_METHOD) url = os.getenv(REQ_URL) payload = os.getenv(REQ_PAYLOAD) script = os.getenv(SCRIPT) _initialize_kubeclient_configuration() unique_filenames = os.getenv(UNIQUE_FILENAMES) if unique_filenames is not None and unique_filenames.lower() == "true": print(f"{timestamp()} Unique filenames will be enforced.") unique_filenames = True else: print(f"{timestamp()} Unique filenames will not be enforced.") unique_filenames = False try: url_retry_on = [ int(x) for x in os.getenv("URL_RETRY_ON", "500,502,503,504").split(",") if 500 <= int(x) <= 599 ] print( f"{timestamp()} 5xx content pulled disabled and retry enabled for {url_retry_on}" ) except ValueError: print( f"{timestamp()} cannot convert {os.getenv('URL_RETRY_ON')} elements to integer! Exit" ) return -1 try: url_refresh_interval = int(os.getenv(URL_REFRESH_INTERVAL, 0)) except ValueError: print( f"{timestamp()} cannot convert {URL_REFRESH_INTERVAL} to integer! Exit" ) return -1 if url_refresh_interval > 0: print( f"{timestamp()} '.url' content refreshing will be enabled. Refresh interval {url_refresh_interval}" ) current_namespace = open( "/var/run/secrets/kubernetes.io/serviceaccount/namespace").read() if os.getenv(METHOD) == "LIST": for res in resources: list_resources(label, label_value, target_folder, url, method, payload, current_namespace, folder_annotation, res, unique_filenames, script, url_retry_on) else: watch_for_changes(os.getenv(METHOD), url_refresh_interval, label, label_value, target_folder, url, method, payload, current_namespace, folder_annotation, resources, unique_filenames, script, url_retry_on)
def main(): print(f"{timestamp()} Starting collector") folder_annotation = os.getenv(FOLDER_ANNOTATION) if folder_annotation is None: print(f"{timestamp()} No folder annotation was provided, " "defaulting to k8s-sidecar-target-directory") folder_annotation = "k8s-sidecar-target-directory" label = os.getenv(LABEL) if label is None: print( f"{timestamp()} Should have added {LABEL} as environment variable! Exit" ) return -1 label_value = os.getenv(LABEL_VALUE) if label_value: print(f"{timestamp()} Filter labels with value: {label_value}") target_folder = os.getenv(FOLDER) if target_folder is None: print( f"{timestamp()} Should have added {FOLDER} as environment variable! Exit" ) return -1 resources = os.getenv(RESOURCE, "configmap") resources = ("secret", "configmap") if resources == "both" else (resources, ) print(f"{timestamp()} Selected resource type: {resources}") method = os.getenv(REQ_METHOD) url = os.getenv(REQ_URL) payload = os.getenv(REQ_PAYLOAD) script = os.getenv(SCRIPT) # this is where kube_config is going to look for a config file kube_config = os.path.expanduser(KUBE_CONFIG_DEFAULT_LOCATION) if os.path.exists(kube_config): config.load_kube_config(kube_config) else: config.load_incluster_config() print(f"{timestamp()} Config for cluster api loaded...") current_namespace = open( "/var/run/secrets/kubernetes.io/serviceaccount/namespace").read() if os.getenv(SKIP_TLS_VERIFY) == "true": configuration = client.Configuration() configuration.verify_ssl = False configuration.debug = False client.Configuration.set_default(configuration) unique_filenames = os.getenv(UNIQUE_FILENAMES) if unique_filenames is not None and unique_filenames.lower() == "true": print(f"{timestamp()} Unique filenames will be enforced.") unique_filenames = True else: print(f"{timestamp()} Unique filenames will not be enforced.") unique_filenames = False if os.getenv(METHOD) == "LIST": for res in resources: list_resources(label, label_value, target_folder, url, method, payload, current_namespace, folder_annotation, res, unique_filenames, script) else: watch_for_changes(os.getenv(METHOD), label, label_value, target_folder, url, method, payload, current_namespace, folder_annotation, resources, unique_filenames, script)