From 3091f532a0c032d0c67f71f8bf727e9c1b8b8072 Mon Sep 17 00:00:00 2001 From: Elsie4ever <3467996@gmail.com> Date: Tue, 2 Jul 2024 18:09:31 -0700 Subject: [PATCH] feat: update support bundle to adapt change for mqttbroker (#256) --- azext_edge/edge/_help.py | 6 +- azext_edge/edge/commands_edge.py | 2 +- azext_edge/edge/common.py | 12 +++- azext_edge/edge/params.py | 2 +- .../edge/providers/edge_api/__init__.py | 4 +- azext_edge/edge/providers/edge_api/mq.py | 11 ++-- azext_edge/edge/providers/support/base.py | 30 +++++----- azext_edge/edge/providers/support/mq.py | 59 +++---------------- azext_edge/edge/providers/support/orc.py | 2 +- azext_edge/edge/providers/support_bundle.py | 6 +- azext_edge/tests/edge/checks/conftest.py | 2 +- .../tests/edge/checks/test_mq_checks_unit.py | 2 +- azext_edge/tests/edge/support/conftest.py | 4 +- .../create_bundle_int/test_auto_int.py | 6 +- .../support/create_bundle_int/test_mq_int.py | 2 +- .../tests/edge/support/test_support_unit.py | 54 +++++++---------- 16 files changed, 80 insertions(+), 124 deletions(-) diff --git a/azext_edge/edge/_help.py b/azext_edge/edge/_help.py index 5bb3371d5..64f6461d0 100644 --- a/azext_edge/edge/_help.py +++ b/azext_edge/edge/_help.py @@ -15,7 +15,7 @@ COMPAT_CLUSTER_CONFIG_APIS, COMPAT_DATA_PROCESSOR_APIS, COMPAT_DEVICEREGISTRY_APIS, - COMPAT_MQ_APIS, + COMPAT_MQTT_BROKER_APIS, COMPAT_OPCUA_APIS, COMPAT_ORC_APIS, ) @@ -51,7 +51,7 @@ def load_iotops_help(): short-summary: Creates a standard support bundle zip archive for use in troubleshooting and diagnostics. long-summary: | {{Supported service APIs}} - - {COMPAT_MQ_APIS.as_str()} + - {COMPAT_MQTT_BROKER_APIS.as_str()} - {COMPAT_OPCUA_APIS.as_str()} - {COMPAT_DATA_PROCESSOR_APIS.as_str()} - {COMPAT_ORC_APIS.as_str()} @@ -91,7 +91,7 @@ def load_iotops_help(): - {COMPAT_AKRI_APIS.as_str()} - {COMPAT_DATA_PROCESSOR_APIS.as_str()} - {COMPAT_DEVICEREGISTRY_APIS.as_str()} - - {COMPAT_MQ_APIS.as_str()} + - {COMPAT_MQTT_BROKER_APIS.as_str()} - {COMPAT_OPCUA_APIS.as_str()} examples: diff --git a/azext_edge/edge/commands_edge.py b/azext_edge/edge/commands_edge.py index fdc94618a..c57ff9b06 100644 --- a/azext_edge/edge/commands_edge.py +++ b/azext_edge/edge/commands_edge.py @@ -57,7 +57,7 @@ def check( post_deployment_checks: Optional[bool] = None, as_object=None, context_name=None, - ops_service: str = "mq", + ops_service: str = OpsServiceType.mq.value, resource_kinds: List[str] = None, resource_name: str = None, ) -> Union[Dict[str, Any], None]: diff --git a/azext_edge/edge/common.py b/azext_edge/edge/common.py index d2964f097..d44432c00 100644 --- a/azext_edge/edge/common.py +++ b/azext_edge/edge/common.py @@ -140,7 +140,7 @@ class OpsServiceType(ListableEnum): """ auto = "auto" - mq = "mq" + mq = "broker" opcua = "opcua" dataprocessor = "dataprocessor" orc = "orc" @@ -149,6 +149,16 @@ class OpsServiceType(ListableEnum): # TODO: re-enable billing once service is available post 0.6.0 release # billing = "billing" + @classmethod + def list_check_services(cls): + return [ + cls.mq.value, + cls.opcua.value, + cls.dataprocessor.value, + cls.akri.value, + cls.deviceregistry.value, + ] + class ResourceProviderMapping(ListableEnum): """ diff --git a/azext_edge/edge/params.py b/azext_edge/edge/params.py index cac812548..63e22b9dd 100644 --- a/azext_edge/edge/params.py +++ b/azext_edge/edge/params.py @@ -148,7 +148,7 @@ def load_iotops_arguments(self, _): context.argument( "ops_service", options_list=["--ops-service", "--svc"], - choices=CaseInsensitiveList(["akri", "dataprocessor", "deviceregistry", "mq", "opcua"]), + choices=CaseInsensitiveList(OpsServiceType.list_check_services()), help="The IoT Operations service deployment that will be evaluated.", ) context.argument( diff --git a/azext_edge/edge/providers/edge_api/__init__.py b/azext_edge/edge/providers/edge_api/__init__.py index 4919b604c..8926550c7 100644 --- a/azext_edge/edge/providers/edge_api/__init__.py +++ b/azext_edge/edge/providers/edge_api/__init__.py @@ -6,7 +6,7 @@ from .base import EdgeResourceApi, EdgeApiManager from .clusterconfig import CLUSTER_CONFIG_API_V1 -from .mq import MQ_ACTIVE_API, MQ_API_V1B1, MqResourceKinds +from .mq import MQ_ACTIVE_API, MQTT_BROKER_API_V1B1, MqResourceKinds from .dataprocessor import DATA_PROCESSOR_API_V1, DataProcessorResourceKinds from .opcua import OPCUA_API_V1, OpcuaResourceKinds from .orc import ORC_API_V1, OrcResourceKinds @@ -22,7 +22,7 @@ "EdgeApiManager", "MqResourceKinds", "MQ_ACTIVE_API", - "MQ_API_V1B1", + "MQTT_BROKER_API_V1B1", "OpcuaResourceKinds", "OPCUA_API_V1", "OrcResourceKinds", diff --git a/azext_edge/edge/providers/edge_api/mq.py b/azext_edge/edge/providers/edge_api/mq.py index 59b7b9859..69d5f8e4a 100644 --- a/azext_edge/edge/providers/edge_api/mq.py +++ b/azext_edge/edge/providers/edge_api/mq.py @@ -21,12 +21,13 @@ class MqResourceKinds(ListableEnum): DATALAKE_CONNECTOR_TOPIC_MAP = "datalakeconnectortopicmap" KAFKA_CONNECTOR = "kafkaconnector" KAFKA_CONNECTOR_TOPIC_MAP = "kafkaconnectortopicmap" - IOT_HUB_CONNECTOR = "iothubconnector" - IOT_HUB_CONNECTOR_ROUTE_MAP = "iothubconnectorroutesmap" -MQ_API_V1B1 = EdgeResourceApi( - group="mq.iotoperations.azure.com", version="v1beta1", moniker="mq", label="microsoft-iotoperations-mq" +MQTT_BROKER_API_V1B1 = EdgeResourceApi( + group="mqttbroker.iotoperations.azure.com", + version="v1beta1", + moniker="broker", + label="microsoft-iotoperations-mq", ) -MQ_ACTIVE_API = MQ_API_V1B1 +MQ_ACTIVE_API = MQTT_BROKER_API_V1B1 diff --git a/azext_edge/edge/providers/support/base.py b/azext_edge/edge/providers/support/base.py index e9dc1a541..53190cc42 100644 --- a/azext_edge/edge/providers/support/base.py +++ b/azext_edge/edge/providers/support/base.py @@ -140,7 +140,6 @@ def process_v1_pods( def process_deployments( directory_path: str, - return_namespaces: bool = False, field_selector: Optional[str] = None, label_selector: Optional[str] = None, prefix_names: Optional[List[str]] = None, @@ -151,29 +150,18 @@ def process_deployments( deployments: V1DeploymentList = v1_apps.list_deployment_for_all_namespaces( label_selector=label_selector, field_selector=field_selector ) - namespace_pods_work = {} - processed = _process_kubernetes_resources( + return _process_kubernetes_resources( directory_path=directory_path, resources=deployments, prefix_names=prefix_names, kind=BundleResourceKind.deployment.value, ) - for deployment in deployments.items: - deployment_namespace: str = deployment.metadata.namespace - - if deployment_namespace not in namespace_pods_work: - namespace_pods_work[deployment_namespace] = True - - if return_namespaces: - return processed, namespace_pods_work - - return processed - def process_statefulset( directory_path: str, + return_namespaces: bool = False, field_selector: Optional[str] = None, label_selector: Optional[str] = None, ) -> List[dict]: @@ -183,13 +171,25 @@ def process_statefulset( statefulsets: V1StatefulSetList = v1_apps.list_stateful_set_for_all_namespaces( label_selector=label_selector, field_selector=field_selector ) + namespace_pods_work = {} - return _process_kubernetes_resources( + processed = _process_kubernetes_resources( directory_path=directory_path, resources=statefulsets, kind=BundleResourceKind.statefulset.value, ) + for statefulset in statefulsets.items: + statefulset_namespace: str = statefulset.metadata.namespace + + if statefulset_namespace not in namespace_pods_work: + namespace_pods_work[statefulset_namespace] = True + + if return_namespaces: + return processed, namespace_pods_work + + return processed + def process_services( directory_path: str, diff --git a/azext_edge/edge/providers/support/mq.py b/azext_edge/edge/providers/support/mq.py index eaaaf4294..456a1471c 100644 --- a/azext_edge/edge/providers/support/mq.py +++ b/azext_edge/edge/providers/support/mq.py @@ -10,7 +10,7 @@ from knack.log import get_logger -from azext_edge.edge.common import AIO_MQ_OPERATOR, AIO_MQ_RESOURCE_PREFIX +from azext_edge.edge.common import AIO_MQ_RESOURCE_PREFIX from azext_edge.edge.providers.edge_api.mq import MqResourceKinds from ..edge_api import MQ_ACTIVE_API, EdgeResourceApi @@ -19,7 +19,6 @@ DAY_IN_SECONDS, assemble_crd_work, get_mq_namespaces, - process_deployments, process_replicasets, process_services, process_statefulset, @@ -31,14 +30,9 @@ # TODO: @jiacju - will remove old labels once new labels are stabled MQ_APP_LABELS = [ - "broker", # aio-mq-dmqtt-frontend, aio-mq-dmqtt-backend, aio-mq-dmqtt-authentication - "diagnostics", # aio-mq-diagnostics-service - "health-manager", # aio-mq-dmqtt-health-manager - "aio-mq-operator", "aio-mq-mqttbridge", "aio-mq-datalake", "aio-mq-kafka-connector", - "aio-mq-iothub-connector", ] MQ_LABEL = f"app in ({','.join(MQ_APP_LABELS)})" @@ -87,50 +81,11 @@ def fetch_diagnostic_traces(): return result -def fetch_deployments(): - processed, namespaces = process_deployments( - directory_path=MQ_DIRECTORY_PATH, label_selector=MQ_LABEL, return_namespaces=True - ) - # aio-mq-operator deployment has no app label - operators, operator_namespaces = process_deployments( - directory_path=MQ_DIRECTORY_PATH, field_selector=f"metadata.name={AIO_MQ_OPERATOR}", return_namespaces=True - ) - processed.extend(operators) - - operators_v2, operator_namespaces_v2 = process_deployments( - directory_path=MQ_DIRECTORY_PATH, label_selector=MQ_NAME_LABEL, return_namespaces=True - ) - processed.extend(operators_v2) - - for namespace in {**namespaces, **operator_namespaces, **operator_namespaces_v2}: - metrics: dict = fetch_diagnostic_metrics(namespace) - if metrics: - processed.append(metrics) - - # TODO: @digimaun - enable after support for disabling check polling UX. - # try: - # checks = run_checks(namespace=namespace) - # checks_data = { - # "data": checks, - # "zinfo": f"{MQ_ACTIVE_API.moniker}/{namespace}/checks.yaml", - # } - # processed.append(checks_data) - # except Exception: - # logger.debug(f"Unable to run checks against namespace {namespace}.") - - return processed - - def fetch_statefulsets(): - processed = process_statefulset( + processed, namespaces = process_statefulset( directory_path=MQ_DIRECTORY_PATH, - label_selector=MQ_LABEL, - ) - processed.extend( - process_statefulset( - directory_path=MQ_DIRECTORY_PATH, - label_selector=MQ_NAME_LABEL, - ) + label_selector=MQ_NAME_LABEL, + return_namespaces=True, ) # bridge connector stateful sets have no labels @@ -150,6 +105,11 @@ def fetch_statefulsets(): ) processed.extend(stateful_set) + for namespace in namespaces: + metrics = fetch_diagnostic_metrics(namespace) + if metrics: + processed.append(metrics) + return processed @@ -204,7 +164,6 @@ def fetch_pods(since_seconds: int = DAY_IN_SECONDS): "statefulsets": fetch_statefulsets, "replicasets": fetch_replicasets, "services": fetch_services, - "deployments": fetch_deployments, } diff --git a/azext_edge/edge/providers/support/orc.py b/azext_edge/edge/providers/support/orc.py index 09ad349cb..59c5b7208 100644 --- a/azext_edge/edge/providers/support/orc.py +++ b/azext_edge/edge/providers/support/orc.py @@ -23,7 +23,7 @@ ORC_APP_LABEL = "app in (aio-orc-api, cert-manager, cainjector, webhook)" -ORC_CONTROLLER_LABEL = "control-plane in (aio-orc-controller-manager)" +ORC_CONTROLLER_LABEL = "control-plane in (aio-plat-controller-manager)" ORC_DIRECTORY_PATH = ORC_API_V1.moniker # TODO: @jiacju - this label will be used near future for consistency diff --git a/azext_edge/edge/providers/support_bundle.py b/azext_edge/edge/providers/support_bundle.py index b367b9a1b..c675f90a7 100644 --- a/azext_edge/edge/providers/support_bundle.py +++ b/azext_edge/edge/providers/support_bundle.py @@ -15,7 +15,7 @@ from ..providers.edge_api import ( CLUSTER_CONFIG_API_V1, DATA_PROCESSOR_API_V1, - MQ_API_V1B1, + MQTT_BROKER_API_V1B1, OPCUA_API_V1, ORC_API_V1, AKRI_API_V0, @@ -28,7 +28,7 @@ console = Console() COMPAT_CLUSTER_CONFIG_APIS = EdgeApiManager(resource_apis=[CLUSTER_CONFIG_API_V1]) -COMPAT_MQ_APIS = EdgeApiManager(resource_apis=[MQ_API_V1B1]) +COMPAT_MQTT_BROKER_APIS = EdgeApiManager(resource_apis=[MQTT_BROKER_API_V1B1]) COMPAT_OPCUA_APIS = EdgeApiManager(resource_apis=[OPCUA_API_V1]) COMPAT_DATA_PROCESSOR_APIS = EdgeApiManager(resource_apis=[DATA_PROCESSOR_API_V1]) COMPAT_ORC_APIS = EdgeApiManager(resource_apis=[ORC_API_V1]) @@ -61,7 +61,7 @@ def build_bundle( api_map = { # TODO: re-enable billing once service is available post 0.6.0 release # OpsServiceType.billing.value: {"apis": COMPAT_CLUSTER_CONFIG_APIS, "prepare_bundle": prepare_billing_bundle}, - OpsServiceType.mq.value: {"apis": COMPAT_MQ_APIS, "prepare_bundle": prepare_mq_bundle}, + OpsServiceType.mq.value: {"apis": COMPAT_MQTT_BROKER_APIS, "prepare_bundle": prepare_mq_bundle}, OpsServiceType.opcua.value: { "apis": COMPAT_OPCUA_APIS, "prepare_bundle": prepare_opcua_bundle, diff --git a/azext_edge/tests/edge/checks/conftest.py b/azext_edge/tests/edge/checks/conftest.py index cb1e31496..e4ab86eeb 100644 --- a/azext_edge/tests/edge/checks/conftest.py +++ b/azext_edge/tests/edge/checks/conftest.py @@ -94,7 +94,7 @@ def mock_get_cluster_custom_api(mocker): def mock_resource_types(mocker, ops_service): patched = mocker.patch("azext_edge.edge.providers.check.base.deployment.enumerate_ops_service_resources") - if ops_service == "mq": + if ops_service == "broker": patched.return_value = ( {}, { diff --git a/azext_edge/tests/edge/checks/test_mq_checks_unit.py b/azext_edge/tests/edge/checks/test_mq_checks_unit.py index c620c69ac..f65c13981 100644 --- a/azext_edge/tests/edge/checks/test_mq_checks_unit.py +++ b/azext_edge/tests/edge/checks/test_mq_checks_unit.py @@ -57,7 +57,7 @@ ], ], ) -@pytest.mark.parametrize("ops_service", ["mq"]) +@pytest.mark.parametrize("ops_service", ["broker"]) def test_check_mq_by_resource_types(ops_service, mocker, mock_resource_types, resource_kinds): eval_lookup = { MqResourceKinds.BROKER.value: "azext_edge.edge.providers.check.mq.evaluate_brokers", diff --git a/azext_edge/tests/edge/support/conftest.py b/azext_edge/tests/edge/support/conftest.py index 707b497d4..90f6fa433 100644 --- a/azext_edge/tests/edge/support/conftest.py +++ b/azext_edge/tests/edge/support/conftest.py @@ -84,8 +84,8 @@ def mocked_cluster_resources(request, mocker): from azext_edge.edge.providers.edge_api import ( EdgeResourceApi, - MQ_API_V1B1, MQ_ACTIVE_API, + MQTT_BROKER_API_V1B1, OPCUA_API_V1, DATA_PROCESSOR_API_V1, ORC_API_V1, @@ -105,7 +105,7 @@ def _get_api_resource(kind: str): r_key = r.as_str() v1_resources: List[V1APIResource] = [] - if r == MQ_API_V1B1: + if r == MQTT_BROKER_API_V1B1: v1_resources.append(_get_api_resource("Broker")) v1_resources.append(_get_api_resource("BrokerListener")) v1_resources.append(_get_api_resource("BrokerDiagnostic")) diff --git a/azext_edge/tests/edge/support/create_bundle_int/test_auto_int.py b/azext_edge/tests/edge/support/create_bundle_int/test_auto_int.py index c78442fe9..17d495503 100644 --- a/azext_edge/tests/edge/support/create_bundle_int/test_auto_int.py +++ b/azext_edge/tests/edge/support/create_bundle_int/test_auto_int.py @@ -64,13 +64,13 @@ def test_create_bundle(init_setup, bundle_dir, mq_traces, ops_service, tracked_f # Check and take out mq traces: if mq_traces and ops_service in [OpsServiceType.auto.value, OpsServiceType.mq.value]: - mq_level = walk_result.pop(path.join(BASE_ZIP_PATH, namespace, "mq", "traces"), {}) + mq_level = walk_result.pop(path.join(BASE_ZIP_PATH, namespace, OpsServiceType.mq.value, "traces"), {}) if mq_level: assert not mq_level["folders"] assert_file_names(mq_level["files"]) # make sure level 2 doesnt get messed up - assert walk_result[path.join(BASE_ZIP_PATH, namespace, "mq")]["folders"] == ["traces"] - walk_result[path.join(BASE_ZIP_PATH, namespace, "mq")]["folders"] = [] + assert walk_result[path.join(BASE_ZIP_PATH, namespace, OpsServiceType.mq.value)]["folders"] == ["traces"] + walk_result[path.join(BASE_ZIP_PATH, namespace, OpsServiceType.mq.value)]["folders"] = [] # Level 2 and 3 - bottom actual_walk_result = (len(expected_services) + int("clusterconfig" in expected_services)) diff --git a/azext_edge/tests/edge/support/create_bundle_int/test_mq_int.py b/azext_edge/tests/edge/support/create_bundle_int/test_mq_int.py index c9df08e28..9bd29442f 100644 --- a/azext_edge/tests/edge/support/create_bundle_int/test_mq_int.py +++ b/azext_edge/tests/edge/support/create_bundle_int/test_mq_int.py @@ -40,7 +40,7 @@ def test_create_bundle_mq(init_setup, tracked_files, mq_traces): resource_api=MQ_ACTIVE_API ) - expected_workload_types = ["deployment", "pod", "replicaset", "service", "statefulset"] + expected_workload_types = ["pod", "replicaset", "service", "statefulset"] expected_types = set(expected_workload_types).union(MQ_ACTIVE_API.kinds) assert set(file_map.keys()).issubset(expected_types) diff --git a/azext_edge/tests/edge/support/test_support_unit.py b/azext_edge/tests/edge/support/test_support_unit.py index 541b63403..91d0b04a5 100644 --- a/azext_edge/tests/edge/support/test_support_unit.py +++ b/azext_edge/tests/edge/support/test_support_unit.py @@ -14,14 +14,14 @@ from azure.cli.core.azclierror import ResourceNotFoundError from azext_edge.edge.commands_edge import support_bundle -from azext_edge.edge.common import AIO_MQ_OPERATOR, AIO_MQ_RESOURCE_PREFIX +from azext_edge.edge.common import AIO_MQ_RESOURCE_PREFIX from azext_edge.edge.providers.edge_api import ( AKRI_API_V0, CLUSTER_CONFIG_API_V1, DATA_PROCESSOR_API_V1, DEVICEREGISTRY_API_V1, MQ_ACTIVE_API, - MQ_API_V1B1, + MQTT_BROKER_API_V1B1, OPCUA_API_V1, ORC_API_V1, EdgeResourceApi, @@ -66,7 +66,7 @@ ) from azext_edge.edge.providers.support.otel import OTEL_API, OTEL_NAME_LABEL from azext_edge.edge.providers.support.shared import NAME_LABEL_FORMAT -from azext_edge.edge.providers.support_bundle import COMPAT_MQ_APIS +from azext_edge.edge.providers.support_bundle import COMPAT_MQTT_BROKER_APIS from ...generators import generate_random_string from .conftest import add_pod_to_mocked_pods @@ -78,14 +78,14 @@ "mocked_cluster_resources", [ [], - [MQ_API_V1B1], - [MQ_API_V1B1, MQ_ACTIVE_API], - [MQ_API_V1B1, OPCUA_API_V1], - [MQ_API_V1B1, DATA_PROCESSOR_API_V1], - [MQ_API_V1B1, OPCUA_API_V1, DATA_PROCESSOR_API_V1], - [MQ_API_V1B1, OPCUA_API_V1, DEVICEREGISTRY_API_V1], - [MQ_API_V1B1, OPCUA_API_V1, DATA_PROCESSOR_API_V1, ORC_API_V1], - [MQ_API_V1B1, OPCUA_API_V1, DATA_PROCESSOR_API_V1, ORC_API_V1, AKRI_API_V0], + [MQTT_BROKER_API_V1B1], + [MQTT_BROKER_API_V1B1, MQ_ACTIVE_API], + [MQTT_BROKER_API_V1B1, OPCUA_API_V1], + [MQTT_BROKER_API_V1B1, DATA_PROCESSOR_API_V1], + [MQTT_BROKER_API_V1B1, OPCUA_API_V1, DATA_PROCESSOR_API_V1], + [MQTT_BROKER_API_V1B1, OPCUA_API_V1, DEVICEREGISTRY_API_V1], + [MQTT_BROKER_API_V1B1, OPCUA_API_V1, DATA_PROCESSOR_API_V1, ORC_API_V1], + [MQTT_BROKER_API_V1B1, OPCUA_API_V1, DATA_PROCESSOR_API_V1, ORC_API_V1, AKRI_API_V0], # TODO: re-enable billing once service is available post 0.6.0 release # [MQ_API_V1B1, OPCUA_API_V1, DATA_PROCESSOR_API_V1, ORC_API_V1, CLUSTER_CONFIG_API_V1], ], @@ -195,15 +195,8 @@ def test_create_bundle( directory_path=ARC_BILLING_DIRECTORY_PATH, ) - if api in COMPAT_MQ_APIS.resource_apis: + if api in COMPAT_MQTT_BROKER_APIS.resource_apis: # Assert runtime resources - assert_list_deployments( - mocked_client, - mocked_zipfile, - label_selector=MQ_LABEL, - directory_path=MQ_DIRECTORY_PATH, - field_selector=f"metadata.name={AIO_MQ_OPERATOR}", - ) assert_list_pods( mocked_client, mocked_zipfile, @@ -229,13 +222,6 @@ def test_create_bundle( assert_list_replica_sets( mocked_client, mocked_zipfile, label_selector=MQ_NAME_LABEL, directory_path=MQ_DIRECTORY_PATH ) - assert_list_stateful_sets( - mocked_client, - mocked_zipfile, - label_selector=MQ_LABEL, - field_selector=None, - directory_path=MQ_DIRECTORY_PATH - ) assert_list_stateful_sets( mocked_client, mocked_zipfile, @@ -611,7 +597,7 @@ def test_create_bundle( def asset_raises_not_found_error(mocked_cluster_resources): for api, moniker in [ - (MQ_API_V1B1, "mq"), + (MQTT_BROKER_API_V1B1, "broker"), (OPCUA_API_V1, "opcua"), (DATA_PROCESSOR_API_V1, "dataprocessor"), (ORC_API_V1, "orc"), @@ -670,7 +656,7 @@ def assert_list_deployments( mock_names: List[str] = None, ): if MQ_DIRECTORY_PATH in directory_path: - # regardless of MQ API, MQ_ACTIVE_API.moniker is used for support/mq/fetch_diagnostic_metrics + # regardless of MQ API, MQ_ACTIVE_API.moniker is used for support/broker/fetch_diagnostic_metrics from unittest.mock import call mocked_client.AppsV1Api().list_deployment_for_all_namespaces.assert_has_calls( @@ -878,7 +864,7 @@ def assert_list_daemon_sets( def assert_mq_stats(mocked_zipfile): - assert_zipfile_write(mocked_zipfile, zinfo="mock_namespace/mq/diagnostic_metrics.txt", data="metrics") + assert_zipfile_write(mocked_zipfile, zinfo="mock_namespace/broker/diagnostic_metrics.txt", data="metrics") def assert_otel_kpis( @@ -960,7 +946,7 @@ def test_get_bundle_path(mocked_os_makedirs): # MQ connector stateful sets need labels based on connector names @pytest.mark.parametrize( "mocked_cluster_resources", - [[MQ_API_V1B1]], + [[MQTT_BROKER_API_V1B1]], indirect=True, ) @pytest.mark.parametrize( @@ -994,12 +980,12 @@ def test_mq_list_stateful_sets( # mock MQ support bundle to return connectors mocked_mq_support_active_api = mocker.patch("azext_edge.edge.providers.support.mq.MQ_ACTIVE_API") mocked_mq_support_active_api.get_resources.return_value = custom_objects - result = support_bundle(None, bundle_dir=a_bundle_dir, ops_service="mq") + result = support_bundle(None, bundle_dir=a_bundle_dir, ops_service="broker") assert result # assert initial call to list stateful sets mocked_client.AppsV1Api().list_stateful_set_for_all_namespaces.assert_any_call( - label_selector=MQ_LABEL, field_selector=None + label_selector=MQ_NAME_LABEL, field_selector=None ) # TODO - assert zipfile write of generic statefulset @@ -1022,7 +1008,7 @@ def test_mq_list_stateful_sets( @pytest.mark.parametrize( "mocked_cluster_resources", [ - [MQ_API_V1B1], + [MQTT_BROKER_API_V1B1], ], indirect=True, ) @@ -1055,7 +1041,7 @@ def test_create_bundle_mq_traces( assert get_trace_kwargs["namespace"] == "mock_namespace" # TODO: Not my favorite assert get_trace_kwargs["trace_ids"] == ["!support_bundle!"] # TODO: Magic string - test_zipinfo = ZipInfo("mock_namespace/mq/traces/trace_key") + test_zipinfo = ZipInfo("mock_namespace/broker/traces/trace_key") test_zipinfo.file_size = 0 test_zipinfo.compress_size = 0 assert_zipfile_write(mocked_zipfile, zinfo=test_zipinfo, data="trace_data")