def test_kube_api_ipv4(self, kube_api_context, get_nodes): tf_config = TerraformConfig(masters_count=1, workers_count=0, master_vcpu=8, master_memory=35840) cluster_config = ClusterConfig() kube_api_test(kube_api_context, get_nodes(tf_config), cluster_config)
def get_cluster_func(cluster_config: ClusterConfig = ClusterConfig()): if not cluster_config.cluster_name: cluster_config.cluster_name = env_variables.get( 'cluster_name', infra_utils.get_random_name(length=10)) res = Cluster(api_client=api_client, config=cluster_config) clusters.append(res) return res
def update_config(tf_config: TerraformConfig = TerraformConfig(), cluster_config: ClusterConfig = ClusterConfig(), operators=None): if operators is None: operators = parse_olm_operators_from_env() tf_config.worker_memory = resource_param(tf_config.worker_memory, OperatorResource.WORKER_MEMORY_KEY, operators) tf_config.master_memory = resource_param(tf_config.master_memory, OperatorResource.MASTER_MEMORY_KEY, operators) tf_config.worker_vcpu = resource_param(tf_config.worker_vcpu, OperatorResource.WORKER_VCPU_KEY, operators) tf_config.master_vcpu = resource_param(tf_config.master_vcpu, OperatorResource.MASTER_VCPU_KEY, operators) tf_config.workers_count = resource_param(tf_config.workers_count, OperatorResource.WORKER_COUNT_KEY, operators) tf_config.worker_disk = resource_param(tf_config.worker_disk, OperatorResource.WORKER_DISK_KEY, operators) tf_config.master_disk = resource_param(tf_config.master_disk, OperatorResource.MASTER_DISK_KEY, operators) tf_config.master_disk_count = resource_param(tf_config.master_disk_count, OperatorResource.MASTER_DISK_COUNT_KEY, operators) tf_config.worker_disk_count = resource_param(tf_config.worker_disk_count, OperatorResource.WORKER_DISK_COUNT_KEY, operators) cluster_config.workers_count = resource_param(cluster_config.workers_count, OperatorResource.WORKER_COUNT_KEY, operators) cluster_config.nodes_count = cluster_config.masters_count + cluster_config.workers_count cluster_config.olm_operators = [operators]
def get_api_vip_from_cluster(api_client, cluster_info: Union[dict, models.cluster.Cluster], pull_secret): import warnings from tests.config import ClusterConfig warnings.warn( "Soon get_api_vip_from_cluster will be deprecated. Avoid using or adding new functionality to " "this function. The function and solution for that case have not been determined yet. It might be " "on another module, or as a classmethod within Cluster class." " For more information see https://issues.redhat.com/browse/MGMT-4975", PendingDeprecationWarning, ) if isinstance(cluster_info, dict): cluster_info = models.cluster.Cluster(**cluster_info) cluster = Cluster( api_client=api_client, config=ClusterConfig( cluster_name=ClusterName(cluster_info.name), pull_secret=pull_secret, ssh_public_key=cluster_info.ssh_public_key, cluster_id=cluster_info.id), nodes=None ) return cluster.get_api_vip(cluster=cluster_info)
def new_cluster_configuration(self) -> ClusterConfig: """ Creates new cluster configuration object. Override this fixture in your test class to provide a custom cluster configuration. (See TestInstall) :rtype: new cluster configuration object """ return ClusterConfig()
def new_cluster_configuration(self, request: FixtureRequest): # Overriding the default BaseTest.new_cluster_configuration fixture to set custom configs. config = ClusterConfig() for fixture_name in ["openshift_version", "network_type", "is_static_ip"]: with suppress(FixtureLookupError): setattr(config, fixture_name, request.getfixturevalue(fixture_name)) return config
def new_cluster_configuration(self, request: FixtureRequest) -> ClusterConfig: """ Creates new cluster configuration object. Override this fixture in your test class to provide a custom cluster configuration. (See TestInstall) :rtype: new cluster configuration object """ config = ClusterConfig() self.update_parameterized(request, config) return config
def test_olm_operator(self, get_nodes, get_cluster, operators, update_olm_config): new_cluster = get_cluster( cluster_config=ClusterConfig(olm_operators=[operators]), nodes=get_nodes( update_olm_config(config=TerraformConfig(), operators=operators))) new_cluster.prepare_for_installation() new_cluster.start_install_and_wait_for_installed() assert new_cluster.is_operator_in_status(operators, OperatorStatus.AVAILABLE)
def gather_sosreport_data(output_dir: str): sosreport_output = os.path.join(output_dir, "sosreport") recreate_folder(sosreport_output) controller = LibvirtController(config=TerraformConfig(), entity_config=ClusterConfig()) run_concurrently( jobs=[(gather_sosreport_from_node, node, sosreport_output) for node in controller.list_nodes()], timeout=60 * 20, )
def new_cluster_configuration(self, request: FixtureRequest): # Overriding the default BaseTest.new_cluster_configuration fixture to set custom configs. config = ClusterConfig() for fixture_name in ["openshift_version", "network_type", "is_static_ip", "olm_operators"]: with suppress(FixtureLookupError): if hasattr(config, fixture_name): config.set_value(fixture_name, request.getfixturevalue(fixture_name)) else: raise AttributeError(f"No attribute name {fixture_name} in ClusterConfig object type") config.trigger(get_default_triggers()) return config
def create_controller(net_asset): return TerraformController( TerraformConfig( masters_count=1, workers_count=0, master_memory=45 * 1024, # in megabytes master_vcpu=16, net_asset=net_asset, bootstrap_in_place=True, single_node_ip=net_asset.machine_cidr.replace("0/24", "10"), ), entity_config=ClusterConfig( cluster_name=ClusterName(prefix="test-infra-cluster", suffix="")))
def test_delete_clusters(self, api_client: InventoryClient, cluster_configuration): """Delete all clusters or single cluster if CLUSTER_ID is given""" cluster_id = cluster_configuration.cluster_id clusters = api_client.clusters_list() if not cluster_id else [{ "id": cluster_id }] for cluster_info in clusters: cluster = Cluster(api_client, ClusterConfig(cluster_id=cluster_info["id"]), InfraEnvConfig()) cluster.delete() log.info(f"Successfully deleted {len(clusters)} clusters")
def test_kube_api_ipv6(self, kube_api_context, proxy_server, get_nodes): tf_config = TerraformConfig(masters_count=1, workers_count=0, master_vcpu=8, master_memory=35840, is_ipv6=True) cluster_config = ClusterConfig( service_network_cidr='2003:db8::/112', cluster_network_cidr='2002:db8::/53', cluster_network_host_prefix=64, is_ipv6=True, ) kube_api_test(kube_api_context, get_nodes(tf_config), cluster_config, proxy_server, is_ipv4=False)
def new_cluster_configuration(self, request) -> ClusterConfig: return ClusterConfig( cluster_name=ClusterName(prefix=CLUSTER_PREFIX, suffix=""))
def configs(self) -> Tuple[ClusterConfig, TerraformConfig]: """ Get configurations objects - while using configs fixture cluster and tf configs are the same For creating new Config object just call it explicitly e.g. ClusterConfig(masters_count=1) """ yield ClusterConfig(), TerraformConfig()
def override_cluster_configuration(self): config = ClusterConfig() config.cluster_id = global_variables.cluster_id return config
def test_install(self, get_nodes, get_cluster, openshift_version): new_cluster = get_cluster( cluster_config=ClusterConfig(openshift_version=openshift_version), nodes=get_nodes()) new_cluster.prepare_for_installation() new_cluster.start_install_and_wait_for_installed()
def test_olm_operator(self, get_nodes, get_cluster, olm_operator): new_cluster = get_cluster(cluster_config=ClusterConfig(olm_operators=[olm_operator]), nodes=get_nodes(TerraformConfig(olm_operators=[olm_operator]))) new_cluster.prepare_for_installation() new_cluster.start_install_and_wait_for_installed()
def start_install_and_wait_for_installed(self): cluster_name = self.config.day1_cluster_name # Running twice as a workaround for an issue with terraform not spawning a new node on first apply. for _ in range(2): with utils.file_lock_context(): utils.run_command( f"make _apply_terraform CLUSTER_NAME={cluster_name} PLATFORM={consts.Platforms.BARE_METAL}" ) time.sleep(5) num_nodes_to_wait = self.config.day2_workers_count installed_status = consts.NodesStatus.DAY2_INSTALLED tfvars = utils.get_tfvars(self.config.tf_folder) tf_network_name = tfvars["libvirt_network_name"] config = TerraformConfig() config.nodes_count = num_nodes_to_wait libvirt_controller = LibvirtController(config=config, entity_config=ClusterConfig()) libvirt_controller.wait_till_nodes_are_ready( network_name=tf_network_name) # Wait for day2 nodes waiting.wait( lambda: self.are_libvirt_nodes_in_cluster_hosts(), timeout_seconds=consts.NODES_REGISTERED_TIMEOUT, sleep_seconds=10, waiting_for="Nodes to be registered in inventory service", ) self.set_nodes_hostnames_if_needed(tf_network_name) wait_till_all_hosts_are_in_status( client=self.api_client, cluster_id=self.config.cluster_id, nodes_count=self.config.day2_workers_count, statuses=[consts.NodesStatus.KNOWN], interval=30, ) # Start day2 nodes installation log.info("Start installing all known nodes in the cluster %s", self.config.cluster_id) kubeconfig = utils.get_kubeconfig_path(self.config.day1_cluster_name) ocp_ready_nodes = self.get_ocp_cluster_ready_nodes_num(kubeconfig) hosts = self.api_client.get_cluster_hosts(self.config.cluster_id) [ self.api_client.install_day2_host(self.config.infra_env_id, host["id"]) for host in hosts if host["status"] == "known" ] log.info( "Waiting until all nodes of cluster %s have been installed (reached added-to-existing-cluster)", self.config.cluster_id, ) wait_till_all_hosts_are_in_status( client=self.api_client, cluster_id=self.config.cluster_id, nodes_count=num_nodes_to_wait, statuses=[installed_status], interval=30, ) log.info( "Waiting until installed nodes has actually been added to the OCP cluster" ) waiting.wait( lambda: self.wait_nodes_join_ocp_cluster( ocp_ready_nodes, self.config.day2_workers_count, kubeconfig), timeout_seconds=consts.NODES_REGISTERED_TIMEOUT, sleep_seconds=30, waiting_for="Day2 nodes to be added to OCP cluster", expected_exceptions=Exception, ) log.info("%d worker nodes were successfully added to OCP cluster", self.config.day2_workers_count)
def test_olm_operator(self, nodes: Nodes, cluster, olm_operator): new_cluster = cluster(cluster_config=ClusterConfig( olm_operators=[olm_operator])) new_cluster.prepare_for_installation(nodes, olm_operators=[olm_operator]) new_cluster.start_install_and_wait_for_installed()
def test_install(self, nodes: Nodes, cluster, openshift_version): new_cluster = cluster(cluster_config=ClusterConfig( openshift_version=openshift_version)) new_cluster.prepare_for_installation(nodes) new_cluster.start_install_and_wait_for_installed()
def cluster_config(self) -> ClusterConfig: yield ClusterConfig()