Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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