예제 #1
0
 def test_initialize_git_repo(self):
     heat = mock.MagicMock()
     heat.stacks.get.return_value = fakes.create_tht_stack()
     self.config = ooo_config.Config(heat)
     self.tmp_dir = self.useFixture(fixtures.TempDir()).path
     repo = self.config.initialize_git_repo(self.tmp_dir)
     self.assertIsInstance(repo, git.Repo)
예제 #2
0
 def test_initialize_git_repo(self):
     heat = mock.MagicMock()
     heat.stacks.get.return_value = fakes.create_tht_stack()
     self.config = ooo_config.Config(heat)
     self.tmp_dir = self.useFixture(fixtures.TempDir()).path
     repo = self.config.initialize_git_repo(self.tmp_dir)
     self.assertIsInstance(repo, git.Repo)
예제 #3
0
    def test_overcloud_config_generate_config(self, mock_rmtree, mock_open,
                                              mock_mkdir, mock_copyfile):
        config_type_list = [
            'config_settings', 'global_config_settings', 'logging_sources',
            'monitoring_subscriptions', 'service_config_settings',
            'service_metadata_settings', 'service_names',
            'upgrade_batch_tasks', 'upgrade_tasks', 'external_deploy_tasks'
        ]
        fake_role = [
            role for role in fakes.FAKE_STACK['outputs'][1]['output_value']
        ]

        heat = mock.MagicMock()
        heat.stacks.get.return_value = fakes.create_tht_stack()
        self.config = ooo_config.Config(heat)
        self.config.download_config('overcloud', '/tmp/tht', config_type_list)

        expected_mkdir_calls = [call('/tmp/tht/%s' % r) for r in fake_role]
        mock_mkdir.assert_has_calls(expected_mkdir_calls, any_order=True)
        expected_calls = []
        for config in config_type_list:
            for role in fake_role:
                if 'external' in config:
                    continue
                elif config == 'step_config':
                    expected_calls += [
                        call('/tmp/tht/%s/%s.pp' % (role, config))
                    ]
                else:
                    expected_calls += [
                        call('/tmp/tht/%s/%s.yaml' % (role, config))
                    ]
        mock_open.assert_has_calls(expected_calls, any_order=True)
예제 #4
0
 def test_create_config_dir(self, mock_os_path_exists, mock_rmtree):
     mock_os_path_exists.get.return_value = True
     heat = mock.MagicMock()
     heat.stacks.get.return_value = fakes.create_tht_stack()
     self.config = ooo_config.Config(heat)
     self.config.create_config_dir('/tmp/tht', False)
     expected_rmtree_calls = [call('/tmp/tht')]
     mock_rmtree.assert_has_calls(expected_rmtree_calls)
예제 #5
0
 def test_create_config_dir(self, mock_os_path_exists, mock_rmtree):
     mock_os_path_exists.get.return_value = True
     heat = mock.MagicMock()
     heat.stacks.get.return_value = fakes.create_tht_stack()
     self.config = ooo_config.Config(heat)
     self.config.create_config_dir('/tmp/tht', False)
     expected_rmtree_calls = [call('/tmp/tht')]
     mock_rmtree.assert_has_calls(expected_rmtree_calls)
예제 #6
0
 def test_overcloud_config_wrong_config_type(self, mock_rmtree,
                                             mock_open, mock_mkdir,
                                             mock_repo):
     args = {'name': 'overcloud', 'config_dir': '/tmp/tht',
             'config_type': ['bad_config']}
     heat = mock.MagicMock()
     heat.stacks.get.return_value = fakes.create_tht_stack()
     self.config = ooo_config.Config(heat)
     self.assertRaises(
         KeyError,
         self.config.download_config, *args)
예제 #7
0
 def test_overcloud_config_wrong_config_type(self, mock_rmtree,
                                             mock_open, mock_mkdir,
                                             mock_repo):
     args = {'name': 'overcloud', 'config_dir': '/tmp/tht',
             'config_type': ['bad_config']}
     heat = mock.MagicMock()
     heat.stacks.get.return_value = fakes.create_tht_stack()
     self.config = ooo_config.Config(heat)
     self.assertRaises(
         KeyError,
         self.config.download_config, *args)
예제 #8
0
    def test_render_role_network_config_empty_dict(
            self, mock_get_role_net_config_data):
        heat = mock.MagicMock()
        heat.stacks.get.return_value = fakes.create_tht_stack()
        config_mock = mock.MagicMock()
        config_mock.config = {}
        heat.software_configs.get.return_value = config_mock

        self.config = ooo_config.Config(heat)
        mock_get_role_net_config_data.return_value = dict(Controller='config')
        config_dir = '/tmp/tht'
        self.config.render_network_config(config_dir)
