def _host_check_remote_node(host_info_dict): # Version of services may not be the same across the existing cluster # nodes, so it's not easy to make this check properly. report_list = [] required_service_list = ["pacemaker_remote"] required_as_stopped_service_list = (required_service_list + ["pacemaker", "corosync"]) for host_name, host_info in host_info_dict.items(): try: services = host_info["services"] missing_service_list = [ service for service in required_service_list if not services[service]["installed"] ] if missing_service_list: report_list.append( reports.service_not_installed(host_name, missing_service_list)) cannot_be_running_service_list = [ service for service in required_as_stopped_service_list if service in services and services[service]["running"] ] if cannot_be_running_service_list: report_list.append( reports.host_already_in_cluster_services( host_name, cannot_be_running_service_list, )) if host_info["cluster_configuration_exists"]: report_list.append( reports.host_already_in_cluster_config(host_name)) except (KeyError, TypeError): report_list.append(reports.invalid_response_format(host_name)) return report_list
def _host_check_remote_node(host_info_dict): # Version of services may not be the same across the existing cluster # nodes, so it's not easy to make this check properly. report_list = [] required_service_list = ["pacemaker_remote"] required_as_stopped_service_list = ( required_service_list + ["pacemaker", "corosync"] ) for host_name, host_info in host_info_dict.items(): try: services = host_info["services"] missing_service_list = [ service for service in required_service_list if not services[service]["installed"] ] if missing_service_list: report_list.append(reports.service_not_installed( host_name, missing_service_list )) cannot_be_running_service_list = [ service for service in required_as_stopped_service_list if service in services and services[service]["running"] ] if cannot_be_running_service_list: report_list.append( reports.host_already_in_cluster_services( host_name, cannot_be_running_service_list, ) ) if host_info["cluster_configuration_exists"]: report_list.append( reports.host_already_in_cluster_config(host_name) ) except (KeyError, TypeError): report_list.append(reports.invalid_response_format(host_name)) return report_list
def _host_check_cluster_setup(host_info_dict, force, check_services_versions=True): report_list = [] # We only care about services which matter for creating a cluster. It does # not make sense to check e.g. booth when a) it will never be used b) it # will be used in a year - which means we should do the check in a year. service_version_dict = { "pacemaker": {}, "corosync": {}, "pcsd": {}, } required_service_list = ["pacemaker", "corosync"] required_as_stopped_service_list = (required_service_list + ["pacemaker_remote"]) report_severity = (ReportItemSeverity.ERROR if not force else ReportItemSeverity.WARNING) cluster_exists_on_nodes = False for host_name, host_info in host_info_dict.items(): try: services = host_info["services"] if check_services_versions: for service, version_dict in service_version_dict.items(): version_dict[host_name] = services[service]["version"] missing_service_list = [ service for service in required_service_list if not services[service]["installed"] ] if missing_service_list: report_list.append( reports.service_not_installed(host_name, missing_service_list)) cannot_be_running_service_list = [ service for service in required_as_stopped_service_list if service in services and services[service]["running"] ] if cannot_be_running_service_list: cluster_exists_on_nodes = True report_list.append( reports.host_already_in_cluster_services( host_name, cannot_be_running_service_list, severity=report_severity, )) if host_info["cluster_configuration_exists"]: cluster_exists_on_nodes = True report_list.append( reports.host_already_in_cluster_config( host_name, severity=report_severity, )) except KeyError: report_list.append(reports.invalid_response_format(host_name)) if check_services_versions: for service, version_dict in service_version_dict.items(): report_list.extend( _check_for_not_matching_service_versions( service, version_dict)) if cluster_exists_on_nodes and not force: report_list.append(reports.cluster_will_be_destroyed()) return report_list