diff options
author | Sylvain Desbureaux <sylvain.desbureaux@orange.com> | 2021-03-24 08:44:29 +0100 |
---|---|---|
committer | Cédric Ollivier <cedric.ollivier@orange.com> | 2021-03-25 09:59:41 +0100 |
commit | 27dbb7c14bac45a9af8d18e1913a2be6815cea43 (patch) | |
tree | bb34a9812b4b9eff0df45b5f249cde73f155f4a3 /functest_kubernetes | |
parent | 9c95b5f46e57365c1f6e7e5c9073f7fe2ad48a66 (diff) |
Provide support for air gapped env for e2e
Sometimes, tested Kubernetes doesn't have direct access to Internet but
access through repository mirrors.
This patch handles this case for e2e test case.
Signed-off-by: Sylvain Desbureaux <sylvain.desbureaux@orange.com>
Change-Id: Iaa2960ad03aae1fff859d41bcd6ddf3176658f8e
Diffstat (limited to 'functest_kubernetes')
-rw-r--r-- | functest_kubernetes/k8stest.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/functest_kubernetes/k8stest.py b/functest_kubernetes/k8stest.py index 35649edc..bd1aed8a 100644 --- a/functest_kubernetes/k8stest.py +++ b/functest_kubernetes/k8stest.py @@ -19,6 +19,7 @@ import os import re import subprocess import time +import yaml from xtesting.core import testcase @@ -30,6 +31,8 @@ class E2ETesting(testcase.TestCase): __logger = logging.getLogger(__name__) config = '/root/.kube/config' + gcr_repo = os.getenv("MIRROR_REPO", "gcr.io") + k8s_gcr_repo = os.getenv("MIRROR_REPO", "k8s.gcr.io") def __init__(self, **kwargs): super(E2ETesting, self).__init__(**kwargs) @@ -52,9 +55,11 @@ class E2ETesting(testcase.TestCase): cmd_line.extend( ['-non-blocking-taints', os.environ["NON_BLOCKING_TAINTS"]]) cmd_line.extend(['-disable-log-dump', 'true']) + self._generate_repo_list_file() self.__logger.info("Starting k8s test: '%s'.", cmd_line) env = os.environ.copy() env["GINKGO_PARALLEL"] = 'y' + env["KUBE_TEST_REPO_LIST"] = "{}/repositories.yml".format(self.res_dir) process = subprocess.Popen(cmd_line, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env) boutput = process.stdout.read() @@ -84,6 +89,8 @@ class E2ETesting(testcase.TestCase): self.__logger.error(grp2.group(1)) def run(self, **kwargs): + if not os.path.exists(self.res_dir): + os.makedirs(self.res_dir) if not os.path.isfile(self.config): self.__logger.error( "Cannot run k8s testcases. Config file not found") @@ -97,3 +104,31 @@ class E2ETesting(testcase.TestCase): res = self.EX_RUN_ERROR self.stop_time = time.time() return res + + def _generate_repo_list_file(self): + """Generate the repositories list for the test.""" + # The list is taken from + # https://github.com/kubernetes/kubernetes/blob/master/test/utils/image/manifest.go + # It may needs update regularly + gcr_repo = os.getenv("GCR_REPO", self.gcr_repo) + k8s_gcr_repo = os.getenv("K8S_GCR_REPO", self.k8s_gcr_repo) + repo_list = { + "GcAuthenticatedRegistry": "{}/authenticated-image-pulling".format( + gcr_repo), + "E2eRegistry": "{}/kubernetes-e2e-test-images".format( + gcr_repo), + "PromoterE2eRegistry": "{}/e2e-test-images".format( + k8s_gcr_repo), + "BuildImageRegistry": "{}/build-image".format(k8s_gcr_repo), + "InvalidRegistry": "invalid.com/invalid", + "GcEtcdRegistry": "{}".format(k8s_gcr_repo), + "GcRegistry": "{}".format(k8s_gcr_repo), + "SigStorageRegistry": "{}/sig-storage".format(k8s_gcr_repo), + "PrivateRegistry": "{}/k8s-authenticated-test".format( + gcr_repo), + "SampleRegistry": "{}/google-samples".format(gcr_repo), + "GcrReleaseRegistry": "{}/gke-release".format(gcr_repo), + "MicrosoftRegistry": "mcr.microsoft.com", + } + with open("{}/repositories.yml".format(self.res_dir), 'w') as file: + yaml.dump(repo_list, file) |