def get_configured_replicasets(module_hostvars, play_hosts): replicasets = {} for instance_name in play_hosts: instance_vars = module_hostvars[instance_name] if helpers.is_expelled(instance_vars) or helpers.is_stateboard( instance_vars): continue if instance_vars.get('replicaset_alias') is None: continue replicaset_alias = instance_vars['replicaset_alias'] if replicaset_alias not in replicasets: replicasets.update({ replicaset_alias: { 'instances': [], 'roles': instance_vars.get('roles', None), 'failover_priority': instance_vars.get('failover_priority', None), 'all_rw': instance_vars.get('all_rw', None), 'weight': instance_vars.get('weight', None), 'vshard_group': instance_vars.get('vshard_group', None), 'alias': replicaset_alias, } }) replicasets[replicaset_alias]['instances'].append(instance_name) return replicasets
def connect_to_membership(params): control_console = helpers.get_control_console(params['console_sock']) module_hostvars = params['module_hostvars'] play_hosts = params['play_hosts'] changed = False for instance_name, instance_vars in module_hostvars.items(): if helpers.is_expelled(instance_vars) or helpers.is_stateboard( instance_vars): continue if 'config' not in instance_vars or 'advertise_uri' not in instance_vars[ 'config']: continue connected, err = probe_server(control_console, instance_vars['config']['advertise_uri']) if err is not None and instance_name in play_hosts: return helpers.ModuleRes(failed=True, msg=err) if connected: changed = True return helpers.ModuleRes(changed=changed)
def get_alive_not_expelled_instance(params): module_hostvars = params['module_hostvars'] play_hosts = params['play_hosts'] app_name = params['app_name'] canditates_by_uris = {} for instance_name in play_hosts: instance_vars = module_hostvars[instance_name] if helpers.is_expelled(instance_vars) or helpers.is_stateboard( instance_vars): continue instance_config = instance_vars.get('config') if instance_config is None: continue advertise_uri = instance_config['advertise_uri'] canditates_by_uris[advertise_uri] = instance_name alive_not_expelled_instance_name = None for uri, instance_name in sorted(canditates_by_uris.items()): host, port = uri.rsplit(':', 1) try: conn = socket.create_connection((host, port), timeout=CONNECTION_TIMEOUT) conn.settimeout(CONNECTION_TIMEOUT) conn.recv(1024) except socket.error: continue alive_not_expelled_instance_name = instance_name break if alive_not_expelled_instance_name is None: errmsg = "Not found any alive instance that is not expelled and is not a stateboard" return helpers.ModuleRes(failed=True, msg=errmsg) instance_vars = module_hostvars[alive_not_expelled_instance_name] run_dir = instance_vars.get('cartridge_run_dir') console_sock = helpers.get_instance_console_sock( run_dir, app_name, alive_not_expelled_instance_name, ) return helpers.ModuleRes(changed=False, fact={ 'name': alive_not_expelled_instance_name, 'console_sock': console_sock, })
def get_replicaset_leaders_by_play_hosts(play_hosts, module_hostvars, control_console): cluster_instances = helpers.get_cluster_instances_with_replicasets_info( control_console) dead_replicasets = set() chosen_leaders_priority = {} # replicaset uuid: leader priority replicaset_leaders = {} for instance_name in play_hosts: instance_vars = module_hostvars[instance_name] if helpers.is_stateboard(instance_vars) or helpers.is_expelled( instance_vars): continue cluster_instance = cluster_instances.get(instance_name) if cluster_instance is None: continue instance_uuid = cluster_instance.get('uuid') if not instance_uuid: continue replicaset_uuid = cluster_instance.get('replicaset_uuid') if replicaset_uuid is None: continue replicaset_alias = cluster_instance.get('replicaset_alias', replicaset_uuid) if cluster_instance.get('status') != 'healthy': if replicaset_uuid not in replicaset_leaders: # there is no alive instances found for this replicaset dead_replicasets.add(replicaset_alias) continue if chosen_leaders_priority.get(replicaset_uuid) is not None: if cluster_instance['priority'] > chosen_leaders_priority[ replicaset_uuid]: # leader with less priority was already chosen continue replicaset_leaders[replicaset_uuid] = instance_uuid chosen_leaders_priority[replicaset_uuid] = cluster_instance['priority'] dead_replicasets.discard(replicaset_alias) return replicaset_leaders, dead_replicasets
def get_instances_to_configure(module_hostvars, play_hosts): instances = {} for instance_name in play_hosts: instance_vars = module_hostvars[instance_name] if helpers.is_stateboard(instance_vars): continue instance = {} if helpers.is_expelled(instance_vars): instance['expelled'] = True else: if 'zone' in instance_vars: instance['zone'] = instance_vars['zone'] if 'config' in instance_vars: if 'advertise_uri' in instance_vars['config']: instance['uri'] = instance_vars['config']['advertise_uri'] if instance: instances[instance_name] = instance return instances