diff --git a/src/plugin/connector/loadbalancer/listener_connector.py b/src/plugin/connector/loadbalancer/listener_connector.py index b713740..e59a065 100644 --- a/src/plugin/connector/loadbalancer/listener_connector.py +++ b/src/plugin/connector/loadbalancer/listener_connector.py @@ -25,4 +25,18 @@ def get_listener(self, secret_data: dict, region: REGION) -> dict: _LOGGER.error(f"Failed to get LB Listeners. {response.json()}") raise Exception(f"Failed to get LB Listeners. {response.json()}") - return response.json().get("listeners", []) + return response.json().get("listeners", {}) + + def get_listener_detail(self, listener_id: str, secret_data: dict, region: REGION) -> dict: + token = self.get_token(secret_data) + + url = f"https://{region.name.lower()}-api-network-infrastructure.nhncloudservice.com/v2.0/lbaas/listeners/{listener_id}" + headers = {"X-Auth-Token": token} + + response = requests.get(url, headers=headers) + + if response.status_code != 200: + _LOGGER.error(f"Failed to get LB Listeners Detail. {response.json()}") + raise Exception(f"Failed to get LB Listeners Detail. {response.json()}") + + return response.json().get("listener", {}) diff --git a/src/plugin/manager/loadbalancer/loadbalancer_manager.py b/src/plugin/manager/loadbalancer/loadbalancer_manager.py index 20117f6..9287424 100644 --- a/src/plugin/manager/loadbalancer/loadbalancer_manager.py +++ b/src/plugin/manager/loadbalancer/loadbalancer_manager.py @@ -2,6 +2,7 @@ from spaceone.inventory.plugin.collector.lib import * from plugin.conf.cloud_service_conf import AUTH_TYPE, REGION, ASSET_URL +from plugin.connector.loadbalancer.listener_connector import LoadBalancerListenersConnector from plugin.connector.loadbalancer.loadbalancer_connector import LoadBalancerConnector from plugin.manager.base import NHNCloudBaseManager @@ -39,9 +40,19 @@ def create_cloud_service_type(self): def create_cloud_service(self, secret_data): lb_connector = LoadBalancerConnector() + listener_connector = LoadBalancerListenersConnector() for AVAILABLE_REGION in self.AVAILABLE_REGIONS: resources = lb_connector.get_lb(secret_data, AVAILABLE_REGION) + for resource in resources: + listener_list = [] + listeners = resource['listeners'] + for listener in listeners: + detail = listener_connector.get_listener_detail(listener['id'], secret_data, AVAILABLE_REGION) + listener_list.append(detail) + + resource['listeners'] = listener_list + reference = { "resource_id": resource.get("id") } diff --git a/src/plugin/metadata/loadbalancer/listeners.yaml b/src/plugin/metadata/loadbalancer/listeners.yaml index 6c3e2b3..2eae910 100644 --- a/src/plugin/metadata/loadbalancer/listeners.yaml +++ b/src/plugin/metadata/loadbalancer/listeners.yaml @@ -8,6 +8,19 @@ table: sort: key: data.id desc: false + fields: + - LoadBalancer ID: data.id + - LoadBalancer Name: data.name + - Tenant ID: data.tenant_id + - Protocol: data.protocol + - Proxy Protocol: data.proxy_protocol + - Connection Limit: data.connection_limit + - Description: data.description + - Cert Expire Date: data.cert_expire_date + +tabs.0: + name: Details + type: item fields: - LoadBalancer ID: data.id - LoadBalancer Name: data.name diff --git a/src/plugin/metadata/loadbalancer/loadbalancer.yaml b/src/plugin/metadata/loadbalancer/loadbalancer.yaml index 2537fb2..7152b69 100644 --- a/src/plugin/metadata/loadbalancer/loadbalancer.yaml +++ b/src/plugin/metadata/loadbalancer/loadbalancer.yaml @@ -17,4 +17,37 @@ table: - Provider: data.provider - LoadBalancer Type: data.loadbalancer_type - Description: data.description - - Distributed: data.distributed \ No newline at end of file + - Distributed: data.distributed + +tabs.0: + name: Details + type: item + fields: + - LoadBalancer ID: data.id + - LoadBalancer Name: data.name + - Tenant ID: data.tenant_id + - Provisioning Status: data.provisioning_status + - Operating Status: data.operating_status + - Provider: data.provider + - LoadBalancer Type: data.loadbalancer_type + - Description: data.description + - Distributed: data.distributed + +tabs.1: + - name: Listeners + items: + - name: Listeners + type: table + root_path: data.listeners + fields: + - Listener ID: id + - Name: name + - Protocol: protocol + - Protocol Port: protocol_port + - Connection Limit: connection_limit + - Keepalive Timeout: keepalive_timeout + - Default Pool ID: default_pool_id + - Admin State Up: admin_state_up + - Block Invalid HTTP Request: block_invalid_http_request + - Description: description + - Certificate Expiry Date: cert_expire_date \ No newline at end of file