Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)