aboutsummaryrefslogtreecommitdiffstats
path: root/src/onapsdk/k8s/region.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/onapsdk/k8s/region.py')
-rw-r--r--src/onapsdk/k8s/region.py111
1 files changed, 111 insertions, 0 deletions
diff --git a/src/onapsdk/k8s/region.py b/src/onapsdk/k8s/region.py
new file mode 100644
index 0000000..a5cf197
--- /dev/null
+++ b/src/onapsdk/k8s/region.py
@@ -0,0 +1,111 @@
+"""Query module."""
+# Copyright 2023 Deutsche Telekom AG
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+from dataclasses import dataclass
+from typing import Any, Dict
+
+from .k8splugin_service import K8sPlugin, QueryResourceStatusMixin, ResourceStatus
+from .connectivity_info import ConnectivityInfo
+
+
+@dataclass
+class CloudRegionStatus:
+ """Class to store status of the Region."""
+
+ resource_count: str
+ resources_status: list
+
+
+# pylint: disable=too-many-arguments
+@dataclass
+class CloudRegion(K8sPlugin, QueryResourceStatusMixin):
+ """Cloud region information."""
+
+ def __init__(self,
+ cloud_region_id: str,
+ info: ConnectivityInfo) -> None:
+ """Region object initialization.
+
+ Args:
+ cloud_region_id (str): Cloud region ID
+ info (ConnectivityInfo): Connectivity Info
+
+ """
+ super().__init__()
+ self.cloud_region_id = cloud_region_id
+ self.connectivity_info = info
+
+ @classmethod
+ def create(cls,
+ cloud_region_id: str,
+ cloud_owner: str = None,
+ kubeconfig: bytes = None) -> "CloudRegion":
+ """Create Cloud Region.
+
+ Args:
+ cloud_region_id (str): Cloud region ID
+ cloud_owner (str): Cloud owner name
+ kubeconfig (str): kubernetes cluster kubeconfig
+
+ Returns:
+ CloudRegion: Created region object
+
+ """
+ if cloud_owner is None:
+ cloud_owner = cloud_region_id
+ info = ConnectivityInfo.create(cloud_region_id, cloud_owner, kubeconfig)
+ return CloudRegion(cloud_region_id, info)
+
+ def delete(self) -> None:
+ """Delete Region and associated Connectivity Information."""
+ self.connectivity_info.delete()
+
+ @classmethod
+ def get_by_region_id(cls, cloud_region_id: str) -> "CloudRegion":
+ """Get Region Information."""
+ info = ConnectivityInfo.get_connectivity_info_by_region_id(cloud_region_id)
+ return CloudRegion(cloud_region_id, info)
+
+ def query_resources(self,
+ kind: str,
+ api_version: str,
+ namespace: str = None,
+ name: str = None,
+ labels: dict = None) -> "CloudRegionStatus":
+ """Query for resources in the cloud region.
+
+ Args:
+ kind (str): Kind of k8s resource
+ api_version (str): Api version of k8s resource
+ namespace (str): Namespace of k8s resource
+ name (str): Name of k8s resource
+ labels (dict): Lables of k8s resource
+
+ Returns:
+ Filtered status of the cloud region
+
+ """
+ url = f"{self.base_url_and_version()}/query"
+ status: Dict[Any] = self.query_resource_status(url,
+ cloud_region=self.cloud_region_id,
+ api_version=api_version,
+ kind=kind,
+ namespace=namespace,
+ name=name,
+ labels=labels)
+ return CloudRegionStatus(
+ resource_count=int(status["resourceCount"]),
+ resources_status=[ResourceStatus(res_status) for
+ res_status in status["resourcesStatus"]]
+ )