def install_odf_addon(cluster): """ Install ODF Managed Service addon to cluster. Args: cluster (str): cluster name or cluster id """ addon_name = config.DEPLOYMENT["addon_name"] size = config.ENV_DATA["size"] notification_email_0 = config.REPORTING.get("notification_email_0") notification_email_1 = config.REPORTING.get("notification_email_1") notification_email_2 = config.REPORTING.get("notification_email_2") cmd = f"rosa install addon --cluster={cluster} --size {size} {addon_name}" f" --yes" if notification_email_0: cmd = cmd + f" --notification-email-0 {notification_email_0}" if notification_email_1: cmd = cmd + f" --notification-email-1 {notification_email_1}" if notification_email_2: cmd = cmd + f" --notification-email-2 {notification_email_2}" utils.run_cmd(cmd) for addon_info in utils.TimeoutSampler(4000, 30, get_addon_info, cluster, addon_name): logger.info(f"Current addon installation info: " f"{addon_info}") if "ready" in addon_info: logger.info(f"Addon {addon_name} was installed") break if "failed" in addon_info: raise ManagedServiceAddonDeploymentError( f"Addon {addon_name} failed to be installed")
def delete_odf_addon(cluster): """ Delete ODF Managed Service addon from cluster. Args: cluster (str): cluster name or cluster id """ cluster_type = config.ENV_DATA.get("cluster_type", "") if cluster_type.lower() == "provider" and config.ENV_DATA.get( "appliance_mode"): logger.info("Addon uninstallation is not allowed for appliance mode" " managed service. It can be changed after fix of " "https://issues.redhat.com/browse/SDA-6011") # TODO : Update rosa delete service addon command after completion of jira SDA-6011 return addon_name = config.ENV_DATA["addon_name"] cmd = f"rosa uninstall addon --cluster={cluster} {addon_name} --yes" utils.run_cmd(cmd) for addon_info in utils.TimeoutSampler(4000, 30, get_addon_info, cluster, addon_name): logger.info(f"Current addon installation info: " f"{addon_info}") if "not installed" in addon_info: logger.info(f"Addon {addon_name} was uninstalled") break if "failed" in addon_info: raise ManagedServiceAddonDeploymentError( f"Addon {addon_name} failed to be uninstalled")
def install_odf_addon(cluster): """ Install ODF Managed Service addon to cluster. Args: cluster (str): cluster name or cluster id """ addon_name = config.ENV_DATA["addon_name"] size = config.ENV_DATA["size"] cluster_type = config.ENV_DATA.get("cluster_type", "") provider_name = config.ENV_DATA.get("provider_name", "") notification_email_0 = config.REPORTING.get("notification_email_0") notification_email_1 = config.REPORTING.get("notification_email_1") notification_email_2 = config.REPORTING.get("notification_email_2") cmd = f"rosa install addon --cluster={cluster} --size {size} {addon_name}" f" --yes" if notification_email_0: cmd = cmd + f" --notification-email-0 {notification_email_0}" if notification_email_1: cmd = cmd + f" --notification-email-1 {notification_email_1}" if notification_email_2: cmd = cmd + f" --notification-email-2 {notification_email_2}" if cluster_type.lower() == "provider": public_key = config.AUTH.get("managed_service", {}).get("public_key", "") if not public_key: raise ConfigurationError( "Public key for Managed Service not defined.\n" "Expected following configuration in auth.yaml file:\n" "managed_service:\n" ' private_key: "..."\n' ' public_key: "..."') public_key_only = remove_header_footer_from_key(public_key) cmd += f' --onboarding-validation-key "{public_key_only}"' if cluster_type.lower() == "consumer" and provider_name: unit = config.ENV_DATA.get("unit", "Ti") storage_provider_endpoint = get_storage_provider_endpoint( provider_name) cmd += f' --unit "{unit}" --storage-provider-endpoint "{storage_provider_endpoint}"' onboarding_ticket = generate_onboarding_token() if onboarding_ticket: cmd += f' --onboarding-ticket "{onboarding_ticket}"' else: raise ValueError(" Invalid onboarding ticket configuration") utils.run_cmd(cmd, timeout=1200) for addon_info in utils.TimeoutSampler(7200, 30, get_addon_info, cluster, addon_name): logger.info(f"Current addon installation info: " f"{addon_info}") if "ready" in addon_info: logger.info(f"Addon {addon_name} was installed") break if "failed" in addon_info: raise ManagedServiceAddonDeploymentError( f"Addon {addon_name} failed to be installed")
def delete_odf_addon(cluster): """ Delete ODF Managed Service addon from cluster. Args: cluster (str): cluster name or cluster id """ addon_name = config.DEPLOYMENT["addon_name"] cmd = f"rosa uninstall addon --cluster={cluster} {addon_name} --yes" utils.run_cmd(cmd) for addon_info in utils.TimeoutSampler(4000, 30, get_addon_info, cluster, addon_name): logger.info(f"Current addon installation info: " f"{addon_info}") if "not installed" in addon_info: logger.info(f"Addon {addon_name} was uninstalled") break if "failed" in addon_info: raise ManagedServiceAddonDeploymentError( f"Addon {addon_name} failed to be uninstalled")
def appliance_mode_cluster(cluster_name): """ Create appliance mode provider cluster Args: cluster_name (str): Cluster name """ addon_name = config.ENV_DATA.get("addon_name", "") size = config.ENV_DATA["size"] public_key = config.AUTH.get("managed_service", {}).get("public_key", "") notification_email_0 = config.REPORTING.get("notification_email_0") notification_email_1 = config.REPORTING.get("notification_email_1") notification_email_2 = config.REPORTING.get("notification_email_2") region = config.ENV_DATA.get("region", "") private_link = config.ENV_DATA.get("private_link", False) machine_cidr = config.ENV_DATA.get("machine-cidr", "10.0.0.0/16") if not public_key: raise ConfigurationError( "Public key for Managed Service not defined.\n" "Expected following configuration in auth.yaml file:\n" "managed_service:\n" ' private_key: "..."\n' ' public_key: "..."') public_key_only = remove_header_footer_from_key(public_key) subnet_ids = config.ENV_DATA["ms_provider_subnet_ids_per_region"][region][ "private_subnet"] if not private_link: subnet_ids += f",{config.ENV_DATA['ms_provider_subnet_ids_per_region'][region]['public_subnet']}" cmd = (f"rosa create service --type {addon_name} --name {cluster_name} " f"--machine-cidr {machine_cidr} --size {size} " f"--onboarding-validation-key {public_key_only} " f"--subnet-ids {subnet_ids}") if private_link: cmd += " --private-link " if notification_email_0: cmd = cmd + f" --notification-email-0 {notification_email_0}" if notification_email_1: cmd = cmd + f" --notification-email-1 {notification_email_1}" if notification_email_2: cmd = cmd + f" --notification-email-2 {notification_email_2}" if region: cmd = cmd + f" --region {region}" utils.run_cmd(cmd, timeout=1200) logger.info( "Waiting for ROSA cluster status changed to waiting or pending state") for cluster_info in utils.TimeoutSampler(4500, 30, ocm.get_cluster_details, cluster_name): status = cluster_info["status"]["state"] logger.info(f"Current installation status: {status}") if status == "waiting" or status == "pending": logger.info(f"Cluster is in {status} state") break create_operator_roles(cluster_name) create_oidc_provider(cluster_name) logger.info("Waiting for installation of ROSA cluster") for cluster_info in utils.TimeoutSampler(4500, 30, ocm.get_cluster_details, cluster_name): status = cluster_info["status"]["state"] logger.info(f"Cluster installation status: {status}") if status == "ready": logger.info("Cluster is installed") break if cluster_info["status"]["state"] == "ready": for addon_info in utils.TimeoutSampler(7200, 30, get_addon_info, cluster_name, addon_name): logger.info(f"Current addon installation info: " f"{addon_info}") if "ready" in addon_info: logger.info(f"Addon {addon_name} is installed") break if "failed" in addon_info: logger.warning(f"Addon {addon_name} failed to be installed") addon_info = get_addon_info(cluster_name, addon_name) if "failed" in addon_info: raise ManagedServiceAddonDeploymentError( f"Addon {addon_name} failed to be installed") logger.info("Waiting for ROSA service ready status") for service_status in utils.TimeoutSampler(7200, 30, get_rosa_service_details, cluster_name): if "ready" in service_status: logger.info(f"service {cluster_name} is ready") break elif "failed" in service_status: logger.info(f"service {cluster_name} is failed") break else: logger.info(f"Current service creation status: {service_status}") # Create metadata file to store the cluster name cluster_info = ocm.get_cluster_details(cluster_name) cluster_info["clusterName"] = cluster_name cluster_info["clusterID"] = cluster_info["id"] cluster_path = config.ENV_DATA["cluster_path"] metadata_file = os.path.join(cluster_path, "metadata.json") with open(metadata_file, "w+") as f: json.dump(cluster_info, f)