예제 #9
0
 def test_render_role_network_config(self, mock_get_role_net_config_data,
                                     mock_open):
     heat = mock.MagicMock()
     heat.stacks.get.return_value = fakes.create_tht_stack()
     config_mock = mock.MagicMock()
     config_mock.config = 'some config'
     heat.software_configs.get.return_value = config_mock
     self.config = ooo_config.Config(heat)
     mock_get_role_net_config_data.return_value = dict(Controller='config')
     config_dir = '/tmp/tht'
     self.config.render_network_config(config_dir)
     self.assertEqual(1, mock_open.call_count)
     self.assertEqual('/tmp/tht/Controller/NetworkConfig',
                      mock_open.call_args_list[0][0][0])
예제 #10
0
    def test_overcloud_config_upgrade_tasks(self):

        heat = mock.MagicMock()
        heat.stacks.get.return_value = fakes.create_tht_stack()
        self.config = ooo_config.Config(heat)
        self.config.fetch_config('overcloud')
        self.tmp_dir = self.useFixture(fixtures.TempDir()).path
        fake_role = list(self.config.stack_outputs.get('RoleData'))
        expected_tasks = {'FakeController': {0: [],
                                             1: [{'name': 'Stop fake service',
                                                  'service': 'name=fake '
                                                  'state=stopped',
                                                  'when': 'step|int == 1'}],
                                             2: [],
                                             3: [],
                                             4: [],
                                             5: []},
                          'FakeCompute': {0: [],
                                          1: [{'name': 'Stop fake service',
                                               'service': 'name=fake '
                                               'state=stopped',
                                               'when': ['nova_api_enabled.rc'
                                                        ' == 0',
                                                        'httpd_enabled.rc'
                                                        ' != 0',
                                                        'step|int == 1']}],
                                          2: [{'name': 'Stop nova-compute '
                                               'service',
                                               'service': 'name=openstack-'
                                               'nova-compute state=stopped',
                                               'when': ['nova_compute_'
                                                        'enabled.rc == 0',
                                                        'step|int == 2',
                                                        'existing',
                                                        'list']}],
                                          3: [],
                                          4: [],
                                          5: []}}
        for role in fake_role:
            filedir = os.path.join(self.tmp_dir, role)
            os.makedirs(filedir)
            for step in range(constants.DEFAULT_STEPS_MAX):
                filepath = os.path.join(filedir, "upgrade_tasks_step%s.yaml"
                                        % step)
                playbook_tasks = self.config._write_tasks_per_step(
                    self.config.stack_outputs.get('RoleData')[role]
                    ['upgrade_tasks'], role, filepath, step)
                self.assertTrue(os.path.isfile(filepath))
                self.assertEqual(expected_tasks[role][step], playbook_tasks)
예제 #11
0
    def test_overcloud_config_upgrade_tasks(self):

        heat = mock.MagicMock()
        heat.stacks.get.return_value = fakes.create_tht_stack()
        self.config = ooo_config.Config(heat)
        self.tmp_dir = self.useFixture(fixtures.TempDir()).path
        fake_role = [role for role in
                     fakes.FAKE_STACK['outputs'][1]['output_value']]
        expected_tasks = {'FakeController': {0: [],
                                             1: [{'name': 'Stop fake service',
                                                  'service': 'name=fake '
                                                  'state=stopped',
                                                  'when': 'step|int == 1'}],
                                             2: [],
                                             3: [],
                                             4: [],
                                             5: []},
                          'FakeCompute': {0: [],
                                          1: [{'name': 'Stop fake service',
                                               'service': 'name=fake '
                                               'state=stopped',
                                               'when': ['nova_api_enabled.rc'
                                                        ' == 0',
                                                        'httpd_enabled.rc'
                                                        ' != 0',
                                                        'step|int == 1']}],
                                          2: [{'name': 'Stop nova-compute '
                                               'service',
                                               'service': 'name=openstack-'
                                               'nova-compute state=stopped',
                                               'when': ['nova_compute_'
                                                        'enabled.rc == 0',
                                                        'step|int == 2',
                                                        'existing',
                                                        'list']}],
                                          3: [],
                                          4: [],
                                          5: []}}
        for role in fake_role:
            filedir = os.path.join(self.tmp_dir, role)
            os.makedirs(filedir)
            for step in range(constants.UPGRADE_STEPS_MAX):
                filepath = os.path.join(filedir, "upgrade_tasks_step%s.yaml"
                                        % step)
                playbook_tasks = self.config._write_tasks_per_step(
                    fakes.FAKE_STACK['outputs'][1]['output_value'][role]
                    ['upgrade_tasks'], role, filepath, step)
                self.assertTrue(os.path.isfile(filepath))
                self.assertEqual(expected_tasks[role][step], playbook_tasks)
