def test_gatherkeys_backs_up(self):
     """
     Test 'gatherkeys' succeeds when getinig keys that are always different.
     Test 'gatherkeys' does backup keys that are not identical.
     """
     args = mock.Mock()
     args.cluster = "ceph"
     args.mon = ['host1']
     gatherkeys.gatherkeys(args)
     dir_content = os.listdir(self.test_dir)
     assert "ceph.client.admin.keyring" in dir_content
     assert "ceph.bootstrap-mds.keyring" in dir_content
     assert "ceph.mon.keyring" in dir_content
     assert "ceph.bootstrap-osd.keyring" in dir_content
     assert "ceph.bootstrap-rgw.keyring" in dir_content
     assert len(dir_content) == 5
     # Now we repeat as new keys are generated and old
     # are backed up
     gatherkeys.gatherkeys(args)
     dir_content = os.listdir(self.test_dir)
     mocked_time = mock_time_strftime(None)
     assert "ceph.client.admin.keyring" in dir_content
     assert "ceph.bootstrap-mds.keyring" in dir_content
     assert "ceph.mon.keyring" in dir_content
     assert "ceph.bootstrap-osd.keyring" in dir_content
     assert "ceph.bootstrap-rgw.keyring" in dir_content
     assert "ceph.client.admin.keyring-%s" % (mocked_time) in dir_content
     assert "ceph.bootstrap-mds.keyring-%s" % (mocked_time) in dir_content
     assert "ceph.mon.keyring-%s" % (mocked_time) in dir_content
     assert "ceph.bootstrap-osd.keyring-%s" % (mocked_time) in dir_content
     assert "ceph.bootstrap-rgw.keyring-%s" % (mocked_time) in dir_content
     assert len(dir_content) == 10
Exemple #2
0
 def test_gatherkeys_backs_up(self):
     """
     Test 'gatherkeys' succeeds when getting keys that are always different.
     Test 'gatherkeys' does backup keys that are not identical.
     """
     args = mock.Mock()
     args.cluster = "ceph"
     args.mon = ['host1']
     gatherkeys.gatherkeys(args)
     dir_content = os.listdir(self.test_dir)
     assert "ceph.client.admin.keyring" in dir_content
     assert "ceph.bootstrap-mds.keyring" in dir_content
     assert "ceph.bootstrap-mgr.keyring" in dir_content
     assert "ceph.mon.keyring" in dir_content
     assert "ceph.bootstrap-osd.keyring" in dir_content
     assert "ceph.bootstrap-rgw.keyring" in dir_content
     assert len(dir_content) == 6
     # Now we repeat as new keys are generated and old
     # are backed up
     gatherkeys.gatherkeys(args)
     dir_content = os.listdir(self.test_dir)
     mocked_time = mock_time_strftime(None)
     assert "ceph.client.admin.keyring" in dir_content
     assert "ceph.bootstrap-mds.keyring" in dir_content
     assert "ceph.bootstrap-mgr.keyring" in dir_content
     assert "ceph.mon.keyring" in dir_content
     assert "ceph.bootstrap-osd.keyring" in dir_content
     assert "ceph.bootstrap-rgw.keyring" in dir_content
     assert "ceph.client.admin.keyring-%s" % (mocked_time) in dir_content
     assert "ceph.bootstrap-mds.keyring-%s" % (mocked_time) in dir_content
     assert "ceph.bootstrap-mgr.keyring-%s" % (mocked_time) in dir_content
     assert "ceph.mon.keyring-%s" % (mocked_time) in dir_content
     assert "ceph.bootstrap-osd.keyring-%s" % (mocked_time) in dir_content
     assert "ceph.bootstrap-rgw.keyring-%s" % (mocked_time) in dir_content
     assert len(dir_content) == 12
Exemple #3
0
 def test_gatherkeys_fail(self):
     """
     Test 'gatherkeys' fails when connecting to mon fails.
     """
     args = mock.Mock()
     args.cluster = "ceph"
     args.mon = ['host1']
     with pytest.raises(RuntimeError):
         gatherkeys.gatherkeys(args)
 def test_gatherkeys_fail(self):
     """
     Test 'gatherkeys' fails when connecting to mon fails.
     """
     args = mock.Mock()
     args.cluster = "ceph"
     args.mon = ['host1']
     with pytest.raises(RuntimeError):
         gatherkeys.gatherkeys(args)
