azext_edge/edge/providers/support/arcagents.py (62 lines of code) (raw):
# coding=utf-8
# ----------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License file in the project root for license information.
# ----------------------------------------------------------------------------------------------
from functools import partial
from knack.log import get_logger
from .common import COMPONENT_LABEL_FORMAT
from .base import (
DAY_IN_SECONDS,
process_deployments,
process_replicasets,
process_services,
process_v1_pods,
)
logger = get_logger(__name__)
MONIKER = "arcagents"
ARC_AGENTS = [
("cluster-identity-operator", False), # (component, has_services)
("clusterconnect-agent", False),
("config-agent", False),
("extension-events-collector", True),
("extension-manager", True),
("kube-aad-proxy", True),
("cluster-metadata-operator", False),
("metrics-agent", False),
("resource-sync-agent", False),
]
def fetch_pods(since_seconds: int = DAY_IN_SECONDS):
processed = fetch_resources(func=process_v1_pods, since_seconds=since_seconds)
return processed
def fetch_deployments():
processed = fetch_resources(func=process_deployments)
return processed
def fetch_replicasets():
processed = fetch_resources(func=process_replicasets)
return processed
def fetch_services():
processed = fetch_resources(
func=process_services,
)
return processed
def fetch_resources(func: callable, since_seconds: int = None) -> list:
resources = []
for component, has_service in ARC_AGENTS:
kwargs: dict = {
"directory_path": f"{MONIKER}/{component}",
}
if since_seconds:
kwargs["since_seconds"] = since_seconds
if func == process_services:
if not has_service:
continue
kwargs["prefix_names"] = [component]
else:
kwargs["label_selector"] = COMPONENT_LABEL_FORMAT.format(label=component)
resources.extend(func(**kwargs))
return resources
def prepare_bundle(log_age_seconds: int = DAY_IN_SECONDS) -> dict:
agents_to_run = {}
agents_to_run = {
"pods": partial(fetch_pods, since_seconds=log_age_seconds),
"replicasets": fetch_replicasets,
"deployments": fetch_deployments,
"services": fetch_services,
}
return agents_to_run