예제 #12
0
    def test_overcloud_config_dont_preserve_config(self,
                                                   mock_os_path_exists,
                                                   mock_rmtree,
                                                   mock_open,
                                                   mock_mkdir,
                                                   mock_copyfile,
                                                   mock_repo,
                                                   mock_git_init):
        config_type_list = ['config_settings', 'global_config_settings',
                            'logging_sources', 'monitoring_subscriptions',
                            'service_config_settings',
                            'service_metadata_settings',
                            'service_names',
                            'upgrade_batch_tasks', 'upgrade_tasks',
                            'external_deploy_tasks']

        mock_os_path_exists.get.return_value = True
        heat = mock.MagicMock()
        heat.stacks.get.return_value = fakes.create_tht_stack()
        self.config = ooo_config.Config(heat)
        self.config.fetch_config('overcloud')
        fake_role = list(self.config.stack_outputs.get('RoleData'))
        self.config.download_config('overcloud', '/tmp/tht', config_type_list,
                                    False)

        mock_git_init.assert_called_once_with('/tmp/tht')
        expected_rmtree_calls = [call('/tmp/tht')]
        mock_rmtree.assert_has_calls(expected_rmtree_calls)

        expected_mkdir_calls = [call('/tmp/tht/%s' % r) for r in fake_role]
        mock_mkdir.assert_has_calls(expected_mkdir_calls, any_order=True)
        mock_mkdir.assert_called()
        expected_calls = []
        for config in config_type_list:
            for role in fake_role:
                if 'external' in config:
                    continue
                elif config == 'step_config':
                    expected_calls += [call('/tmp/tht/%s/%s.pp' %
                                            (role, config))]
                elif config == 'param_config':
                    expected_calls += [call('/tmp/tht/%s/%s.json' %
                                            (role, config))]
                else:
                    expected_calls += [call('/tmp/tht/%s/%s.yaml' %
                                            (role, config))]
        mock_open.assert_has_calls(expected_calls, any_order=True)
예제 #13
0
    def test_overcloud_config_upgrade_tasks(self):

        heat = mock.MagicMock()
        heat.stacks.get.return_value = fakes.create_tht_stack()
        self.config = ooo_config.Config(heat)
        self.tmp_dir = self.useFixture(fixtures.TempDir()).path
        fake_role = [
            role for role in fakes.FAKE_STACK['outputs'][1]['output_value']
        ]
        expected_tasks = {
            'FakeController': [{
                'name': 'Stop fake service',
                'service': 'name=fake '
                'state=stopped',
                'when': 'step|int == 1'
            }],
            'FakeCompute': [{
                'name':
                'Stop fake service',
                'service':
                'name=fake state=stopped',
                'when': [
                    'nova_api_enabled.rc == 0', 'httpd_enabled.rc != 0',
                    'step|int == 1'
                ]
            }, {
                'name':
                'Stop nova-'
                'compute service',
                'service':
                'name=openstack-nova-'
                'compute state=stopped',
                'when': [
                    'nova_compute_enabled.rc == 0', 'step|int == 2',
                    'existing', 'list'
                ]
            }]
        }
        for role in fake_role:
            filedir = os.path.join(self.tmp_dir, role)
            os.makedirs(filedir)
            filepath = os.path.join(filedir, "upgrade_tasks_playbook.yaml")
            playbook_tasks = self.config._write_playbook_get_tasks(
                fakes.FAKE_STACK['outputs'][1]['output_value'][role]
                ['upgrade_tasks'], role, filepath)
            self.assertTrue(os.path.isfile(filepath))
            self.assertEqual(expected_tasks[role], playbook_tasks)
