Esempio n. 1
0
 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()
Esempio n. 2
0
    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}
Esempio n. 3
0
    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()
Esempio n. 4
0
    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}
Esempio n. 5
0
    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()
Esempio n. 6
0
    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()
Esempio n. 7
0
    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()
Esempio n. 8
0
 def __init__(self):
     self._op_api = operation.OperationAPI()
     self._queryenv = bus.queryenv_service
     self.redis_instances = redis_service.RedisInstances()