From b3dc4bbac3744e3c35a1f3260a991da2c1476af0 Mon Sep 17 00:00:00 2001 From: Mykhailo Chernyk Date: Tue, 9 Mar 2021 15:39:29 +0100 Subject: [PATCH] Add support for writing Day2 API tests - Reuse existing TF configuration - Always return fresh TF state - Clear nodes cache - Fetch reuested number of Day2 nodes from environment --- .../controllers/node_controllers/terraform_controller.py | 5 +++-- discovery-infra/test_infra/helper_classes/cluster.py | 2 ++ discovery-infra/test_infra/helper_classes/nodes.py | 4 ++++ discovery-infra/test_infra/tools/terraform_utils.py | 1 + discovery-infra/tests/conftest.py | 1 + 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/discovery-infra/test_infra/controllers/node_controllers/terraform_controller.py b/discovery-infra/test_infra/controllers/node_controllers/terraform_controller.py index 4281ca2e57e..4ec163ab81a 100644 --- a/discovery-infra/test_infra/controllers/node_controllers/terraform_controller.py +++ b/discovery-infra/test_infra/controllers/node_controllers/terraform_controller.py @@ -15,14 +15,15 @@ class TerraformController(LibvirtController): def __init__(self, **kwargs): super().__init__(**kwargs) - self.cluster_suffix = self._get_random_name() + self.cluster_suffix = kwargs.get('cluster_suffix', self._get_random_name()) self.cluster_name = kwargs.get('cluster_name', f'{consts.CLUSTER_PREFIX}' + "-" + self.cluster_suffix) self.network_name = kwargs.get('network_name', consts.TEST_NETWORK) + self.cluster_suffix self.network_conf = kwargs.get('net_asset') self.cluster_domain = kwargs.get('base_domain', "redhat.com") self.ipv6 = kwargs.get('ipv6') self.params = self._terraform_params(**kwargs) - self.tf_folder = self._create_tf_folder() + tf_folder = kwargs.get('tf_folder') + self.tf_folder = tf_folder if tf_folder else self._create_tf_folder() self.image_path = kwargs["iso_download_path"] self.bootstrap_in_place = kwargs.get('bootstrap_in_place', False) self.tf = terraform_utils.TerraformUtils(working_dir=self.tf_folder) diff --git a/discovery-infra/test_infra/helper_classes/cluster.py b/discovery-infra/test_infra/helper_classes/cluster.py index a4b9ce8af90..8465cdd86cb 100644 --- a/discovery-infra/test_infra/helper_classes/cluster.py +++ b/discovery-infra/test_infra/helper_classes/cluster.py @@ -27,6 +27,8 @@ def __init__(self, api_client, cluster_name=None, additional_ntp_source=None, self._high_availability_mode = high_availability_mode if cluster_id: self.id = cluster_id + cluster_details = api_client.cluster_get(cluster_id) + self.name = cluster_details.name else: cluster_name = cluster_name or env_variables.get('cluster_name', "test-infra-cluster") self.id = self._create(cluster_name, additional_ntp_source, openshift_version, diff --git a/discovery-infra/test_infra/helper_classes/nodes.py b/discovery-infra/test_infra/helper_classes/nodes.py index f004568b168..e36c849acba 100644 --- a/discovery-infra/test_infra/helper_classes/nodes.py +++ b/discovery-infra/test_infra/helper_classes/nodes.py @@ -41,6 +41,10 @@ def __iter__(self) -> Iterator[Node]: for n in self.nodes: yield n + def drop_cache(self): + self._nodes = None + self._nodes_as_dict = None + def get_masters(self): return [node for node in self.nodes if node.is_master_in_name()] diff --git a/discovery-infra/test_infra/tools/terraform_utils.py b/discovery-infra/test_infra/tools/terraform_utils.py index 70bce85ea7d..461849b0cbc 100644 --- a/discovery-infra/test_infra/tools/terraform_utils.py +++ b/discovery-infra/test_infra/tools/terraform_utils.py @@ -36,6 +36,7 @@ def change_variables(self, variables, refresh=True): self.apply(refresh=refresh) def get_state(self): + self.tf.read_state_file("terraform.tfstate") return self.tf.tfstate def set_new_vip(self, api_vip): diff --git a/discovery-infra/tests/conftest.py b/discovery-infra/tests/conftest.py index 5590013d079..1efa2003465 100644 --- a/discovery-infra/tests/conftest.py +++ b/discovery-infra/tests/conftest.py @@ -43,6 +43,7 @@ def _get_cluster_name(): "base_domain": utils.get_env('BASE_DOMAIN', "redhat.com"), "num_masters": int(utils.get_env('NUM_MASTERS', consts.NUMBER_OF_MASTERS)), "num_workers": max(2, int(utils.get_env('NUM_WORKERS', 0))), + "num_day2_workers": int(utils.get_env('NUM_DAY2_WORKERS', 0)), "vip_dhcp_allocation": bool(util.strtobool(utils.get_env('VIP_DHCP_ALLOCATION'))), "worker_memory": int(utils.get_env('WORKER_MEMORY', '8892')), "master_memory": int(utils.get_env('MASTER_MEMORY', '16984')),