Ejemplo n.º 1
0
    def test_wait_for_quorum_yes(self):
        results = [True, False]

        def quorum():
            return results.pop()

        _is_quorum = self.patch('is_quorum')
        _is_quorum.side_effect = quorum
        ceph.wait_for_quorum()
        self.time.sleep.assert_called_with(3)
def mon_relation():
    if leader_get('monitor-secret') is None:
        log('still waiting for leader to setup keys')
        status_set('waiting', 'Waiting for leader to setup keys')
        return
    emit_cephconf()

    moncount = int(config('monitor-count'))
    if len(get_mon_hosts()) >= moncount:
        status_set('maintenance', 'Bootstrapping MON cluster')
        ceph.bootstrap_monitor_cluster(leader_get('monitor-secret'))
        ceph.wait_for_bootstrap()
        ceph.wait_for_quorum()
        # If we can and want to
        if is_leader() and config('customize-failure-domain'):
            # But only if the environment supports it
            if os.environ.get('JUJU_AVAILABILITY_ZONE'):
                cmds = [
                    "ceph osd getcrushmap -o /tmp/crush.map",
                    "crushtool -d /tmp/crush.map| "
                    "sed 's/step chooseleaf firstn 0 type host/step "
                    "chooseleaf firstn 0 type rack/' > "
                    "/tmp/crush.decompiled",
                    "crushtool -c /tmp/crush.decompiled -o /tmp/crush.map",
                    "crushtool -i /tmp/crush.map --test",
                    "ceph osd setcrushmap -i /tmp/crush.map"
                ]
                for cmd in cmds:
                    try:
                        subprocess.check_call(cmd, shell=True)
                    except subprocess.CalledProcessError as e:
                        log("Failed to modify crush map:", level='error')
                        log("Cmd: {}".format(cmd), level='error')
                        log("Error: {}".format(e.output), level='error')
                        break
            else:
                log(
                    "Your Juju environment doesn't"
                    "have support for Availability Zones"
                )
        notify_osds()
        notify_radosgws()
        notify_client()
    else:
        log('Not enough mons ({}), punting.'
            .format(len(get_mon_hosts())))
Ejemplo n.º 3
0
def mon_relation():
    if leader_get('monitor-secret') is None:
        log('still waiting for leader to setup keys')
        status_set('waiting', 'Waiting for leader to setup keys')
        return
    emit_cephconf()

    moncount = int(config('monitor-count'))
    if len(get_mon_hosts()) >= moncount:
        status_set('maintenance', 'Bootstrapping MON cluster')
        ceph.bootstrap_monitor_cluster(leader_get('monitor-secret'))
        ceph.wait_for_bootstrap()
        ceph.wait_for_quorum()
        notify_osds()
        notify_radosgws()
        notify_client()
    else:
        log('Not enough mons ({}), punting.'.format(len(get_mon_hosts())))
Ejemplo n.º 4
0
def mon_relation():
    emit_cephconf()

    moncount = int(config('monitor-count'))
    if len(get_mon_hosts()) >= moncount:
        status_set('maintenance', 'Bootstrapping MON cluster')
        ceph.bootstrap_monitor_cluster(config('monitor-secret'))
        ceph.wait_for_bootstrap()
        for dev in get_devices():
            ceph.osdize(dev, config('osd-format'), get_osd_journal(),
                        reformat_osd(), config('ignore-device-errors'))
        ceph.start_osds(get_devices())
        ceph.wait_for_quorum()
        notify_osds()
        notify_radosgws()
        notify_client()
    else:
        log('Not enough mons ({}), punting.'.format(len(get_mon_hosts())))
Ejemplo n.º 5
0
def mon_relation():
    if leader_get('monitor-secret') is None:
        log('still waiting for leader to setup keys')
        status_set('waiting', 'Waiting for leader to setup keys')
        return
    emit_cephconf()

    moncount = int(config('monitor-count'))
    if len(get_mon_hosts()) >= moncount:
        status_set('maintenance', 'Bootstrapping MON cluster')
        ceph.bootstrap_monitor_cluster(leader_get('monitor-secret'))
        ceph.wait_for_bootstrap()
        ceph.wait_for_quorum()
        notify_osds()
        notify_radosgws()
        notify_client()
    else:
        log('Not enough mons ({}), punting.'
            .format(len(get_mon_hosts())))
Ejemplo n.º 6
0
def mon_relation():
    emit_cephconf()

    moncount = int(config('monitor-count'))
    if len(get_mon_hosts()) >= moncount:
        status_set('maintenance', 'Bootstrapping MON cluster')
        ceph.bootstrap_monitor_cluster(config('monitor-secret'))
        ceph.wait_for_bootstrap()
        for dev in get_devices():
            ceph.osdize(dev, config('osd-format'), get_osd_journal(),
                        reformat_osd(), config('ignore-device-errors'))
        ceph.start_osds(get_devices())
        ceph.wait_for_quorum()
        notify_osds()
        notify_radosgws()
        notify_client()
    else:
        log('Not enough mons ({}), punting.'
            .format(len(get_mon_hosts())))
Ejemplo n.º 7
0
 def test_wait_for_quorum_no(self):
     _is_quorum = self.patch('is_quorum')
     _is_quorum.return_value = True
     ceph.wait_for_quorum()
     self.assertFalse(self.time.sleep.called)