[PSM Interop] Don't initialize the secondary context when not needed (#34130)

Fixes an issue when an active context selected automatically picked up
as context for `secondary_k8s_api_manager`.

This was introducing an error in GAMMA Baseline PoC

```
sys:1: ResourceWarning: unclosed <ssl.SSLSocket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('100.71.2.143', 56723), raddr=('35.199.174.232', 443)>
```

Here's how the secondary context is incorrectly falls back to the
default context when `--secondary_kube_context` is not set:
```
k8s.py:142] Using kubernetes context "gke_grpc-testing_us-central1-a_psm-interop-security", active host: https://35.202.85.90
k8s.py:142] Using kubernetes context "None", active host: https://35.202.85.90
```
pull/34143/head
Sergii Tkachenko 2 years ago committed by GitHub
parent 3b23fe62ca
commit ecd7f2d936
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 24
      tools/run_tests/xds_k8s_test_driver/framework/xds_k8s_flags.py
  2. 12
      tools/run_tests/xds_k8s_test_driver/framework/xds_k8s_testcase.py
  3. 1
      tools/run_tests/xds_k8s_test_driver/tests/failover_test.py

@ -68,3 +68,27 @@ flags.mark_flags_as_required(
"client_image",
]
)
def require_secondary_context(filename: str):
"""
Makes secondary_kube_context flag required and adds the non-empty validator.
Typical usage example:
xds_k8s_flags.require_secondary_context(__file__)
"""
flags.mark_flag_as_required("secondary_kube_context")
def _val_not_empty(val: str) -> bool:
# Do not allow whitespace-only values to produce a better error.
return bool(val.strip())
flags.register_validator(
"secondary_kube_context",
_val_not_empty,
message=(
f"{filename} requires non-empty secondary_kube_context to access"
" the secondary k8s cluster"
),
)

@ -118,7 +118,7 @@ class XdsKubernetesBaseTestCase(base_testcase.BaseTestCase):
gcp_api_manager: gcp.api.GcpApiManager
gcp_service_account: Optional[str]
k8s_api_manager: k8s.KubernetesApiManager
secondary_k8s_api_manager: k8s.KubernetesApiManager
secondary_k8s_api_manager: Optional[k8s.KubernetesApiManager] = None
network: str
project: str
resource_prefix: str
@ -205,9 +205,10 @@ class XdsKubernetesBaseTestCase(base_testcase.BaseTestCase):
cls.k8s_api_manager = k8s.KubernetesApiManager(
xds_k8s_flags.KUBE_CONTEXT.value
)
cls.secondary_k8s_api_manager = k8s.KubernetesApiManager(
xds_k8s_flags.SECONDARY_KUBE_CONTEXT.value
)
if xds_k8s_flags.SECONDARY_KUBE_CONTEXT.value is not None:
cls.secondary_k8s_api_manager = k8s.KubernetesApiManager(
xds_k8s_flags.SECONDARY_KUBE_CONTEXT.value
)
cls.gcp_api_manager = gcp.api.GcpApiManager()
# Other
@ -236,7 +237,8 @@ class XdsKubernetesBaseTestCase(base_testcase.BaseTestCase):
@classmethod
def tearDownClass(cls):
cls.k8s_api_manager.close()
cls.secondary_k8s_api_manager.close()
if cls.secondary_k8s_api_manager is not None:
cls.secondary_k8s_api_manager.close()
cls.gcp_api_manager.close()
def setUp(self):

@ -25,6 +25,7 @@ from framework.test_app.runners.k8s import k8s_xds_server_runner
logger = logging.getLogger(__name__)
flags.adopt_module_key_flags(xds_k8s_testcase)
xds_k8s_flags.require_secondary_context(__file__)
# Type aliases
_Lang = skips.Lang

Loading…
Cancel
Save