Modify Python ONAP SDK tests to not require kubeconfig 58/134758/6
authorpawel.denst <pawel.denst@external.t-mobile.pl>
Mon, 5 Jun 2023 08:00:55 +0000 (08:00 +0000)
committerLukasz Rajewski <lukasz.rajewski@t-mobile.pl>
Thu, 15 Jun 2023 18:42:22 +0000 (18:42 +0000)
Modify Python ONAP SDK tests to not require kubeconfig

Issue-ID: INT-2247
Signed-off-by: pawel.denst <pawel.denst@external.t-mobile.pl>
Signed-off-by: Lukasz Rajewski <lukasz.rajewski@t-mobile.pl>
Change-Id: I0d61250a2373d8549696cedaa2c0c5fb721d0e3b

src/onaptests/configuration/settings.py
src/onaptests/steps/cloud/check_status.py
src/onaptests/steps/cloud/k8s_connectivity_info_create.py
src/onaptests/steps/onboard/cds.py
src/onaptests/steps/simulator/pnf_simulator_cnf/pnf_register.py
src/onaptests/templates/kubeconfig/kube_config.json.j2 [new file with mode: 0644]

index 436e82c..83ae792 100644 (file)
@@ -53,4 +53,5 @@ K8S_ADDITIONAL_RESOURCES_NAMESPACE = K8S_ONAP_NAMESPACE  # Resources created on
 ORCHESTRATION_REQUEST_TIMEOUT = 60.0 * 15  # 15 minutes in seconds
 SERVICE_DISTRIBUTION_NUMBER_OF_TRIES = 30
 SERVICE_DISTRIBUTION_SLEEP_TIME = 60
-EXPOSE_SERVICES_NODE_PORTS = True
\ No newline at end of file
+EXPOSE_SERVICES_NODE_PORTS = True
+IN_CLUSTER = False
\ No newline at end of file
index a72c992..80205b5 100644 (file)
@@ -120,10 +120,10 @@ class CheckNamespaceStatusStep(BaseStep):
         else:
             self.res_dir = f"{testcase.TestCase.dir_results}/kubernetes-status"
 
-        if settings.K8S_CONFIG:
-            config.load_kube_config(config_file=settings.K8S_CONFIG)
+        if settings.IN_CLUSTER:
+            config.load_incluster_config()
         else:
-            config.load_kube_config()
+            config.load_kube_config(config_file=settings.K8S_CONFIG)
 
         self.core = client.CoreV1Api()
         self.batch = client.BatchV1Api()
index dfcda05..8c361e4 100644 (file)
@@ -1,9 +1,12 @@
 """Connectivity info creation module."""
+from jinja2 import Environment, PackageLoader, select_autoescape
+
 from onapsdk.configuration import settings
 from onapsdk.exceptions import APIError
 from onapsdk.k8s import ConnectivityInfo
+from onapsdk.utils.jinja import jinja_env
+from onaptests.steps.base import BaseStep
 
-from ..base import BaseStep
 
 class K8SConnectivityInfoStep(BaseStep):
     """CreateConnnectivityInfoStep."""
@@ -31,17 +34,34 @@ class K8SConnectivityInfoStep(BaseStep):
         ######## Create Connectivity Info #########################################
         try:
             self._logger.info("Check if k8s connectivity information exists")
-            ConnectivityInfo.get_connectivity_info_by_region_id(settings.CLOUD_REGION_ID)
+            ConnectivityInfo.get_connectivity_info_by_region_id(
+                settings.CLOUD_REGION_ID)
         except APIError:
