Пример #1
0
 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)
Пример #2
0
 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')
Пример #3
0
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()
Пример #4
0
 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')
Пример #5
0
 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)
Пример #6
0
 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')
Пример #7
0
 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')
Пример #8
0
 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')
Пример #9
0
 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')
Пример #10
0
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()
Пример #11
0
 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)
Пример #12
0
 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)
Пример #13
0
 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')
Пример #14
0
 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')
Пример #15
0
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()
Пример #16
0
 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)
Пример #17
0
 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')
Пример #18
0
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()
Пример #19
0
 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')
Пример #20
0
 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)
Пример #21
0
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)
Пример #23
0
 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)
Пример #24
0
 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')
Пример #25
0
 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)
Пример #26
0
 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')
Пример #27
0
 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')
Пример #28
0
 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_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)
Пример #31
0
 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)