def get_server_params(instance_name, instance_params, cluster_instances,
                      allow_missed_instances):
    if instance_name not in cluster_instances:
        if instance_params.get('expelled') is True:
            return None, None

        msg = "Instance %s isn't found in cluster" % instance_name
        if allow_missed_instances:
            helpers.warn(msg)
            return None, None
        else:
            return None, msg

    cluster_instance = cluster_instances[instance_name]

    if not cluster_instance.get('uuid'):  # uuid is '' for unjoined instances
        return None, None

    server_params = {
        'uuid': cluster_instance.get('uuid'),
    }

    if instance_params.get('expelled') is True:
        server_params['expelled'] = True
    else:
        for param_name in ['zone', 'uri']:
            add_server_param_if_required(server_params, instance_params,
                                         cluster_instance, param_name)

    if len(server_params) == 1:
        # there are only `uuid`, all instance parameters are the same as configured
        return None, None

    return server_params, None
def check_filtered_instances(instances, filtered_instances, fmt,
                             allow_missed_instances):
    if len(instances) == len(filtered_instances):
        return None

    missed_instances = ', '.join(
        sorted(set(instances).difference(filtered_instances)))

    msg = fmt % missed_instances

    if allow_missed_instances:
        helpers.warn(msg)
        return None

    return msg
예제 #3
0
def check_cluster_issues(params):
    allow_warnings = params['allow_warnings']
    show_issues = params['show_issues']
    console_sock = params['console_sock']

    control_console = helpers.get_control_console(console_sock)

    issues, err = control_console.eval_res_err('''
        return require('cartridge.issues').list_on_cluster()
    ''')

    if err is not None:
        msg = "Received error on getting list of cluster issues: %s" % err
        if issues is None:
            return helpers.ModuleRes(failed=True, msg=msg)

        helpers.warn(msg)

    issues_by_level = {}
    for issue in issues:
        level = issue['level']
        if level not in issues_by_level:
            issues_by_level[level] = []

        issues_by_level[level].append(issue)

    if show_issues:
        messages = get_messages(issues_by_level)
        helpers.warn(*messages)

    if issues:
        if allow_warnings:
            critical_issues_num = len(issues) - len(issues_by_level.get('warning', []))
            if critical_issues_num > 0:
                return helpers.ModuleRes(failed=True, msg="Cluster has %s critical issues" % critical_issues_num)
        else:
            return helpers.ModuleRes(failed=True, msg="Cluster has %s issues" % len(issues))

    return helpers.ModuleRes(changed=False)