Пример #1
0
 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'"
     })
Пример #2
0
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')
Пример #3
0
 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)'})
Пример #4
0
 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)'
     })
Пример #5
0
 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)')})
Пример #6
0
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')
Пример #8
0
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 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')
Пример #10
0
 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')
Пример #11
0
 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')
Пример #12
0
 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})
Пример #13
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})
Пример #14
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 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')
Пример #16
0
 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'"})
Пример #17
0
 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})
Пример #18
0
 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})