예제 #14
0
 def test_create_config_dir(self, mock_os_path_exists, mock_rmtree,
                            mock_makedirs):
     mock_os_path_exists.get.return_value = True
     heat = mock.MagicMock()
     heat.stacks.get.return_value = fakes.create_tht_stack()
     self.config = ooo_config.Config(heat)
     self.config.create_config_dir('/tmp/tht', False)
     expected_rmtree_calls = [call('/tmp/tht')]
     mock_rmtree.assert_has_calls(expected_rmtree_calls)
     expected_makedirs_calls = [
         call('/tmp/tht', mode=0o700, exist_ok=True),
         call('/tmp/tht/artifacts', mode=0o700, exist_ok=True),
         call('/tmp/tht/env', mode=0o700, exist_ok=True),
         call('/tmp/tht/inventory', mode=0o700, exist_ok=True),
         call('/tmp/tht/profiling_data', mode=0o700, exist_ok=True),
         call('/tmp/tht/project', mode=0o700, exist_ok=True),
         call('/tmp/tht/roles', mode=0o700, exist_ok=True),
     ]
     mock_makedirs.assert_has_calls(expected_makedirs_calls)
예제 #15
0
    def test_overcloud_config_dont_preserve_config(self,
                                                   mock_os_path_exists,
                                                   mock_rmtree,
                                                   mock_open,
                                                   mock_mkdir,
                                                   mock_copyfile,
                                                   mock_repo,
                                                   mock_git_init):
        config_type_list = ['config_settings', 'global_config_settings',
                            'logging_sources', 'monitoring_subscriptions',
                            'service_config_settings',
                            'service_metadata_settings',
                            'service_names',
                            'upgrade_batch_tasks', 'upgrade_tasks',
                            'external_deploy_tasks']
        fake_role = [role for role in
                     fakes.FAKE_STACK['outputs'][1]['output_value']]

        mock_os_path_exists.get.return_value = True
        heat = mock.MagicMock()
        heat.stacks.get.return_value = fakes.create_tht_stack()
        self.config = ooo_config.Config(heat)
        self.config.download_config('overcloud', '/tmp/tht', config_type_list,
                                    False)

        mock_git_init.assert_called_once_with('/tmp/tht')
        expected_rmtree_calls = [call('/tmp/tht')]
        mock_rmtree.assert_has_calls(expected_rmtree_calls)

        expected_mkdir_calls = [call('/tmp/tht/%s' % r) for r in fake_role]
        mock_mkdir.assert_has_calls(expected_mkdir_calls, any_order=True)
        expected_calls = []
        for config in config_type_list:
            for role in fake_role:
                if 'external' in config:
                    continue
                elif config == 'step_config':
                    expected_calls += [call('/tmp/tht/%s/%s.pp' %
                                            (role, config))]
                else:
                    expected_calls += [call('/tmp/tht/%s/%s.yaml' %
                                            (role, config))]
        mock_open.assert_has_calls(expected_calls, any_order=True)
예제 #16
0
 def test_validate_config(self, mock_yaml, mock_deployment_data,
                          mock_config_dict):
     stack_config = """
     Controller:
       ctlplane:
         overcloud-controller-0.ctlplane.localdomain
     Compute:
       ctlplane:
         overcloud-novacompute-0.ctlplane.localdomain
         overcloud-novacompute-1.ctlplane.localdomain
         overcloud-novacompute-2.ctlplane.localdomain
     """
     yaml_file = '/tmp/testfile.yaml'
     heat = mock.MagicMock()
     heat.stacks.get.return_value = fakes.create_tht_stack()
     self.config = ooo_config.Config(heat)
     self.config.validate_config(stack_config, yaml_file)
     expected_yaml_safe_load_calls = [call(stack_config)]
     mock_yaml.assert_has_calls(expected_yaml_safe_load_calls)
예제 #17
0
 def test_validate_config_invalid_yaml(self, mock_deployment_data,
                                       mock_config_dict):
     # Use invalid YAML to assert that we properly handle the exception
     stack_config = """
     Controller:
       ctlplane:
         overcloud-controller-0.ctlplane.localdomain
     Compute:
       ctlplane:
     overcloud-novacompute-0.ctlplane.localdomain
     overcloud-novacompute-1.ctlplane.localdomain
     overcloud-novacompute-2.ctlplane.localdomain
     """
     yaml_file = '/tmp/testfile.yaml'
     heat = mock.MagicMock()
     heat.stacks.get.return_value = fakes.create_tht_stack()
     self.config = ooo_config.Config(heat)
     self.assertRaises(yaml.scanner.ScannerError,
                       self.config.validate_config, stack_config, yaml_file)