Exemple #5
0
def mon_create_initial(args):
    # 获取ceph.conf中的mon_initial_members
    mon_initial_members = get_mon_initial_members(args, error_on_empty=True)

    # create them normally through mon_create
    args.mon = mon_initial_members
    # 创建mon
    mon_create(args)

    # make the sets to be able to compare late
    mon_in_quorum = set([])
    mon_members = set([host for host in mon_initial_members])

    for host in mon_initial_members:
        mon_name = 'mon.%s' % host
        LOG.info('processing monitor %s', mon_name)
        sleeps = [20, 20, 15, 10, 10, 5]
        tries = 5
        rlogger = logging.getLogger(host)
        distro = hosts.get(
            host,
            username=args.username,
            callbacks=[packages.ceph_is_installed]
        )

        while tries:
            # 获取mon的状态
            status = mon_status_check(distro.conn, rlogger, host, args)
            has_reached_quorum = status.get('state', '') in ['peon', 'leader']
            if not has_reached_quorum:
                LOG.warning('%s monitor is not yet in quorum, tries left: %s' % (mon_name, tries))
                tries -= 1
                sleep_seconds = sleeps.pop()
                LOG.warning('waiting %s seconds before retrying', sleep_seconds)
                time.sleep(sleep_seconds)  # Magic number
            else:
                mon_in_quorum.add(host)
                LOG.info('%s monitor has reached quorum!', mon_name)
                break
        distro.conn.exit()

    # 集群中的mon_in_quorum与ceph.conf中的mon_initial_members完全匹配
    if mon_in_quorum == mon_members:
        LOG.info('all initial monitors are running and have formed quorum')
        LOG.info('Running gatherkeys...')
        # 调用gatherkeys模块gatherkeys函数,收集用于配置新节点的keys
        gatherkeys.gatherkeys(args)
    else:
        LOG.error('Some monitors have still not reached quorum:')
        for host in mon_members - mon_in_quorum:
            LOG.error('%s', host)
        raise SystemExit('cluster may not be in a healthy state')
Exemple #6
0
def mon_create_initial(args):
    cfg = conf.ceph.load(args)
    cfg_initial_members = cfg.safe_get('global', 'mon_initial_members')
    if cfg_initial_members is None:
        raise RuntimeError('No `mon initial members` defined in config')
    mon_initial_members = re.split(r'[,\s]+', cfg_initial_members)

    # create them normally through mon_create
    mon_create(args)

    # make the sets to be able to compare late
    mon_in_quorum = set([])
    mon_members = set([host for host in mon_initial_members])

    for host in mon_initial_members:
        mon_name = 'mon.%s' % host
        LOG.info('processing monitor %s', mon_name)
        sleeps = [20, 20, 15, 10, 10, 5]
        tries = 5
        rlogger = logging.getLogger(host)
        rconn = get_connection(host, username=args.username, logger=rlogger)
        while tries:
            status = mon_status_check(rconn, rlogger, host, args)
            has_reached_quorum = status.get('state', '') in ['peon', 'leader']
            if not has_reached_quorum:
                LOG.warning('%s monitor is not yet in quorum, tries left: %s' %
                            (mon_name, tries))
                tries -= 1
                sleep_seconds = sleeps.pop()
                LOG.warning('waiting %s seconds before retrying',
                            sleep_seconds)
                time.sleep(sleep_seconds)  # Magic number
            else:
                mon_in_quorum.add(host)
                LOG.info('%s monitor has reached quorum!', mon_name)
                break
        rconn.exit()

    if mon_in_quorum == mon_members:
        LOG.info('all initial monitors are running and have formed quorum')
        LOG.info('Running gatherkeys...')
        gatherkeys.gatherkeys(args)
    else:
        LOG.error('Some monitors have still not reached quorum:')
        for host in mon_members - mon_in_quorum:
            LOG.error('%s', host)
        raise SystemExit('cluster may not be in a healthy state')
Exemple #7
0
def mon_create_initial(args):
    cfg = conf.ceph.load(args)
    cfg_initial_members = cfg.safe_get('global', 'mon_initial_members')
    if cfg_initial_members is None:
        raise RuntimeError('No `mon initial members` defined in config')
    mon_initial_members = re.split(r'[,\s]+', cfg_initial_members)

    # create them normally through mon_create
    mon_create(args)

    # make the sets to be able to compare late
    mon_in_quorum = set([])
    mon_members = set([host for host in mon_initial_members])

    for host in mon_initial_members:
        mon_name = 'mon.%s' % host
        LOG.info('processing monitor %s', mon_name)
        sleeps = [20, 20, 15, 10, 10, 5]
        tries = 5
        rlogger = logging.getLogger(host)
        rconn = get_connection(host, username=args.username, logger=rlogger)
        while tries:
            status = mon_status_check(rconn, rlogger, host, args)
            has_reached_quorum = status.get('state', '') in ['peon', 'leader']
            if not has_reached_quorum:
                LOG.warning('%s monitor is not yet in quorum, tries left: %s' %
                            (mon_name, tries))
                tries -= 1
                sleep_seconds = sleeps.pop()
                LOG.warning('waiting %s seconds before retrying',
                            sleep_seconds)
                time.sleep(sleep_seconds)  # Magic number
            else:
                mon_in_quorum.add(host)
                LOG.info('%s monitor has reached quorum!', mon_name)
                break
        rconn.exit()

    if mon_in_quorum == mon_members:
        LOG.info('all initial monitors are running and have formed quorum')
        LOG.info('Running gatherkeys...')
        gatherkeys.gatherkeys(args)
    else:
        LOG.error('Some monitors have still not reached quorum:')
        for host in mon_members - mon_in_quorum:
            LOG.error('%s', host)
        raise SystemExit('cluster may not be in a healthy state')
