Beispiel #1
0
    def test_cluster_roles_admin(self):
        self.shell.run_cmdline('/Cluster/Minions add node1.ceph.com')
        self.clearSysOut()

        self.shell.run_cmdline('/Cluster/Roles/Admin add node1.ceph.com')
        self.assertInSysOut('1 minion added.')
        self.assertGrains('node1.ceph.com', 'ceph-salt', {
            'member': True,
            'roles': ['admin'],
            'execution': {}
        })
        self.assertEqual(PillarManager.get('ceph-salt:minions:all'), ['node1'])
        self.assertEqual(PillarManager.get('ceph-salt:minions:admin'),
                         ['node1'])
        self.assertEqual(PillarManager.get('ceph-salt:minions:mgr'), [])
        self.assertEqual(PillarManager.get('ceph-salt:minions:mon'), {})
        self.assertEqual(PillarManager.get('ceph-salt:bootstrap_minion'), None)

        self.shell.run_cmdline('/Cluster/Roles/Admin rm node1.ceph.com')
        self.assertInSysOut('1 minion removed.')
        self.assertGrains('node1.ceph.com', 'ceph-salt', {
            'member': True,
            'roles': [],
            'execution': {}
        })
        self.assertEqual(PillarManager.get('ceph-salt:minions:all'), ['node1'])
        self.assertEqual(PillarManager.get('ceph-salt:minions:admin'), [])
        self.assertEqual(PillarManager.get('ceph-salt:minions:mgr'), [])
        self.assertEqual(PillarManager.get('ceph-salt:minions:mon'), {})
        self.assertEqual(PillarManager.get('ceph-salt:bootstrap_minion'), None)

        self.shell.run_cmdline('/Cluster/Minions rm node1.ceph.com')
Beispiel #2
0
 def test_ssh(self):
     self.shell.run_cmdline('/SSH generate')
     self.assertInSysOut('Key pair generated.')
     self.assertNotEqual(PillarManager.get('ceph-salt:ssh:private_key'),
                         None)
     self.assertNotEqual(PillarManager.get('ceph-salt:ssh:public_key'),
                         None)
Beispiel #3
0
    def test_import(self):
        self.fs.create_file('/config.json', contents=json.dumps({
            'minions': {
                'all': ['node1.ceph.com', 'node2.ceph.com'],
                'admin': ['node1.ceph.com']
            },
            'time_server': {
                'server_host': 'node1.ceph.com',
                'subnet': '10.20.188.0/24'
            }}))
        self.assertTrue(run_import("/config.json"))
        self.assertInSysOut('Configuration imported.')
        self.assertGrains('node1.ceph.com',
                          'ceph-salt', {'member': True,
                                        'roles': ['admin'],
                                        'execution': {}})
        self.assertGrains('node2.ceph.com',
                          'ceph-salt', {'member': True,
                                        'roles': [],
                                        'execution': {}})
        self.assertEqual(PillarManager.get('ceph-salt:minions:all'), ['node1.ceph.com',
                                                                      'node2.ceph.com'])
        self.assertEqual(PillarManager.get('ceph-salt:minions:admin'), ['node1.ceph.com'])
        self.assertIsNone(PillarManager.get('ceph-salt:bootstrap_minion'))
        self.assertEqual(PillarManager.get('ceph-salt:time_server:server_host'), 'node1.ceph.com')
        self.assertEqual(PillarManager.get('ceph-salt:time_server:subnet'), '10.20.188.0/24')

        self.shell.run_cmdline('/time_server/subnet reset')
        self.shell.run_cmdline('/time_server/server_hostname reset')
        self.shell.run_cmdline('/ceph_cluster/roles/admin remove node1.ceph.com')
        self.shell.run_cmdline('/ceph_cluster/minions remove node2.ceph.com')
        self.shell.run_cmdline('/ceph_cluster/minions remove node1.ceph.com')

        self.fs.remove('/config.json')
Beispiel #4
0
    def assertConfigOption(self, path, pillar_key):
        self.shell.run_cmdline('{} add section1'.format(path))
        self.assertInSysOut('Section added.')

        sec_path = '{}/{}'.format(path, 'section1')
        sec_pillar_key = '{}:{}'.format(pillar_key, 'section1')

        self.shell.run_cmdline('{} set "my option1" 2'.format(sec_path))
        self.assertInSysOut('Parameter set.')
        self.assertEqual(PillarManager.get(sec_pillar_key), {'my option1': '2'})

        self.shell.run_cmdline('{} set "my option2" 3'.format(sec_path))
        self.assertInSysOut('Parameter set.')
        self.assertEqual(PillarManager.get(sec_pillar_key), {'my option1': '2', 'my option2': '3'})

        self.shell.run_cmdline('{} remove "my option1"'.format(sec_path))
        self.assertInSysOut('Parameter removed.')
        self.assertEqual(PillarManager.get(sec_pillar_key), {'my option2': '3'})

        self.shell.run_cmdline('{} reset'.format(sec_path))
        self.assertInSysOut('Parameters reset.')
        self.assertEqual(PillarManager.get(sec_pillar_key), {})

        self.shell.run_cmdline('{} reset'.format(path))
        self.assertInSysOut('Config reset.')
        self.assertEqual(PillarManager.get(pillar_key), {})
