def get_control_instance(params): module_hostvars = params['module_hostvars'] play_hosts = params['play_hosts'] console_sock = params['console_sock'] app_name = params['app_name'] control_console = helpers.get_control_console(console_sock) control_instance_name, err = get_control_instance_name( module_hostvars, play_hosts, control_console) if err is not None: return helpers.ModuleRes(failed=True, msg=err) # in the ideal imagined world we could just use # instance_vars['instance_info'], but if control instance is not # in play_hosts, instance_info isn't computed for it instance_vars = module_hostvars[control_instance_name] run_dir = instance_vars.get('cartridge_run_dir') control_instance_console_sock = helpers.get_instance_console_sock( run_dir, app_name, control_instance_name, ) http_port = instance_vars.get('config', {}).get('http_port') return helpers.ModuleRes(changed=False, fact={ 'name': control_instance_name, 'console_sock': control_instance_console_sock, 'http_port': http_port, })
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_instance_info(params): app_name = params['app_name'] instance_name = params['instance_name'] instance_vars = params['instance_vars'] instance_info = {'paths_to_remove_on_expel': []} # app conf file instance_info['app_conf_file'] = get_app_conf_file( instance_vars['cartridge_conf_dir'], app_name) # instance conf file instance_info['conf_file'] = get_instance_conf_file( instance_vars['cartridge_conf_dir'], app_name, instance_name, instance_vars['stateboard'], ) instance_info['paths_to_remove_on_expel'].append( instance_info['conf_file']) # instance id (e.g. used for conf section name) instance_info['instance_id'] = get_instance_conf_section( app_name, instance_name, instance_vars['stateboard']) # console socket, PID file paths instance_info['console_sock'] = helpers.get_instance_console_sock( instance_vars['cartridge_run_dir'], app_name, instance_name, instance_vars['stateboard']) instance_info['paths_to_remove_on_expel'].append( instance_info['console_sock']) instance_info['pid_file'] = helpers.get_instance_pid_file( instance_vars['cartridge_run_dir'], app_name, instance_name, instance_vars['stateboard']) # instance work dir instance_info['work_dir'] = helpers.get_instance_dir( instance_vars['cartridge_data_dir'], app_name, instance_name, instance_vars['stateboard']) instance_info['paths_to_remove_on_expel'].append(instance_info['work_dir']) # instance memtx dir instance_info['memtx_dir'] = None if instance_vars['cartridge_memtx_dir_parent']: instance_info['memtx_dir'] = helpers.get_instance_dir( instance_vars['cartridge_memtx_dir_parent'], app_name, instance_name, instance_vars['stateboard']) instance_info['paths_to_remove_on_expel'].append( instance_info['memtx_dir']) # instance vinyl dir instance_info['vinyl_dir'] = None if instance_vars['cartridge_vinyl_dir_parent']: instance_info['vinyl_dir'] = helpers.get_instance_dir( instance_vars['cartridge_vinyl_dir_parent'], app_name, instance_name, instance_vars['stateboard']) instance_info['paths_to_remove_on_expel'].append( instance_info['vinyl_dir']) # instance wal dir instance_info['wal_dir'] = None if instance_vars['cartridge_wal_dir_parent']: instance_info['wal_dir'] = helpers.get_instance_dir( instance_vars['cartridge_wal_dir_parent'], app_name, instance_name, instance_vars['stateboard']) instance_info['paths_to_remove_on_expel'].append( instance_info['wal_dir']) # systemd service name instance_info['systemd_service'] = get_instance_systemd_service( app_name, instance_name, instance_vars['stateboard']) # tmpfiles conf instance_info['tmpfiles_conf'] = os.path.join( instance_vars['cartridge_tmpfiles_dir'], '%s.conf' % app_name) # code dirs if not instance_vars['cartridge_multiversion']: dist_dir = os.path.join(instance_vars['cartridge_app_install_dir'], app_name) instance_info['dist_dir'] = dist_dir instance_info['instance_dist_dir'] = dist_dir else: instance_info['dist_dir'] = get_multiversion_dist_dir( instance_vars['cartridge_app_install_dir'], instance_vars.get('cartridge_package_path')) instance_info[ 'instance_dist_dir'] = helpers.get_multiversion_instance_code_dir( instance_vars['cartridge_app_instances_dir'], app_name, instance_name, instance_vars['stateboard'], ) return helpers.ModuleRes(changed=False, fact=instance_info)
def get_systemd_units_info(params): app_name = params['app_name'] instance_vars = params['instance_vars'] tnt_version = params['tnt_version'] systemd_units_info = {} stateboard_name = helpers.get_instance_id(app_name, stateboard=True) systemd_units_info['stateboard_name'] = stateboard_name systemd_units_info['app_unit_file'] = '%[email protected]' % app_name systemd_units_info['stateboard_unit_file'] = '%s.service' % stateboard_name systemd_units_info['instance_work_dir'] = helpers.get_instance_dir( instance_vars['cartridge_data_dir'], app_name, instance_name="%i" ) systemd_units_info['stateboard_work_dir'] = helpers.get_instance_dir( instance_vars['cartridge_data_dir'], app_name, stateboard=True ) systemd_units_info['instance_memtx_dir'] = None systemd_units_info['stateboard_memtx_dir'] = None if instance_vars['cartridge_memtx_dir_parent']: systemd_units_info['instance_memtx_dir'] = helpers.get_instance_dir( instance_vars['cartridge_memtx_dir_parent'], app_name, instance_name="%i" ) systemd_units_info['stateboard_memtx_dir'] = helpers.get_instance_dir( instance_vars['cartridge_memtx_dir_parent'], app_name, stateboard=True ) systemd_units_info['instance_vinyl_dir'] = None systemd_units_info['stateboard_vinyl_dir'] = None if instance_vars['cartridge_vinyl_dir_parent']: systemd_units_info['instance_vinyl_dir'] = helpers.get_instance_dir( instance_vars['cartridge_vinyl_dir_parent'], app_name, instance_name="%i" ) systemd_units_info['stateboard_vinyl_dir'] = helpers.get_instance_dir( instance_vars['cartridge_vinyl_dir_parent'], app_name, stateboard=True ) systemd_units_info['instance_wal_dir'] = None systemd_units_info['stateboard_wal_dir'] = None if instance_vars['cartridge_wal_dir_parent']: systemd_units_info['instance_wal_dir'] = helpers.get_instance_dir( instance_vars['cartridge_wal_dir_parent'], app_name, instance_name="%i" ) systemd_units_info['stateboard_wal_dir'] = helpers.get_instance_dir( instance_vars['cartridge_wal_dir_parent'], app_name, stateboard=True ) systemd_units_info['instance_pid_file'] = helpers.get_instance_pid_file( instance_vars['cartridge_run_dir'], app_name, instance_name="%i" ) systemd_units_info['stateboard_pid_file'] = helpers.get_instance_pid_file( instance_vars['cartridge_run_dir'], app_name, stateboard=True ) systemd_units_info['instance_console_sock'] = helpers.get_instance_console_sock( instance_vars['cartridge_run_dir'], app_name, instance_name="%i" ) systemd_units_info['stateboard_console_sock'] = helpers.get_instance_console_sock( instance_vars['cartridge_run_dir'], app_name, stateboard=True ) if not instance_vars['cartridge_multiversion']: instance_dist_dir = instance_vars['dist_dir'] stateboard_dir = instance_vars['dist_dir'] else: instances_dir = instance_vars['cartridge_app_instances_dir'] instance_dist_dir = helpers.get_multiversion_instance_code_dir( instances_dir, app_name, instance_name="%i", ) stateboard_dir = helpers.get_multiversion_instance_code_dir( instances_dir, app_name, stateboard=True, ) systemd_units_info['instance_entrypoint'] = os.path.join(instance_dist_dir, 'init.lua') systemd_units_info['stateboard_entrypoint'] = os.path.join(stateboard_dir, 'stateboard.init.lua') if tnt_version: opensource_tarantool_binary = '/usr/bin/tarantool' systemd_units_info['instance_tarantool_binary'] = opensource_tarantool_binary systemd_units_info['stateboard_tarantool_binary'] = opensource_tarantool_binary else: systemd_units_info['instance_tarantool_binary'] = os.path.join(instance_dist_dir, 'tarantool') systemd_units_info['stateboard_tarantool_binary'] = os.path.join(stateboard_dir, 'tarantool') return helpers.ModuleRes(changed=False, fact=systemd_units_info)