def test_ensure_ceph_keyring_no_relation_no_data(self, rget, runits, rids): rids.return_value = [] self.assertEquals(False, ceph_utils.ensure_ceph_keyring(service='foo')) rids.return_value = ['ceph:0'] runits.return_value = ['ceph/0'] rget.return_value = '' self.assertEquals(False, ceph_utils.ensure_ceph_keyring(service='foo'))
def ceph_changed(): if 'ceph' not in CONFIGS.complete_contexts(): log('ceph relation incomplete. Peer not ready?') return service = service_name() if not ensure_ceph_keyring(service=service, user='******', group='cinder'): log('Could not create ceph keyring: peer not ready?') return try: if is_request_complete(get_ceph_request()): log('Request complete') CONFIGS.write_all() for rid in relation_ids('storage-backend'): storage_backend(rid) for r_id in relation_ids('ceph-access'): ceph_access_joined(r_id) # Ensure that cinder-volume is restarted since only now can we # guarantee that ceph resources are ready. service_restart('cinder-volume') else: send_request_if_needed(get_ceph_request()) except ValueError as e: # The end user has most likely provided a invalid value for a # configuration option. Just log the traceback here, the end user will # be notified by assess_status() called at the end of the hook # execution. log('Caught ValueError, invalid value provided for configuration?: ' '"{}"'.format(str(e)), level=DEBUG)
def ceph_changed(): if 'ceph' not in CONFIGS.complete_contexts(): log('ceph relation incomplete. Peer not ready?') return if not ensure_ceph_keyring(service=service_name(), user='******', group='nova'): log('Could not create ceph keyring: peer not ready?') return CONFIGS.write(ceph_config_file()) CONFIGS.write(CEPH_SECRET) CONFIGS.write(NOVA_CONF) # With some refactoring, this can move into NovaComputeCephContext # and allow easily extended to support other compute flavors. if config('virt-type') in ['kvm', 'qemu', 'lxc'] and relation_get('key'): create_libvirt_secret(secret_file=CEPH_SECRET, secret_uuid=CEPH_SECRET_UUID, key=relation_get('key')) if (config('libvirt-image-backend') == 'rbd' and assert_libvirt_imagebackend_allowed()): if is_request_complete(get_ceph_request()): log('Request complete') # Ensure that nova-compute is restarted since only now can we # guarantee that ceph resources are ready. service_restart('nova-compute') else: send_request_if_needed(get_ceph_request())
def ceph_changed(rid=None, unit=None): if 'ceph' not in CONFIGS.complete_contexts(): log('ceph relation incomplete. Peer not ready?') return if not ensure_ceph_keyring( service=service_name(), user='******', group='nova'): log('Could not create ceph keyring: peer not ready?') return CONFIGS.write(ceph_config_file()) CONFIGS.write(CEPH_SECRET) CONFIGS.write(NOVA_CONF) # With some refactoring, this can move into NovaComputeCephContext # and allow easily extended to support other compute flavors. key = relation_get(attribute='key', rid=rid, unit=unit) if config('virt-type') in ['kvm', 'qemu', 'lxc'] and key: create_libvirt_secret(secret_file=CEPH_SECRET, secret_uuid=CEPH_SECRET_UUID, key=key) if is_request_complete(get_ceph_request()): log('Request complete') # Ensure that nova-compute is restarted since only now can we # guarantee that ceph resources are ready, but only if not paused. if (not is_unit_paused_set() and not is_broker_action_done('nova_compute_restart', rid, unit)): service_restart('nova-compute') mark_broker_action_done('nova_compute_restart', rid, unit) else: send_request_if_needed(get_ceph_request())
def ceph_changed(rid=None, unit=None): if 'ceph' not in CONFIGS.complete_contexts(): log('ceph relation incomplete. Peer not ready?') return if not ensure_ceph_keyring( service=service_name(), user='******', group='nova'): log('Could not create ceph keyring: peer not ready?') return CONFIGS.write(ceph_config_file()) CONFIGS.write(CEPH_SECRET) CONFIGS.write(NOVA_CONF) # With some refactoring, this can move into NovaComputeCephContext # and allow easily extended to support other compute flavors. key = relation_get(attribute='key', rid=rid, unit=unit) if config('virt-type') in ['kvm', 'qemu', 'lxc'] and key: create_libvirt_secret(secret_file=CEPH_SECRET, secret_uuid=CEPH_SECRET_UUID, key=key) try: _handle_ceph_request() except ValueError as e: # The end user has most likely provided a invalid value for a # configuration option. Just log the traceback here, the end # user will be notified by assess_status() called at the end of # the hook execution. log('Caught ValueError, invalid value provided for ' 'configuration?: "{}"'.format(str(e)), level=DEBUG)
def ceph_changed(): if 'ceph' not in CONFIGS.complete_contexts(): log('ceph relation incomplete. Peer not ready?') return service = service_name() if not ensure_ceph_keyring(service=service, user='******', group='cinder'): log('Could not create ceph keyring: peer not ready?') return if is_request_complete(get_ceph_request()): log('Request complete') CONFIGS.write_all() set_ceph_env_variables(service=service) for rid in relation_ids('backup-backend'): backup_backend_joined(rid) # Ensure that cinder services are restarted since only now can we # guarantee that ceph resources are ready. Note that the order of # restart is important here. for svc in ['cinder-volume', 'cinder-backup']: service_restart(svc) else: send_request_if_needed(get_ceph_request())
def ceph_changed(rid=None, unit=None): if 'ceph' not in CONFIGS.complete_contexts(): log('ceph relation incomplete. Peer not ready?') return if not ensure_ceph_keyring(service=service_name(), user='******', group='nova'): log('Could not create ceph keyring: peer not ready?') return CONFIGS.write(ceph_config_file()) CONFIGS.write(CEPH_SECRET) CONFIGS.write(NOVA_CONF) # With some refactoring, this can move into NovaComputeCephContext # and allow easily extended to support other compute flavors. key = relation_get(attribute='key', rid=rid, unit=unit) if config('virt-type') in ['kvm', 'qemu', 'lxc'] and key: create_libvirt_secret(secret_file=CEPH_SECRET, secret_uuid=CEPH_SECRET_UUID, key=key) if is_request_complete(get_ceph_request()): log('Request complete') # Ensure that nova-compute is restarted since only now can we # guarantee that ceph resources are ready, but only if not paused. if (not is_unit_paused_set() and not is_broker_action_done('nova_compute_restart', rid, unit)): service_restart('nova-compute') mark_broker_action_done('nova_compute_restart', rid, unit) else: send_request_if_needed(get_ceph_request())
def _configure_keyring(service_name, key, uuid): if config('virt-type') in LIBVIRT_TYPES: secrets_filename = CEPH_BACKEND_SECRET.format(service_name) render(os.path.basename(CEPH_SECRET), secrets_filename, context={ 'ceph_secret_uuid': uuid, 'service_name': service_name }) create_libvirt_secret(secret_file=secrets_filename, secret_uuid=uuid, key=key) # NOTE(jamespage): LXD ceph integration via host rbd mapping, so # install keyring for rbd commands to use ensure_ceph_keyring(service=service_name, user='******', group='nova', key=key)
def ceph_access(rid=None, unit=None): '''Setup libvirt secret for specific ceph backend access''' key = relation_get('key', unit, rid) uuid = relation_get('secret-uuid', unit, rid) if key and uuid: remote_service = remote_service_name(rid) if config('virt-type') in LIBVIRT_TYPES: secrets_filename = CEPH_BACKEND_SECRET.format(remote_service) render(os.path.basename(CEPH_SECRET), secrets_filename, context={'ceph_secret_uuid': uuid, 'service_name': remote_service}) create_libvirt_secret(secret_file=secrets_filename, secret_uuid=uuid, key=key) # NOTE(jamespage): LXD ceph integration via host rbd mapping, so # install keyring for rbd commands to use ensure_ceph_keyring(service=remote_service, user='******', group='nova', key=key)
def ceph_access(rid=None, unit=None): '''Setup libvirt secret for specific ceph backend access''' key = relation_get('key', unit, rid) uuid = relation_get('secret-uuid', unit, rid) if key and uuid: remote_service = remote_service_name(rid) if config('virt-type') in LIBVIRT_TYPES: secrets_filename = CEPH_BACKEND_SECRET.format(remote_service) render(os.path.basename(CEPH_SECRET), secrets_filename, context={'ceph_secret_uuid': uuid, 'service_name': remote_service}) create_libvirt_secret(secret_file=secrets_filename, secret_uuid=uuid, key=key) # NOTE(jamespage): LXD ceph integration via host rbd mapping, so # install keyring for rbd commands to use ensure_ceph_keyring(service=remote_service, user='******', group='nova', key=key)
def test_ensure_ceph_keyring_with_data(self, rget, runits, rids, create, _path): rids.return_value = ['ceph:0'] runits.return_value = ['ceph/0'] rget.return_value = 'fookey' self.assertEquals(True, ceph_utils.ensure_ceph_keyring(service='foo')) create.assert_called_with(service='foo', key='fookey') _path.assert_called_with('foo') self.assertFalse(self.check_call.called) _path.return_value = '/etc/ceph/client.foo.keyring' self.assertEquals( True, ceph_utils.ensure_ceph_keyring(service='foo', user='******', group='users')) create.assert_called_with(service='foo', key='fookey') _path.assert_called_with('foo') self.check_call.assert_called_with( ['chown', 'adam.users', '/etc/ceph/client.foo.keyring'])
def ceph_changed(): if 'ceph' not in CONFIGS.complete_contexts(): juju_log('ceph relation incomplete. Peer not ready?') return svc = service_name() if not ensure_ceph_keyring(service=svc, user='******', group='cinder'): juju_log('Could not create ceph keyring: peer not ready?') return CONFIGS.write(CEPH_CONF) CONFIGS.write(CINDER_CONF) set_ceph_env_variables(service=svc) if eligible_leader(CLUSTER_RES): _config = config() ensure_ceph_pool(service=svc, replicas=_config['ceph-osd-replication-count'])
def ceph_changed(): if 'ceph' not in CONFIGS.complete_contexts(): log('ceph relation incomplete. Peer not ready?') return svc = service_name() if not ensure_ceph_keyring(service=svc): log('Could not create ceph keyring: peer not ready?') return CONFIGS.write(ceph_config_file()) CONFIGS.write(CEPH_SECRET) CONFIGS.write(NOVA_CONF) # With some refactoring, this can move into NovaComputeCephContext # and allow easily extended to support other compute flavors. if config('virt-type') in ['kvm', 'qemu', 'lxc']: create_libvirt_secret(secret_file=CEPH_SECRET, secret_uuid=CEPH_SECRET_UUID, key=relation_get('key'))
def ceph_changed(): if 'ceph' not in CONFIGS.complete_contexts(): juju_log('ceph relation incomplete. Peer not ready?') return service = service_name() if not ensure_ceph_keyring(service=service, user='******', group='glance'): juju_log('Could not create ceph keyring: peer not ready?') return CONFIGS.write(GLANCE_API_CONF) CONFIGS.write(CEPH_CONF) if eligible_leader(CLUSTER_RES): _config = config() ensure_ceph_pool(service=service, replicas=_config['ceph-osd-replication-count'])
def ceph_changed(): if 'ceph' not in CONFIGS.complete_contexts(): juju_log('ceph relation incomplete. Peer not ready?') return service = service_name() if not ensure_ceph_keyring(service=service, user='******', group='glance'): juju_log('Could not create ceph keyring: peer not ready?') return if is_request_complete(get_ceph_request()): juju_log('Request complete') CONFIGS.write(GLANCE_API_CONF) CONFIGS.write(ceph_config_file()) # Ensure that glance-api is restarted since only now can we # guarantee that ceph resources are ready. service_restart('glance-api') else: send_request_if_needed(get_ceph_request())
def ceph_changed(): if 'ceph' not in CONFIGS.complete_contexts(): juju_log('ceph relation incomplete. Peer not ready?') return service = service_name() if not ensure_ceph_keyring(service=service, user='******', group='glance'): juju_log('Could not create ceph keyring: peer not ready?') return if is_request_complete(get_ceph_request()): juju_log('Request complete') CONFIGS.write(GLANCE_API_CONF) CONFIGS.write(ceph_config_file()) # Ensure that glance-api is restarted since only now can we # guarantee that ceph resources are ready. service_restart('glance-api') else: send_request_if_needed(get_ceph_request())
def ceph_changed(relation_id=None): if 'ceph' not in CONFIGS.complete_contexts(): juju_log('ceph relation incomplete. Peer not ready?') return service = service_name() if not ensure_ceph_keyring(service=service, user='******', group='cinder'): juju_log('Could not create ceph keyring: peer not ready?') return if is_request_complete(get_ceph_request()): log('Request complete') CONFIGS.write(CINDER_CONF) CONFIGS.write(ceph_config_file()) # Ensure that cinder-volume is restarted since only now can we # guarantee that ceph resources are ready. if not is_unit_paused_set(): service_restart('cinder-volume') else: send_request_if_needed(get_ceph_request())
def ceph_changed(relation_id=None): if 'ceph' not in CONFIGS.complete_contexts(): juju_log('ceph relation incomplete. Peer not ready?') return service = service_name() if not ensure_ceph_keyring(service=service, user='******', group='cinder'): juju_log('Could not create ceph keyring: peer not ready?') return if is_request_complete(get_ceph_request()): log('Request complete') set_ceph_env_variables(service=service) CONFIGS.write(CINDER_CONF) CONFIGS.write(ceph_config_file()) # Ensure that cinder-volume is restarted since only now can we # guarantee that ceph resources are ready. service_restart('cinder-volume') else: send_request_if_needed(get_ceph_request())
def ceph_changed(): if 'ceph' not in CONFIGS.complete_contexts(): log('ceph relation incomplete. Peer not ready?') return service = service_name() if not ensure_ceph_keyring(service=service, user='******', group='cinder'): log('Could not create ceph keyring: peer not ready?') return if is_request_complete(get_ceph_request()): log('Request complete') CONFIGS.write_all() for rid in relation_ids('storage-backend'): storage_backend(rid) for r_id in relation_ids('ceph-access'): ceph_access_joined(r_id) # Ensure that cinder-volume is restarted since only now can we # guarantee that ceph resources are ready. service_restart('cinder-volume') else: send_request_if_needed(get_ceph_request())
def ceph_changed(rid=None, unit=None): if 'ceph' not in CONFIGS.complete_contexts(): log('ceph relation incomplete. Peer not ready?') return if not ensure_ceph_keyring( service=service_name(), user='******', group='nova'): log('Could not create ceph keyring: peer not ready?') return CONFIGS.write(ceph_config_file()) CONFIGS.write(CEPH_SECRET) CONFIGS.write(NOVA_CONF) # With some refactoring, this can move into NovaComputeCephContext # and allow easily extended to support other compute flavors. key = relation_get(attribute='key', rid=rid, unit=unit) if config('virt-type') in ['kvm', 'qemu', 'lxc'] and key: create_libvirt_secret(secret_file=CEPH_SECRET, secret_uuid=CEPH_SECRET_UUID, key=key) _handle_ceph_request()
def ceph_changed(): if 'ceph' not in CONFIGS.complete_contexts(): log('ceph relation incomplete. Peer not ready?') return service = service_name() if not ensure_ceph_keyring(service=service, user='******', group='cinder'): log('Could not create ceph keyring: peer not ready?') return if is_request_complete(get_ceph_request()): log('Request complete') CONFIGS.write_all() for rid in relation_ids('storage-backend'): storage_backend(rid) for r_id in relation_ids('ceph-access'): ceph_access_joined(r_id) # Ensure that cinder-volume is restarted since only now can we # guarantee that ceph resources are ready. service_restart('cinder-volume') else: send_request_if_needed(get_ceph_request())