def test_process_requests_invalid(self, mock_log): reqs = json.dumps({'api-version': 1, 'ops': [{'op': 'invalid_op'}]}) rc = ceph_broker.process_requests(reqs) self.assertEqual(json.loads(rc), { 'exit-code': 1, 'stderr': "Unknown operation 'invalid_op'" })
def radosgw_relation(relid=None, unit=None): # Install radosgw for admin tools apt_install(packages=filter_installed_packages(['radosgw'])) if not unit: unit = remote_unit() """Process broker request(s).""" if ceph.is_quorum(): settings = relation_get(rid=relid, unit=unit) if 'broker_req' in settings: if not ceph.is_leader(): log("Not leader - ignoring broker request", level=DEBUG) else: rsp = process_requests(settings['broker_req']) unit_id = unit.replace('/', '-') unit_response_key = 'broker-rsp-' + unit_id log('mon cluster in quorum - providing radosgw with keys') public_addr = get_public_addr() data = { 'fsid': leader_get('fsid'), 'radosgw_key': ceph.get_radosgw_key(), 'auth': config('auth-supported'), 'ceph-public-address': public_addr, unit_response_key: rsp, } relation_set(relation_id=relid, relation_settings=data) else: log('mon cluster not in quorum - deferring key provision')
def test_process_requests_invalid_api_version(self, mock_log): req = json.dumps({'api-version': 2, 'ops': []}) rc = ceph_broker.process_requests(req) print("Return: {}".format(rc)) self.assertEqual(json.loads(rc), {'exit-code': 1, 'stderr': 'Missing or invalid api version (2)'})
def test_process_requests_missing_api_version(self, mock_log): req = json.dumps({'ops': []}) rc = ceph_broker.process_requests(req) self.assertEqual(json.loads(rc), { 'exit-code': 1, 'stderr': 'Missing or invalid api version (None)' })
def test_process_requests_missing_api_version(self, mock_log): req = json.dumps({'ops': []}) rc = ceph_broker.process_requests(req) self.assertEqual(json.loads(rc), {'exit-code': 1, 'stderr': ('Missing or invalid api version ' '(None)')})
def radosgw_relation(relid=None, unit=None): # Install radosgw for admin tools apt_install(packages=filter_installed_packages(['radosgw'])) if not unit: unit = remote_unit() # NOTE: radosgw needs some usage OSD storage, so defer key # provision until OSD units are detected. if ready(): log('mon cluster in quorum and osds related ' '- providing radosgw with keys') public_addr = get_public_addr() data = { 'fsid': config('fsid'), 'radosgw_key': ceph.get_radosgw_key(), 'auth': 'cephx', 'ceph-public-address': public_addr, } settings = relation_get(rid=relid, unit=unit) """Process broker request(s).""" if 'broker_req' in settings: rsp = process_requests(settings['broker_req']) unit_id = unit.replace('/', '-') unit_response_key = 'broker-rsp-' + unit_id data[unit_response_key] = rsp relation_set(relation_id=relid, relation_settings=data) else: log('FSID or admin key not provided, please configure them')
def radosgw_relation(relid=None, unit=None): # Install radosgw for admin tools apt_install(packages=filter_installed_packages(['radosgw'])) if not unit: unit = remote_unit() # NOTE: radosgw needs some usage OSD storage, so defer key # provision until OSD units are detected. if ready(): log('mon cluster in quorum and osds related ' '- providing radosgw with keys') public_addr = get_public_addr() data = { 'fsid': config('fsid'), 'radosgw_key': ceph.get_radosgw_key(), 'auth': 'cephx', 'ceph-public-address': public_addr, } settings = relation_get(rid=relid, unit=unit) """Process broker request(s).""" if 'broker_req' in settings: if ceph.is_leader(): rsp = process_requests(settings['broker_req']) unit_id = unit.replace('/', '-') unit_response_key = 'broker-rsp-' + unit_id data[unit_response_key] = rsp else: log("Not leader - ignoring broker request", level=DEBUG) relation_set(relation_id=relid, relation_settings=data) else: log('FSID or admin key not provided, please configure them')
def radosgw_relation(relid=None, unit=None): # Install radosgw for admin tools apt_install(packages=filter_installed_packages(['radosgw'])) if not unit: unit = remote_unit() # NOTE: radosgw needs some usage OSD storage, so defer key # provision until OSD units are detected. if ceph.is_quorum() and related_osds(): log('mon cluster in quorum and osds related ' '- providing radosgw with keys') public_addr = get_public_addr() data = { 'fsid': leader_get('fsid'), 'radosgw_key': ceph.get_radosgw_key(), 'auth': config('auth-supported'), 'ceph-public-address': public_addr, } settings = relation_get(rid=relid, unit=unit) """Process broker request(s).""" if 'broker_req' in settings: if ceph.is_leader(): rsp = process_requests(settings['broker_req']) unit_id = unit.replace('/', '-') unit_response_key = 'broker-rsp-' + unit_id data[unit_response_key] = rsp else: log("Not leader - ignoring broker request", level=DEBUG) relation_set(relation_id=relid, relation_settings=data) else: log('mon cluster not in quorum or no osds - deferring key provision')
def test_process_requests_invalid_api_rid(self, mock_log): reqs = json.dumps({'api-version': 0, 'request-id': '1ef5aede', 'ops': [{'op': 'create-pool'}]}) rc = ceph_broker.process_requests(reqs) self.assertEqual(json.loads(rc)['exit-code'], 1) self.assertEqual(json.loads(rc)['stderr'], "Missing or invalid api version (0)") self.assertEqual(json.loads(rc)['request-id'], '1ef5aede')
def test_process_requests_create_pool(self, mock_log, mock_pool_exists, mock_create_pool): mock_pool_exists.return_value = False reqs = json.dumps({'api-version': 1, 'ops': [{'op': 'create-pool', 'name': 'foo', 'replicas': 3}]}) rc = ceph_broker.process_requests(reqs) mock_pool_exists.assert_called_with(service='admin', name='foo') mock_create_pool.assert_called_with(service='admin', name='foo', replicas=3, pg_num=None) self.assertEqual(json.loads(rc), {'exit-code': 0})
def test_process_requests_create_pool_w_pg_num_capped(self, mock_log, mock_pool_exists, mock_replicated_pool, mock_get_osds): mock_get_osds.return_value = [0, 1, 2] mock_pool_exists.return_value = False reqs = json.dumps({'api-version': 1, 'ops': [{ 'op': 'create-pool', 'name': 'foo', 'replicas': 3, 'pg_num': 300}]}) rc = ceph_broker.process_requests(reqs) mock_pool_exists.assert_called_with(service='admin', name='foo') mock_replicated_pool.assert_called_with(service='admin', name='foo', replicas=3, pg_num=100) self.assertEqual(json.loads(rc), {'exit-code': 0}) self.assertEqual(json.loads(rc), {'exit-code': 0})
def client_relation_changed(): """Process broker requests from ceph client relations.""" if ready(): settings = relation_get() if 'broker_req' in settings: if not ceph.is_leader(): log("Not leader - ignoring broker request", level=DEBUG) else: rsp = process_requests(settings['broker_req']) unit_id = remote_unit().replace('/', '-') unit_response_key = 'broker-rsp-' + unit_id # broker_rsp is being left for backward compatibility, # unit_response_key superscedes it data = { 'broker_rsp': rsp, unit_response_key: rsp, } relation_set(relation_settings=data) else: log('FSID or admin key not provided, please configure them')
def test_process_requests_invalid(self, mock_log): reqs = json.dumps({'api-version': 1, 'ops': [{'op': 'invalid_op'}]}) rc = ceph_broker.process_requests(reqs) self.assertEqual(json.loads(rc), {'exit-code': 1, 'stderr': "Unknown operation 'invalid_op'"})
def test_process_requests_noop(self, mock_log): req = json.dumps({'api-version': 1, 'ops': []}) rc = ceph_broker.process_requests(req) self.assertEqual(json.loads(rc), {'exit-code': 0})