Beispiel #5
0
 def test_pillar_reset(self):
     PillarManager.set('ceph-salt:test', 'some text')
     val = PillarManager.get('ceph-salt:test')
     self.assertEqual(val, 'some text')
     PillarManager.reset('ceph-salt:test')
     val = PillarManager.get('ceph-salt:test')
     self.assertIsNone(val)
Beispiel #6
0
    def assertDictOption(self, path, pillar_key, parameter, value):
        self.shell.run_cmdline('{} set "{}" "{}"'.format(path, parameter, value))
        self.assertInSysOut('Parameter set.')
        self.assertEqual(PillarManager.get('{}:{}'.format(pillar_key, parameter)), value)

        self.shell.run_cmdline('{} remove {}'.format(path, parameter))
        self.assertInSysOut('Parameter removed.')
        self.assertEqual(PillarManager.get('{}:{}'.format(pillar_key, parameter)), None)
Beispiel #7
0
    def assertValueOption(self, path, pillar_key, value):
        self.shell.run_cmdline('{} set {}'.format(path, value))
        self.assertInSysOut('Value set.')
        self.assertEqual(PillarManager.get(pillar_key), value)

        self.shell.run_cmdline('{} reset'.format(path))
        self.assertInSysOut('Value reset.')
        self.assertEqual(PillarManager.get(pillar_key), None)
Beispiel #8
0
    def assertListOption(self, path, pillar_key, values):
        for value in values:
            self.shell.run_cmdline('{} add {}'.format(path, value))
            self.assertInSysOut('Value added.')
        self.assertEqual(PillarManager.get(pillar_key), values)

        for value in values:
            self.shell.run_cmdline('{} remove {}'.format(path, value))
            self.assertInSysOut('Value removed.')
        self.assertEqual(PillarManager.get(pillar_key), [])
Beispiel #9
0
    def assertFlagOption(self, path, pillar_key, reset_supported=True):
        self.shell.run_cmdline('{} enable'.format(path))
        self.assertInSysOut('Enabled.')
        self.assertEqual(PillarManager.get(pillar_key), True)

        self.shell.run_cmdline('{} disable'.format(path))
        self.assertInSysOut('Disabled.')
        self.assertEqual(PillarManager.get(pillar_key), False)

        if reset_supported:
            self.shell.run_cmdline('{} reset'.format(path))
            self.assertInSysOut('Value reset.')
            self.assertEqual(PillarManager.get(pillar_key), None)
Beispiel #10
0
    def assertImportOption(self, path, pillar_key, file_content):
        file_path = '/import.file'
        self.fs.create_file(file_path, contents=file_content)
        self.shell.run_cmdline('{} import {}'.format(path, file_path))
        self.assertInSysOut('Value imported.')
        self.assertEqual(PillarManager.get(pillar_key), file_content)

        self.shell.run_cmdline('{} export'.format(path))
        self.assertInSysOut(file_content)

        self.shell.run_cmdline('{} reset'.format(path))
        self.assertInSysOut('Value reset.')
        self.assertEqual(PillarManager.get(pillar_key), None)
        self.fs.remove(file_path)
Beispiel #11
0
    def test_cluster_minions_add_invalid_ip(self):
        fqdn_ip4 = GrainsManager.get_grain('node1.ceph.com', 'fqdn_ip4')
        GrainsManager.set_grain('node1.ceph.com', 'fqdn_ip4', ['127.0.0.1'])

        self.shell.run_cmdline('/Cluster/Minions add node1.ceph.com')
        self.assertInSysOut("Host 'node1.ceph.com' FQDN resolves to the loopback interface IP "
                            "address")
        self.assertIsNone(PillarManager.get('ceph-salt:minions:all'))

        GrainsManager.set_grain('node1.ceph.com', 'fqdn_ip4', fqdn_ip4)
 def assertValidateConfig(self, expected, deployed=False, ceph_nodes=None):
     if ceph_nodes is None:
         ceph_nodes = {}
         all = PillarManager.get('ceph-salt:minions:all', [])
         for i, minion_id in enumerate(all):
             ceph_node = CephNode(minion_id)
             # pylint: disable=protected-access
             ceph_node._ipsv4 = ['10.20.188.{}'.format(201 + i)]
             # pylint: disable=protected-access
             ceph_node._ipsv6 = ['fe80::5054:ff:fefc:{}'.format(1001 + i)]
             ceph_nodes[minion_id] = ceph_node
     self.assertEqual(validate_config(deployed, ceph_nodes), expected)