예제 #18
0
 def test_validate_config_invalid_yaml(self, mock_deployment_data,
                                       mock_config_dict):
     # Use invalid YAML to assert that we properly handle the exception
     stack_config = """
     Controller:
       ctlplane:
         overcloud-controller-0.ctlplane.localdomain
     Compute:
       ctlplane:
     overcloud-novacompute-0.ctlplane.localdomain
     overcloud-novacompute-1.ctlplane.localdomain
     overcloud-novacompute-2.ctlplane.localdomain
     """
     yaml_file = '/tmp/testfile.yaml'
     heat = mock.MagicMock()
     heat.stacks.get.return_value = fakes.create_tht_stack()
     self.config = ooo_config.Config(heat)
     self.assertRaises(yaml.scanner.ScannerError,
                       self.config.validate_config, stack_config, yaml_file)
예제 #19
0
 def test_validate_config(self, mock_yaml, mock_deployment_data,
                          mock_config_dict):
     stack_config = """
     Controller:
       ctlplane:
         overcloud-controller-0.ctlplane.localdomain
     Compute:
       ctlplane:
         overcloud-novacompute-0.ctlplane.localdomain
         overcloud-novacompute-1.ctlplane.localdomain
         overcloud-novacompute-2.ctlplane.localdomain
     """
     yaml_file = '/tmp/testfile.yaml'
     heat = mock.MagicMock()
     heat.stacks.get.return_value = fakes.create_tht_stack()
     self.config = ooo_config.Config(heat)
     self.config.validate_config(stack_config, yaml_file)
     expected_yaml_safe_load_calls = [call(stack_config)]
     mock_yaml.assert_has_calls(expected_yaml_safe_load_calls)
예제 #20
0
    def test_overcloud_config_one_config_type(self, mock_rmtree, mock_open,
                                              mock_mkdir, mock_copyfile):

        expected_config_type = 'config_settings'
        fake_role = [
            role for role in fakes.FAKE_STACK['outputs'][1]['output_value']
        ]

        heat = mock.MagicMock()
        heat.stacks.get.return_value = fakes.create_tht_stack()
        self.config = ooo_config.Config(heat)
        self.config.download_config('overcloud', '/tmp/tht',
                                    ['config_settings'])
        expected_mkdir_calls = [call('/tmp/tht/%s' % r) for r in fake_role]
        expected_calls = [
            call('/tmp/tht/%s/%s.yaml' % (r, expected_config_type))
            for r in fake_role
        ]
        mock_mkdir.assert_has_calls(expected_mkdir_calls, any_order=True)
        mock_open.assert_has_calls(expected_calls, any_order=True)
예제 #21
0
    def test_overcloud_config_one_config_type(self, mock_rmtree, mock_open,
                                              mock_mkdir, mock_copyfile,
                                              mock_git_init):

        expected_config_type = 'config_settings'

        heat = mock.MagicMock()
        heat.stacks.get.return_value = fakes.create_tht_stack()
        self.config = ooo_config.Config(heat)
        self.config.fetch_config('overcloud')
        fake_role = list(self.config.stack_outputs.get('RoleData'))
        self.config.download_config('overcloud', '/tmp/tht',
                                    ['config_settings'])
        expected_mkdir_calls = [call('/tmp/tht/%s' % r) for r in fake_role]
        expected_calls = [
            call('/tmp/tht/%s/%s.yaml' % (r, expected_config_type))
            for r in fake_role
        ]
        mock_mkdir.assert_has_calls(expected_mkdir_calls, any_order=True)
        mock_mkdir.assert_called()
        mock_open.assert_has_calls(expected_calls, any_order=True)
        mock_git_init.assert_called_once_with('/tmp/tht')
예제 #22
0
    def test_overcloud_config_one_config_type(self,
                                              mock_rmtree,
                                              mock_open,
                                              mock_mkdir,
                                              mock_copyfile,
                                              mock_git_init):

        expected_config_type = 'config_settings'
        fake_role = [role for role in
                     fakes.FAKE_STACK['outputs'][1]['output_value']]

        heat = mock.MagicMock()
        heat.stacks.get.return_value = fakes.create_tht_stack()
        self.config = ooo_config.Config(heat)
        self.config.download_config('overcloud', '/tmp/tht',
                                    ['config_settings'])
        expected_mkdir_calls = [call('/tmp/tht/%s' % r) for r in fake_role]
        expected_calls = [call('/tmp/tht/%s/%s.yaml'
                          % (r, expected_config_type))
                          for r in fake_role]
        mock_mkdir.assert_has_calls(expected_mkdir_calls, any_order=True)
        mock_open.assert_has_calls(expected_calls, any_order=True)
        mock_git_init.assert_called_once_with('/tmp/tht')