Exemple #1
0
    def install(self, nodes=None):
        '''
        Write out the config, then restart services.

        After this runs, we should have a configured and running service.
        '''
        cfg = hookenv.config()
        myid = hookenv.local_unit().split('/')[1]
        datadir = unitdata.kv().get('zookeeper.storage.data_dir',
                                    os.path.join(APP_DATADIR))
        os.makedirs(datadir, exist_ok=True)
        context = {
            'myid': myid,
            'datadir': datadir,
            'ensemble': self.read_peers(),
            'client_bind_addr': hookenv.unit_private_ip(),
            'port': ZK_PORT,
            'autopurge_purge_interval': cfg.get('autopurge_purge_interval'),
            'autopurge_snap_retain_count':
            cfg.get('autopurge_snap_retain_count'),
            'jmx_port': cfg.get('jmx_port'),
        }

        for file_config in ('zoo.cfg', 'environment'):
            render(source=file_config,
                   target=os.path.join(APP_COMMON, file_config),
                   owner='root',
                   perms=0o644,
                   context=context)
        with open(os.path.join(datadir, 'myid'), 'w') as f:
            f.write(myid)
        self.restart()
        if self.is_zk_leader():
            zkpeer = RelationBase.from_state('zkpeer.joined')
            zkpeer.set_zk_leader()
def update_clients():
    """
    Sends the combined list of connected and external registered services
    to any connected clients.
    """
    services = all_services()
    clients = RelationBase.from_state('hub.client')
    if clients:
        clients.provide_services(services)
def all_services():
    """
    Combines both connected and external registered services.
    """
    services = kv().get('external-services', {})
    providers = RelationBase.from_state('hub.provider')
    if providers:
        for name, datas in providers.registered_services().items():
            services.setdefault(name, []).extend(datas)
    return services
def update_db_config():
    mysql = RelationBase.from_state('database.available')
    db_type = 'mysql' if mysql else 'sqlite'
    hookenv.log('Updating database config, using: %s' % db_type)
    render(source='%s.js.template' % db_type,
           target=path.join(node_dist_dir(), 'dbconfig.js'),
           context={
               'db': mysql,
               'dist_dir': node_dist_dir(),
           })
Exemple #5
0
    def get_zks(self):
        '''
        Will attempt to read zookeeper nodes from the zookeeper.joined state.

        If the flag has never been set, an empty list will be returned.
        '''
        zk = RelationBase.from_flag('zookeeper.joined')
        if zk:
            return zk.zookeepers()
        else:
            return []
Exemple #6
0
    def get_kafkas(self):
        '''
        Will attempt to read kafka nodes from the kafka.joined state.

        If the flag has never been set, an empty list will be returned.
        '''
        kafka = RelationBase.from_flag('kafka.joined')
        if kafka:
            return kafka.kafkas()
        else:
            return []
def check_db_changed():
    mysql = RelationBase.from_state('database.available')
    db_data = []
    if mysql:
        db_data.extend((
            mysql.host(),
            mysql.port(),
            mysql.database(),
            mysql.user(),
            mysql.password()
        ))
    return data_changed('ghost.db', db_data)
Exemple #8
0
    def install(self, nodes=None):
        '''
        Write out the config, then run puppet.

        After this runs, we should have a configured and running service.

        '''
        bigtop = Bigtop()
        log("Rendering site yaml ''with overrides: {}".format(self._override))
        bigtop.render_site_yaml(self._hosts, self._roles, self._override)
        bigtop.trigger_puppet()
        if self.is_zk_leader():
            zkpeer = RelationBase.from_state('zkpeer.joined')
            zkpeer.set_zk_leader()
Exemple #9
0
    def install(self, nodes=None):
        '''
        Write out the config, then run puppet.

        After this runs, we should have a configured and running service.

        '''
        bigtop = Bigtop()
        log("Rendering site yaml ''with overrides: {}".format(self._override))
        bigtop.render_site_yaml(self._hosts, self._roles, self._override)
        bigtop.trigger_puppet()
        if self.is_zk_leader():
            zkpeer = RelationBase.from_state('zkpeer.joined')
            zkpeer.set_zk_leader()
Exemple #10
0
    def read_peers(self):
        '''
        Fetch the list of peers available.

        The first item in this list should always be the node that
        this code is executing on.

        '''
        # A Zookeeper node likes to be first on the list.
        nodes = [(local_unit(), unit_private_ip())]
        # Get the list of peers
        zkpeer = RelationBase.from_state('zkpeer.joined')
        if zkpeer:
            nodes.extend(sorted(zkpeer.get_nodes()))
        nodes = [format_node(*node) for node in nodes]
        return nodes
Exemple #11
0
    def read_peers(self):
        '''
        Fetch the list of peers available.

        The first item in this list should always be the node that
        this code is executing on.

        '''
        # A Zookeeper node likes to be first on the list.
        nodes = [(local_unit(), unit_private_ip())]
        # Get the list of peers
        zkpeer = RelationBase.from_state('zkpeer.joined')
        if zkpeer:
            nodes.extend(sorted(zkpeer.get_nodes()))
        nodes = [format_node(*node) for node in nodes]
        return nodes
 def arg_gen():
     # use a generator to defer calling of hookenv.relation_type, for tests
     rel = RelationBase.from_name(hookenv.relation_type())
     if rel:
         yield rel
 def arg_gen():
     # use a generator to defer calling of hookenv.relation_type, for tests
     rel = RelationBase.from_name(hookenv.relation_type())
     if rel:
         yield rel