-            self._logger.info("Create the k8s connectivity information")
-            ConnectivityInfo.create(settings.CLOUD_REGION_ID,
-                                    settings.CLOUD_REGION_CLOUD_OWNER,
-                                    open(settings.K8S_CONFIG, 'rb').read())
+            if settings.IN_CLUSTER:
+                token_file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
+                with open(token_file, "r") as file:
+                    user_token_value = file.read().strip()
+                jinja_env = Environment(autoescape=select_autoescape(['json.j2']),
+                                        loader=PackageLoader('onaptests.templates', 'kubeconfig'))
+                kubeconfig_data = jinja_env.get_template("kube_config.json.j2").render(
+                    user_token_value=user_token_value
+                )
+                # Create the k8s connectivity information with the kubeconfig data
+                self._logger.info("Create the k8s connectivity information")
+                ConnectivityInfo.create(settings.CLOUD_REGION_ID,
+                                        settings.CLOUD_REGION_CLOUD_OWNER,
+                                        kubeconfig_data.encode('utf-8'))
+            else:
+                self._logger.info("Create the k8s connectivity information")
+                ConnectivityInfo.create(settings.CLOUD_REGION_ID,
+                                        settings.CLOUD_REGION_CLOUD_OWNER,
+                                        open(settings.K8S_CONFIG, 'rb').read())
 
     @BaseStep.store_state(cleanup=True)
     def cleanup(self) -> None:
         """Cleanup K8S Connectivity information."""
         self._logger.info("Clean the k8s connectivity information")
-        connectinfo = ConnectivityInfo.get_connectivity_info_by_region_id(settings.CLOUD_REGION_ID)
+        connectinfo = ConnectivityInfo.get_connectivity_info_by_region_id(
+            settings.CLOUD_REGION_ID)
         connectinfo.delete()
         super().cleanup()
index ad40fe5..5256eac 100644 (file)
@@ -34,7 +34,10 @@ class ExposeCDSBlueprintprocessorNodePortStep(CDSBaseStep):
         """Initialize step."""
         super().__init__(cleanup=cleanup)
         self.service_name: str = "cds-blueprints-processor-http"
-        config.load_kube_config(settings.K8S_CONFIG)
+        if settings.IN_CLUSTER:
+            config.load_incluster_config()
+        else:
+            config.load_kube_config(config_file=settings.K8S_CONFIG)
         self.k8s_client: client.CoreV1Api = client.CoreV1Api()
 
     @property
index 0e6e001..3a846e3 100644 (file)
@@ -46,7 +46,10 @@ class PnfSimulatorCnfRegisterStep(BaseStep):
             bool: True if PNF simulator pod is running, False otherwise
 
         """
-        config.load_kube_config(settings.K8S_CONFIG)
+        if settings.IN_CLUSTER:
+            config.load_incluster_config()
+        else:
+            config.load_kube_config(config_file=settings.K8S_CONFIG)
         k8s_client: "CoreV1API" = client.CoreV1Api()
         k8s_watch: "Watch" =  watch.Watch()
         status = False
@@ -75,7 +78,10 @@ class PnfSimulatorCnfRegisterStep(BaseStep):
             Tuple[str, str, str]: VES protocol, IP and port
 
         """
-        config.load_kube_config(settings.K8S_CONFIG)
+        if settings.IN_CLUSTER:
+            config.load_incluster_config()
+        else:
+            config.load_kube_config(config_file=settings.K8S_CONFIG)
         k8s_client: "CoreV1API" = client.CoreV1Api()
         try:
             for service in k8s_client.list_namespaced_service(namespace=settings.K8S_ONAP_NAMESPACE).items:
diff --git a/src/onaptests/templates/kubeconfig/kube_config.json.j2 b/src/onaptests/templates/kubeconfig/kube_config.json.j2
new file mode 100644 (file)
index 0000000..9614e2f
--- /dev/null
@@ -0,0 +1,18 @@
+apiVersion: v1
+kind: Config
+current-context: default
+contexts:
+- name: default
+context:
+    cluster: cluster
+    user: cluster-admin
+    namespace: default
+clusters:
+- name: cluster
+cluster:
+    insecure-skip-tls-verify: true
+    server: https://kubernetes.default.svc.cluster.local
+users:
+- name: cluster-admin
+user:
+token: {{ user_token_value }}
\ No newline at end of file