def __init__(self): self._cnf = bus.cnf self._op_api = operation.OperationAPI() self._queryenv = bus.queryenv_service ini = self._cnf.rawini self._role_name = ini.get(config.SECT_GENERAL, config.OPT_ROLE_NAME) self.redis_instances = redis_service.RedisInstances()
def replication_status(self): """ Checks current replication status. :return: Redis replication status. :rtype: dict """ ri = redis_service.RedisInstances() if __redis__["replication_master"]: masters = {} for port in ri.ports: masters[port] = {'status': 'up'} return {'masters': masters} slaves = {} for redis_process in ri.instances: repl_data = {} for key, val in redis_process.redis_cli.info.items(): if key.startswith('master'): repl_data[key] = val if 'master_link_status' in repl_data: repl_data['status'] = repl_data['master_link_status'] slaves[redis_process.port] = repl_data return {'slaves': slaves}
def on_init(self): bus.on("host_init_response", self.on_host_init_response) bus.on("before_host_up", self.on_before_host_up) bus.on("before_reboot_start", self.on_before_reboot_start) bus.on("before_reboot_finish", self.on_before_reboot_finish) if __node__['state'] == 'running': # Fix to enable access outside farm when use_passwords=True # if self.use_passwords: # self.security_off() vol = storage2.volume(__redis__['volume']) vol.ensure(mount=True) __redis__['volume'] = vol ports = [ __redis__['defaults']['port'], ] passwords = [ self.get_main_password(), ] num_processes = 1 farm_role_id = self._cnf.rawini.get(config.SECT_GENERAL, config.OPT_FARMROLE_ID) params = self._queryenv.list_farm_role_params(farm_role_id).get( 'params', {}) if 'redis' in params: redis_data = params['redis'] for param in ('ports', 'passwords', 'num_processes'): if param not in redis_data: break else: ports = map(int, redis_data['ports']) passwords = redis_data['passwords'] num_processes = int(redis_data['num_processes']) self.redis_instances = redis.RedisInstances() self.redis_instances.init_processes(num_processes, ports, passwords) self.redis_instances.start() self._init_script = self.redis_instances.get_default_process()
def replication_status(self): ri = redis_service.RedisInstances() if ri.master: masters = {} for port in ri.ports: masters[port] = {'status':'up'} return {'masters': masters} slaves = {} for redis_process in ri.instances: repl_data = {} for key, val in redis_process.redis_cli.info.items(): if key.startswith('master'): repl_data[key] = val repl_data['status'] = repl_data['master_link_status'] slaves[redis_process.port] = repl_data return {'slaves': slaves}
def on_init(self): bus.on("host_init_response", self.on_host_init_response) bus.on("before_host_up", self.on_before_host_up) bus.on("before_reboot_start", self.on_before_reboot_start) bus.on("before_reboot_finish", self.on_before_reboot_finish) if self._cnf.state == ScalarizrState.RUNNING: # Fix to enable access outside farm when use_passwords=True if self.use_passwords: self.security_off() vol = storage2.volume(__redis__['volume']) if not vol.tags: vol.tags = self.redis_tags vol.ensure(mount=True) __redis__['volume'] = vol ports=[redis.DEFAULT_PORT,] passwords=[self.get_main_password(),] num_processes = 1 farm_role_id = self._cnf.rawini.get(config.SECT_GENERAL, config.OPT_FARMROLE_ID) params = self._queryenv.list_farm_role_params(farm_role_id) if 'redis' in params: redis_data = params['redis'] for param in ('ports', 'passwords', 'num_processes'): if param not in redis_data: break else: ports = map(int, redis_data['ports']) passwords = redis_data['passwords'] num_processes = int(redis_data['num_processes']) self.redis_instances = redis.RedisInstances(self.is_replication_master, self.persistence_type, self.use_passwords) self.redis_instances.init_processes(num_processes, ports, passwords) self.redis_instances.start() self._init_script = self.redis_instances.get_default_process()
def on_host_init_response(self, message): """ Check redis data in host init response @type message: scalarizr.messaging.Message @param message: HostInitResponse """ with bus.initialization_op as op: with op.phase(self._phase_redis): with op.step(self._step_accept_scalr_conf): if not message.body.has_key(BEHAVIOUR) or message.db_type != BEHAVIOUR: raise HandlerError("HostInitResponse message for %s behaviour must have '%s' property and db_type '%s'" % (BEHAVIOUR, BEHAVIOUR, BEHAVIOUR)) config_dir = os.path.dirname(self._volume_config_path) if not os.path.exists(config_dir): os.makedirs(config_dir) redis_data = message.redis.copy() LOG.info('Got Redis part of HostInitResponse: %s' % redis_data) if 'preset' in redis_data: self.initial_preset = redis_data['preset'] del redis_data['preset'] LOG.debug('Scalr sent current preset: %s' % self.initial_preset) ''' XXX: following line enables support for old scalr installations use_password shoud be set by postinstall script for old servers ''' redis_data[OPT_USE_PASSWORD] = redis_data.get(OPT_USE_PASSWORD, '1') ports = [] passwords = [] num_processes = 1 if 'ports' in redis_data and redis_data['ports']: ports = map(int, redis_data['ports']) del redis_data['ports'] if 'passwords' in redis_data and redis_data['passwords']: passwords = redis_data['passwords'] del redis_data['passwords'] if 'num_processes' in redis_data and redis_data['num_processes']: num_processes = int(redis_data['num_processes']) del redis_data['num_processes'] redis_data['volume'] = storage2.volume( redis_data.pop('volume_config')) if redis_data['volume'].device and \ redis_data['volume'].type in ('ebs', 'csvol', 'cinder', 'raid'): redis_data.pop('snapshot_config', None) if redis_data.get('snapshot_config'): redis_data['restore'] = backup.restore( type='snap_redis', snapshot=redis_data.pop('snapshot_config'), volume=redis_data['volume']) # Update configs __redis__.update(redis_data) __redis__['volume'].mpoint = __redis__['storage_dir'] if self.default_service.running: self.default_service.stop('Terminating default redis instance') self.redis_instances = redis.RedisInstances(self.is_replication_master, self.persistence_type, self.use_passwords) ports = ports or [redis.DEFAULT_PORT,] passwords = passwords or [self.get_main_password(),] self.redis_instances.init_processes(num_processes, ports=ports, passwords=passwords) if self.use_passwords: self.security_off()
def on_host_init_response(self, message): """ Check redis data in host init response @type message: scalarizr.messaging.Message @param message: HostInitResponse """ log = bus.init_op.logger log.info('Accept Scalr configuration') if not message.body.has_key(BEHAVIOUR) or message.db_type != BEHAVIOUR: raise HandlerError( "HostInitResponse message for %s behaviour must have '%s' property and db_type '%s'" % (BEHAVIOUR, BEHAVIOUR, BEHAVIOUR)) config_dir = os.path.dirname(self._volume_config_path) if not os.path.exists(config_dir): os.makedirs(config_dir) redis_data = message.redis.copy() LOG.info('Got Redis part of HostInitResponse: %s' % redis_data) if 'preset' in redis_data: self.initial_preset = redis_data['preset'] del redis_data['preset'] LOG.debug('Scalr sent current preset: %s' % self.initial_preset) ''' XXX: following line enables support for old scalr installations use_password shoud be set by postinstall script for old servers ''' redis_data["use_password"] = redis_data.get("use_password", '1') ports = [] passwords = [] num_processes = 1 if 'ports' in redis_data and redis_data['ports']: ports = map(int, redis_data['ports']) del redis_data['ports'] if 'passwords' in redis_data and redis_data['passwords']: passwords = redis_data['passwords'] del redis_data['passwords'] if 'num_processes' in redis_data and redis_data['num_processes']: num_processes = int(redis_data['num_processes']) del redis_data['num_processes'] redis_data['volume'] = storage2.volume(redis_data.pop('volume_config')) if redis_data['volume'].device and \ redis_data['volume'].type in ('ebs', 'csvol', 'cinder', 'raid'): redis_data.pop('snapshot_config', None) if redis_data.get('snapshot_config'): redis_data['restore'] = backup.restore( type='snap_redis', snapshot=redis_data.pop('snapshot_config'), volume=redis_data['volume']) self._hir_volume_growth = redis_data.pop('volume_growth', None) # Update configs __redis__.update(redis_data) __redis__['volume'].mpoint = __redis__['storage_dir'] __redis__['volume'].tags = self.redis_tags if self.default_service.running: self.default_service.stop('Terminating default redis instance') self.redis_instances = redis.RedisInstances() ports = ports or [ __redis__['defaults']['port'], ] passwords = passwords or [ self.get_main_password(), ] self.redis_instances.init_processes(num_processes, ports=ports, passwords=passwords) self._ensure_security()
def __init__(self): self._op_api = operation.OperationAPI() self._queryenv = bus.queryenv_service self.redis_instances = redis_service.RedisInstances()