def test_assess_status_monitor_complete_disks(self): self.relation_ids.return_value = ['mon:1'] self.related_units.return_value = CEPH_MONS self.get_conf.return_value = 'monitor-bootstrap-key' self.ceph.get_running_osds.return_value = ['12345', '67890'] hooks.assess_status() self.status_set.assert_called_with('active', mock.ANY)
def test_assess_status_monitor_relation_incomplete(self): self.relation_ids.return_value = ['mon:1'] self.related_units.return_value = CEPH_MONS self.get_conf.return_value = None hooks.assess_status() self.status_set.assert_called_with('waiting', mock.ANY) self.application_version_set.assert_called_with('10.2.2')
def osd_in_out(action): """Pause/Resume the ceph OSDs unit ont the local machine only. :param action: Either IN or OUT (see global constants) :type action: string :raises RuntimeError: if a supported action is not used :raises subprocess.CalledProcessError: if the ceph commands fails :raises OSError: if the unit can't get the local osd ids """ if action not in (IN, OUT): raise RuntimeError("Unknown action \"{}\"".format(action)) osds = parse_osds_arguments() osds, failed_osds = check_osd_id(osds) if failed_osds: function_fail("invalid ceph OSD device id: " "{}".format(",".join(failed_osds))) return outputs = [] for osd_id in osds: output = ceph_osd_upgrade(action, str(osd_id)) outputs.append(output) function_set({ "message": "osd-{action} action was successfully executed for ceph " "OSD devices [{osds}]".format(action=action, osds=",".join(osds)), "outputs": os.linesep.join(outputs) }) assess_status()
def test_assess_status_monitor_complete_no_disks(self): self.relation_ids.return_value = ['mon:1'] self.related_units.return_value = CEPH_MONS self.get_conf.return_value = 'monitor-bootstrap-key' self.ceph.get_running_osds.return_value = [] hooks.assess_status() self.status_set.assert_called_with('blocked', mock.ANY)
def test_assess_status_peers_complete_down(self, _peer_units): _peer_units.return_value = ENOUGH_PEERS_COMPLETE self.ceph.is_bootstrapped.return_value = False self.ceph.is_quorum.return_value = False hooks.assess_status() self.status_set.assert_called_with('blocked', mock.ANY) self.application_version_set.assert_called_with('10.2.2')
def test_assess_status_monitor_complete_no_disks(self): self.relation_ids.return_value = ['mon:1'] self.related_units.return_value = CEPH_MONS self.get_conf.return_value = 'monitor-bootstrap-key' self.ceph.get_running_osds.return_value = [] hooks.assess_status() self.status_set.assert_called_with('blocked', mock.ANY) self.application_version_set.assert_called_with('10.2.2')
def test_assess_status_invalid_bluestore_compression_options( self, _bluestore_compression): self.relation_ids.return_value = ['mon:1'] self.related_units.return_value = CEPH_MONS _bluestore_compression().validate.side_effect = ValueError( 'fake-config is invalid') hooks.assess_status() self.status_set.assert_called_with( 'blocked', 'Invalid configuration: fake-config is invalid')
def test_assess_status_monitor_complete_disks(self): self.relation_ids.return_value = ['mon:1'] self.related_units.return_value = CEPH_MONS self.get_conf.return_value = 'monitor-bootstrap-key' self.ceph.get_running_osds.return_value = ['12345', '67890'] self.get_upstream_version.return_value = '12.2.4' hooks.assess_status() self.status_set.assert_called_with('active', mock.ANY) self.application_version_set.assert_called_with('12.2.4')
def osd_in(args): """Resume the ceph-osd units on this local machine only @raises subprocess.CalledProcessError should the osd units fails to osd_in. @raises OSError if the unit can't get the local osd ids """ for local_id in get_local_osd_ids(): cmd = ['ceph', '--id', 'osd-upgrade', 'osd', 'in', str(local_id)] check_call(cmd) assess_status()
def test_assess_status_rbd_feature_mismatch(self, _peer_units, _sufficient_osds, _has_rbd_mirrors): _peer_units.return_value = ENOUGH_PEERS_COMPLETE _sufficient_osds.return_value = True self.ceph.is_bootstrapped.return_value = True self.ceph.is_quorum.return_value = True _has_rbd_mirrors.return_value = True self.test_config.set('default-rbd-features', 61) hooks.assess_status() self.status_set.assert_called_once_with('blocked', mock.ANY)
def test_assess_status_peers_complete_active(self, _peer_units, _sufficient_osds, _has_rbd_mirrors): _peer_units.return_value = ENOUGH_PEERS_COMPLETE _sufficient_osds.return_value = True self.ceph.is_bootstrapped.return_value = True self.ceph.is_quorum.return_value = True _has_rbd_mirrors.return_value = False hooks.assess_status() self.status_set.assert_called_with('active', mock.ANY) self.application_version_set.assert_called_with('10.2.2')
def osd_out(args): """Pause the ceph-osd units on the local machine only. Optionally uses the 'osd-number' from juju action param to only osd_out a specific osd. @raises CalledProcessError if the ceph commands fails. @raises OSError if it can't get the local osd ids. """ for local_id in get_local_osd_ids(): cmd = ['ceph', '--id', 'osd-upgrade', 'osd', 'out', str(local_id)] check_call(cmd) assess_status()
def test_assess_status_invalid_osd_settings(self, _peer_units, _sufficient_osds, _has_rbd_mirrors, _get_osd_settings): _peer_units.return_value = ENOUGH_PEERS_COMPLETE _sufficient_osds.return_value = True self.ceph.is_bootstrapped.return_value = True self.ceph.is_quorum.return_value = True _has_rbd_mirrors.return_value = False _get_osd_settings.side_effect = ch_ceph.OSDSettingConflict( 'conflict in setting foo') hooks.assess_status() self.status_set.assert_called_with('blocked', mock.ANY)
def test_assess_status_monitor_vault_missing(self): _test_relations = { 'mon': ['mon:1'], } self.relation_ids.side_effect = lambda x: _test_relations.get(x, []) self.related_units.return_value = CEPH_MONS self.vaultlocker.vault_relation_complete.return_value = False self.use_vaultlocker.return_value = True self.get_conf.return_value = 'monitor-bootstrap-key' self.ceph.get_running_osds.return_value = ['12345', '67890'] self.get_upstream_version.return_value = '12.2.4' hooks.assess_status() self.status_set.assert_called_with('blocked', mock.ANY) self.application_version_set.assert_called_with('12.2.4')
def pause(args): """Pause the ceph-osd units on the local machine only. Optionally uses the 'osd-number' from juju action param to only pause a specific osd. If all the osds are not stopped then the paused status is not set. @raises CalledProcessError if the ceph commands fails. @raises OSError if it can't get the local osd ids. """ for local_id in get_local_osd_ids(): cmd = ['ceph', '--id', 'osd-upgrade', 'osd', 'out', str(local_id)] check_call(cmd) set_unit_paused() assess_status()
def test_cmr_remote_unit(self): self.test_config.set('permit-insecure-cmr', False) self.relations.return_value = ['client'] self.relation_ids.return_value = ['client:1'] self.related_units.return_value = ['remote-1'] hooks.assess_status() self.status_set.assert_called_with( 'blocked', 'Unsupported CMR relation') self.status_set.reset_mock() self.test_config.set('permit-insecure-cmr', True) hooks.assess_status() self.assertFalse( mock.call('blocked', 'Unsupported CMR relation') in self.status_set.call_args_list)
def execute_action(action): """Core implementation of the 'start'/'stop' actions :param action: Either START or STOP (see global constants) :return: None """ if action not in (START, STOP): raise RuntimeError('Unknown action "{}"'.format(action)) osds = parse_osds_arguments() services = osd_ids_to_service_names(osds) check_service_is_present(services) systemctl_execute(action, services) assess_status()
def test_assess_status_peers_complete_down(self, _peer_units): _peer_units.return_value = ENOUGH_PEERS_COMPLETE self.ceph.is_bootstrapped.return_value = False self.ceph.is_quorum.return_value = False hooks.assess_status() self.status_set.assert_called_with('blocked', mock.ANY)
def test_assess_status_no_monitor_relation(self): self.relation_ids.return_value = [] hooks.assess_status() self.status_set.assert_called_with('blocked', mock.ANY)
def test_no_bootstrap_not_set(self): self.is_relation_made.return_value = True hooks.assess_status() self.status_set.assert_called_with('blocked', mock.ANY) self.application_version_set.assert_called_with('10.2.2')
def test_assess_status_peers_incomplete(self, _peer_units): _peer_units.return_value = ENOUGH_PEERS_INCOMPLETE hooks.assess_status() self.status_set.assert_called_with('waiting', mock.ANY) self.application_version_set.assert_called_with('10.2.2')
def test_assess_status_no_peers(self, _peer_units): _peer_units.return_value = NO_PEERS hooks.assess_status() self.status_set.assert_called_with('blocked', mock.ANY) self.application_version_set.assert_called_with('10.2.2')
def test_assess_status_no_peers(self, _peer_units): _peer_units.return_value = NO_PEERS hooks.assess_status() self.status_set.assert_called_with('blocked', mock.ANY)
def test_assess_status_peers_incomplete(self, _peer_units): _peer_units.return_value = ENOUGH_PEERS_INCOMPLETE hooks.assess_status() self.status_set.assert_called_with('waiting', mock.ANY)
def test_assess_status_peers_complete_active(self, _peer_units): _peer_units.return_value = ENOUGH_PEERS_COMPLETE self.ceph.is_bootstrapped.return_value = True self.ceph.is_quorum.return_value = True hooks.assess_status() self.status_set.assert_called_with('active', mock.ANY)