From baa308c0248c1371b53967237376587c56fe3ced Mon Sep 17 00:00:00 2001 From: Chris Holcombe Date: Thu, 29 Sep 2016 10:56:46 -0700 Subject: [PATCH] WIP --- requires.py | 66 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 54 insertions(+), 12 deletions(-) diff --git a/requires.py b/requires.py index dfd4201..3aa58b0 100644 --- a/requires.py +++ b/requires.py @@ -1,34 +1,76 @@ import socket -from charms.reactive import hook + +from charms.reactive import hook, set_state from charms.reactive import RelationBase from charms.reactive import scopes from charms.reactive import is_state +from charmhelpers.core.hookenv import ( + DEBUG) +from charmhelpers.core.hookenv import ( + log, status_set, service_name) +from charmhelpers.contrib.storage.linux.ceph import ( + CephBrokerRq, + is_request_complete, + send_request_if_needed, +) + + +# Each CephFS juju service gets its own set of data/metadata pools +def create_broker_requests(): + log("Creating broker request") + name = socket.gethostname() + rq = CephBrokerRq() + rq.add_op_create_pool(name="{}_data".format(service_name()), + replica_count=3, + weight=None) + rq.add_op_create_pool(name="{}_metadata".format(service_name()), + replica_count=3, + weight=None) + # Create CephFS + rq.ops.append( + { + 'op': 'create-cephfs', + 'mds_name': name, + 'data_pool': "data_{}".format(name), + 'metadata_pool': "metadata_{}".format(name), + } + ) + return rq + + +def async_pool_request(): + status_set('maintenance', "Requesting CephFS pool creation") + rq = create_broker_requests() + + if is_request_complete(rq, relation='mds'): + log('Broker request complete', level=DEBUG) + set_state("cephfs.pools.created") + status_set('maintenance', "CephFS pools created") + else: + log('sending broker request: {}'.format(rq), + level=DEBUG) + send_request_if_needed(rq, relation='mds') class CephClient(RelationBase): scope = scopes.GLOBAL - auto_accessors = ['key', 'fsid', 'auth', 'mon_hosts', 'admin_key'] + auto_accessors = ['key', 'fsid', 'auth', + 'ceph-public-address'] @hook('{requires:ceph-mds}-relation-{joined,changed}') def changed(self): self.set_remote(key='mds-name', value=socket.gethostname()) self.set_state('{relation_name}.connected') - admin_key = None key = None fsid = None auth = None - mon_hosts = None + ceph_public_address = None try: key = self.key except AttributeError: pass - try: - admin_key = self.admin_key - except AttributeError: - pass - try: fsid = self.fsid except AttributeError: @@ -40,20 +82,20 @@ class CephClient(RelationBase): pass try: - mon_hosts = self.mon_hosts + ceph_public_address = self.ceph_public_address except AttributeError: pass data = { 'key': key, - 'admin_key': admin_key, 'fsid': fsid, 'auth': auth, - 'mon_hosts': mon_hosts + 'ceph_public_address': ceph_public_address } if all(data.values()): self.set_state('{relation_name}.available') + async_pool_request() @hook('{requires:ceph-mds}-relation-{broken,departed}') def broken(self):