aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Jagiello <michal.jagiello@t-mobile.pl>2021-06-30 07:34:18 +0000
committerMichal Jagiello <michal.jagiello@t-mobile.pl>2021-06-30 07:36:41 +0000
commit7cbad7912c0d14cbc06f7491ae77222b4feb23ed (patch)
tree150caf423df863e2476c1a4cbf10b50cd3bb3ded
parentfa58b9135151948b4707a53bcab63e8da93c6808 (diff)
[TEST] Check if cds blueprintsprocessor service type is 'NodePort'
Kubernetes API returns error response on ExposeCDSBlueprintprocessorNodePortStep cleanup if service is already ClusterIP. Add conditional statement to check if service is still 'NodePort' type. Issue-ID: TEST-347 Signed-off-by: Michal Jagiello <michal.jagiello@t-mobile.pl> Change-Id: I406b1910cccace6066e25d865b5aa1b6601efe74
-rw-r--r--src/onaptests/steps/onboard/cds.py98
1 files changed, 65 insertions, 33 deletions
diff --git a/src/onaptests/steps/onboard/cds.py b/src/onaptests/steps/onboard/cds.py
index 3ef37f2..cbd69ce 100644
--- a/src/onaptests/steps/onboard/cds.py
+++ b/src/onaptests/steps/onboard/cds.py
@@ -3,9 +3,10 @@
from abc import ABC
from pathlib import Path
-from typing import Optional
+from typing import Any, Dict
from kubernetes import client, config
+from kubernetes.client.exceptions import ApiException
from onapsdk.cds import Blueprint, DataDictionarySet
from onapsdk.cds.blueprint_processor import Blueprintprocessor
from onapsdk.configuration import settings
@@ -31,13 +32,34 @@ class ExposeCDSBlueprintprocessorNodePortStep(CDSBaseStep):
"""Initialize step."""
super().__init__(cleanup=cleanup)
self.service_name: str = "cds-blueprints-processor-http"
- self.client: Optional[client.CoreV1Api] = None
+ config.load_kube_config(settings.K8S_CONFIG)
+ self.k8s_client: client.CoreV1Api = client.CoreV1Api()
@property
def description(self) -> str:
"""Step description."""
return "Expose CDS blueprintsprocessor NodePort."
+ def is_service_node_port_type(self) -> bool:
+ """Check if CDS blueprints processor service type is 'NodePort'
+
+ Raises:
+ OnapTestException: Kubernetes API error
+
+ Returns:
+ bool: True if service type is 'NodePort', False otherwise
+
+ """
+ try:
+ service_data: Dict[str, Any] = self.k8s_client.read_namespaced_service(
+ self.service_name,
+ settings.K8S_NAMESPACE
+ )
+ return service_data.spec.type == "NodePort"
+ except ApiException:
+ self._logger.exception("Kubernetes API exception")
+ raise OnapTestException
+
@BaseStep.store_state
def execute(self) -> None:
"""Expose CDS blueprintprocessor port using kubernetes client.
@@ -48,17 +70,21 @@ class ExposeCDSBlueprintprocessorNodePortStep(CDSBaseStep):
"""
super().execute()
- config.load_kube_config(settings.K8S_CONFIG)
- self.k8s_client = client.CoreV1Api()
- try:
- self.k8s_client.patch_namespaced_service(
- self.service_name,
- settings.K8S_NAMESPACE,
- {"spec": {"ports": [{"port": 8080, "nodePort": 30449}], "type": "NodePort"}}
- )
- except urllib3.exceptions.HTTPError:
- self._logger.exception("Can't connect with k8s")
- raise OnapTestException
+ if not self.is_service_node_port_type():
+ try:
+ self.k8s_client.patch_namespaced_service(
+ self.service_name,
+ settings.K8S_NAMESPACE,
+ {"spec": {"ports": [{"port": 8080, "nodePort": 30449}], "type": "NodePort"}}
+ )
+ except ApiException:
+ self._logger.exception("Kubernetes API exception")
+ raise OnapTestException
+ except urllib3.exceptions.HTTPError:
+ self._logger.exception("Can't connect with k8s")
+ raise OnapTestException
+ else:
+ self._logger.debug("Service already patched, skip")
def cleanup(self) -> None:
"""Step cleanup.
@@ -66,26 +92,32 @@ class ExposeCDSBlueprintprocessorNodePortStep(CDSBaseStep):
Restore CDS blueprintprocessor service.
"""
- try:
- self.k8s_client.patch_namespaced_service(
- self.service_name,
- settings.K8S_NAMESPACE,
- [
- {
- "op": "remove",
- "path": "/spec/ports/0/nodePort"
- },
- {
- "op": "replace",
- "path": "/spec/type",
- "value": "ClusterIP"
- }
- ]
- )
- return super().cleanup()
- except urllib3.exceptions.HTTPError:
- self._logger.exception("Can't connect with k8s")
- raise OnapTestException
+ if self.is_service_node_port_type():
+ try:
+ self.k8s_client.patch_namespaced_service(
+ self.service_name,
+ settings.K8S_NAMESPACE,
+ [
+ {
+ "op": "remove",
+ "path": "/spec/ports/0/nodePort"
+ },
+ {
+ "op": "replace",
+ "path": "/spec/type",
+ "value": "ClusterIP"
+ }
+ ]
+ )
+ except ApiException:
+ self._logger.exception("Kubernetes API exception")
+ raise OnapTestException
+ except urllib3.exceptions.HTTPError:
+ self._logger.exception("Can't connect with k8s")
+ raise OnapTestException
+ else:
+ self._logger.debug("Service is not 'NodePort' type, skip")
+ return super().cleanup()
class BootstrapBlueprintprocessor(CDSBaseStep):