Beispiel #13
0
    def test_cluster_minions_rm_with_role(self):
        self.shell.run_cmdline('/Cluster/Minions add node1.ceph.com')
        self.shell.run_cmdline('/Cluster/Roles/Mgr add node1.ceph.com')
        self.clearSysOut()

        self.shell.run_cmdline('/Cluster/Minions rm node1.ceph.com')
        self.assertInSysOut("Cannot remove host 'node1.ceph.com' because it has roles defined: "
                            "{'mgr'}")
        self.assertEqual(PillarManager.get('ceph-salt:minions:all'), ['node1'])

        self.shell.run_cmdline('/Cluster/Roles/Mgr rm node1.ceph.com')
        self.shell.run_cmdline('/Cluster/Minions rm node1.ceph.com')
Beispiel #14
0
    def test_ceph_cluster_roles_bootstrap(self):
        with pytest.raises(MinionDoesNotExistInConfiguration):
            self.shell.run_cmdline('/ceph_cluster/roles/bootstrap set node1.ceph.com')
        self.shell.run_cmdline('/ceph_cluster/minions add node1.ceph.com')
        self.clearSysOut()

        self.shell.run_cmdline('/ceph_cluster/roles/bootstrap set node1.ceph.com')
        self.assertInSysOut('Value set.')
        self.assertGrains('node1.ceph.com', 'ceph-salt', {'member': True,
                                                          'roles': [],
                                                          'execution': {}})
        self.assertEqual(PillarManager.get('ceph-salt:minions:all'), ['node1.ceph.com'])
        self.assertEqual(PillarManager.get('ceph-salt:minions:admin'), [])
        self.assertEqual(PillarManager.get('ceph-salt:bootstrap_minion'), 'node1.ceph.com')

        self.shell.run_cmdline('/ceph_cluster/roles/bootstrap reset')
        self.assertInSysOut('Value reset.')
        self.assertGrains('node1.ceph.com', 'ceph-salt', {'member': True,
                                                          'roles': [],
                                                          'execution': {}})
        self.assertEqual(PillarManager.get('ceph-salt:minions:all'), ['node1.ceph.com'])
        self.assertEqual(PillarManager.get('ceph-salt:minions:admin'), [])
        self.assertEqual(PillarManager.get('ceph-salt:bootstrap_minion'), None)

        self.shell.run_cmdline('/ceph_cluster/minions remove node1.ceph.com')
Beispiel #15
0
    def test_export(self):
        self.shell.run_cmdline('/ceph_cluster/minions add node1.ceph.com')
        self.shell.run_cmdline('/ceph_cluster/minions add node2.ceph.com')
        self.shell.run_cmdline(
            '/ceph_cluster/roles/cephadm add node1.ceph.com')
        self.shell.run_cmdline(
            '/ceph_cluster/roles/cephadm add node2.ceph.com')
        self.shell.run_cmdline('/ceph_cluster/roles/admin add node1.ceph.com')
        self.shell.run_cmdline(
            '/time_server/server_hostname set node1.ceph.com')
        self.shell.run_cmdline('/time_server/subnet set 10.20.188.0/24')
        self.clearSysOut()

        self.assertTrue(run_export(False))
        self.assertJsonInSysOut({
            'container': {
                'registries_enabled': True
            },
            'dashboard': {
                'username': '******',
                'password': PillarManager.get('ceph-salt:dashboard:password'),
                'password_update_required': True
            },
            'minions': {
                'all': ['node1.ceph.com', 'node2.ceph.com'],
                'admin': ['node1.ceph.com'],
                'cephadm': ['node1.ceph.com', 'node2.ceph.com']
            },
            'ssh': {
                'user': '******'
            },
            'time_server': {
                'enabled': True,
                'server_host': 'node1.ceph.com',
                'subnet': '10.20.188.0/24'
            },
            'updates': {
                'enabled': True,
                'reboot': True
            }
        })

        self.shell.run_cmdline('/time_server/subnet reset')
        self.shell.run_cmdline('/time_server/server_hostname reset')
        self.shell.run_cmdline(
            '/ceph_cluster/roles/admin remove node1.ceph.com')
        self.shell.run_cmdline(
            '/ceph_cluster/roles/cephadm remove node2.ceph.com')
        self.shell.run_cmdline(
            '/ceph_cluster/roles/cephadm remove node1.ceph.com')
        self.shell.run_cmdline('/ceph_cluster/minions remove node2.ceph.com')
        self.shell.run_cmdline('/ceph_cluster/minions remove node1.ceph.com')