Exemple #8
0
def mon_create_initial(args):
    mon_initial_members = get_mon_initial_members(args, error_on_empty=True)

    # create them normally through mon_create
    args.mon = mon_initial_members
    mon_create(args)

    # make the sets to be able to compare late
    mon_in_quorum = set([])
    mon_members = set([host for host in mon_initial_members])

    for host in mon_initial_members:
        mon_name = 'mon.%s' % host
        LOG.info('processing monitor %s', mon_name)
        sleeps = [20, 20, 15, 10, 10, 5]
        tries = 5
        rlogger = logging.getLogger(host)
        distro = hosts.get(
            host,
            username=args.username,
            callbacks=[packages.ceph_is_installed]
        )

        while tries:
            status = mon_status_check(distro.conn, rlogger, host, args)
            has_reached_quorum = status.get('state', '') in ['peon', 'leader']
            if not has_reached_quorum:
                LOG.warning('%s monitor is not yet in quorum, tries left: %s' % (mon_name, tries))
                tries -= 1
                sleep_seconds = sleeps.pop()
                LOG.warning('waiting %s seconds before retrying', sleep_seconds)
                time.sleep(sleep_seconds)  # Magic number
            else:
                mon_in_quorum.add(host)
                LOG.info('%s monitor has reached quorum!', mon_name)
                break
        distro.conn.exit()

    if mon_in_quorum == mon_members:
        LOG.info('all initial monitors are running and have formed quorum')
        LOG.info('Running gatherkeys...')
        gatherkeys.gatherkeys(args)
    else:
        LOG.error('Some monitors have still not reached quorum:')
        for host in mon_members - mon_in_quorum:
            LOG.error('%s', host)
        raise SystemExit('cluster may not be in a healthy state')
 def test_gatherkeys_success(self):
     """
     Test 'gatherkeys' succeeds when getinig keys that are always the same.
     Test 'gatherkeys' does not backup identical keys
     """
     args = mock.Mock()
     args.cluster = "ceph"
     args.mon = ['host1']
     gatherkeys.gatherkeys(args)
     dir_content = os.listdir(self.test_dir)
     assert "ceph.client.admin.keyring" in dir_content
     assert "ceph.bootstrap-mds.keyring" in dir_content
     assert "ceph.mon.keyring" in dir_content
     assert "ceph.bootstrap-osd.keyring" in dir_content
     assert "ceph.bootstrap-rgw.keyring" in dir_content
     assert len(dir_content) == 5
     # Now we repeat as no new keys are generated
     gatherkeys.gatherkeys(args)
     dir_content = os.listdir(self.test_dir)
     assert len(dir_content) == 5
 def test_gatherkeys_success(self):
     """
     Test 'gatherkeys' succeeds when getinig keys that are always the same.
     Test 'gatherkeys' does not backup identical keys
     """
     args = mock.Mock()
     args.cluster = "ceph"
     args.mon = ['host1']
     gatherkeys.gatherkeys(args)
     dir_content = os.listdir(self.test_dir)
     assert "ceph.client.admin.keyring" in dir_content
     assert "ceph.bootstrap-mds.keyring" in dir_content
     assert "ceph.mon.keyring" in dir_content
     assert "ceph.bootstrap-osd.keyring" in dir_content
     assert "ceph.bootstrap-rgw.keyring" in dir_content
     assert len(dir_content) == 5
     # Now we repeat as no new keys are generated
     gatherkeys.gatherkeys(args)
     dir_content = os.listdir(self.test_dir)
     assert len(dir_content) == 5
Exemple #11
0
def mon_create_initial(args):
    mon_initial_members = get_mon_initial_members(args, error_on_empty=True)

    # create them normally through mon_create
    mon_create(args)

    # make the sets to be able to compare late
    mon_in_quorum = set([])
    mon_members = set([host for host in mon_initial_members])

    for host in mon_initial_members:
        mon_name = "mon.%s" % host
        LOG.info("processing monitor %s", mon_name)
        sleeps = [20, 20, 15, 10, 10, 5]
        tries = 5
        rlogger = logging.getLogger(host)
        rconn = get_connection(host, username=args.username, logger=rlogger)
        while tries:
            status = mon_status_check(rconn, rlogger, host, args)
            has_reached_quorum = status.get("state", "") in ["peon", "leader"]
            if not has_reached_quorum:
                LOG.warning("%s monitor is not yet in quorum, tries left: %s" % (mon_name, tries))
                tries -= 1
                sleep_seconds = sleeps.pop()
                LOG.warning("waiting %s seconds before retrying", sleep_seconds)
                time.sleep(sleep_seconds)  # Magic number
            else:
                mon_in_quorum.add(host)
                LOG.info("%s monitor has reached quorum!", mon_name)
                break
        rconn.exit()

    if mon_in_quorum == mon_members:
        LOG.info("all initial monitors are running and have formed quorum")
        LOG.info("Running gatherkeys...")
        gatherkeys.gatherkeys(args)
    else:
        LOG.error("Some monitors have still not reached quorum:")
        for host in mon_members - mon_in_quorum:
            LOG.error("%s", host)
        raise SystemExit("cluster may not be in a healthy state")