Beispiel #16
0
    def test_ceph_cluster_minions_remove_with_roles(self):
        self.shell.run_cmdline('/ceph_cluster/minions add node1.ceph.com')
        self.shell.run_cmdline('/ceph_cluster/roles/admin add node1.ceph.com')
        self.shell.run_cmdline('/ceph_cluster/roles/bootstrap set node1.ceph.com')
        self.clearSysOut()

        self.shell.run_cmdline('/ceph_cluster/minions remove node1.ceph.com')
        self.assertInSysOut("Cannot remove host 'node1.ceph.com' because it has roles defined: "
                            "['admin', 'bootstrap']")
        self.assertEqual(PillarManager.get('ceph-salt:minions:all'), ['node1.ceph.com'])

        self.shell.run_cmdline('/ceph_cluster/roles/admin remove node1.ceph.com')
        self.shell.run_cmdline('/ceph_cluster/roles/bootstrap reset')
        self.shell.run_cmdline('/ceph_cluster/minions remove node1.ceph.com')
Beispiel #17
0
    def test_ceph_cluster_minions(self):
        self.shell.run_cmdline('/ceph_cluster/minions add node1.ceph.com')
        self.assertInSysOut('1 minion added.')
        self.assertGrains('node1.ceph.com', 'ceph-salt', {'member': True,
                                                          'roles': [],
                                                          'execution': {}})
        self.assertEqual(PillarManager.get('ceph-salt:minions:all'), ['node1.ceph.com'])
        self.assertEqual(PillarManager.get('ceph-salt:minions:admin'), [])
        self.assertEqual(PillarManager.get('ceph-salt:bootstrap_minion'), None)

        self.shell.run_cmdline('/ceph_cluster/minions remove node1.ceph.com')
        self.assertInSysOut('1 minion removed.')
        self.assertNotInGrains('node1.ceph.com', 'ceph-salt')
        self.assertEqual(PillarManager.get('ceph-salt:minions:all'), [])
        self.assertEqual(PillarManager.get('ceph-salt:minions:admin'), [])
        self.assertEqual(PillarManager.get('ceph-salt:bootstrap_minion'), None)
Beispiel #18
0
    def test_import(self):
        self.fs.create_file('/config.json',
                            contents=json.dumps({
                                'minions': {
                                    'all': ['node1', 'node2'],
                                    'admin': [],
                                    'mgr': ['node1'],
                                    'mon': {
                                        'node2': '10.20.39.202'
                                    }
                                },
                                'time_server': {
                                    'server_host': 'server1'
                                }
                            }))
        self.assertTrue(run_import("/config.json"))
        self.assertInSysOut('Configuration imported.')
        self.assertGrains('node1.ceph.com', 'ceph-salt', {
            'member': True,
            'roles': ['mgr'],
            'execution': {}
        })
        self.assertGrains('node2.ceph.com', 'ceph-salt', {
            'member': True,
            'roles': ['mon'],
            'execution': {}
        })
        self.assertEqual(PillarManager.get('ceph-salt:minions:all'),
                         ['node1', 'node2'])
        self.assertEqual(PillarManager.get('ceph-salt:minions:admin'), [])
        self.assertEqual(PillarManager.get('ceph-salt:minions:mgr'), ['node1'])
        self.assertEqual(PillarManager.get('ceph-salt:minions:mon'),
                         {'node2': '10.20.39.202'})
        self.assertIsNone(PillarManager.get('ceph-salt:bootstrap_minion'))
        self.assertEqual(
            PillarManager.get('ceph-salt:time_server:server_host'), 'server1')

        self.shell.run_cmdline('/Time_Server/Server_Hostname reset')
        self.shell.run_cmdline('/Cluster/Roles/Mon rm node2.ceph.com')
        self.shell.run_cmdline('/Cluster/Roles/Mgr rm node1.ceph.com')
        self.shell.run_cmdline('/Cluster/Minions rm node2.ceph.com')
        self.shell.run_cmdline('/Cluster/Minions rm node1.ceph.com')
        self.fs.remove('/config.json')
Beispiel #19
0
 def test_cephadm_bootstrap_dashboard_password(self):
     default = PillarManager.get('ceph-salt:dashboard:password')
     self.assertValueOption('/cephadm_bootstrap/dashboard/password',
                            'ceph-salt:dashboard:password', 'mypassword',
                            default)