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)
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)
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)
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)
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)
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])
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)
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)
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)
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)
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)
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)
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)
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)
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)
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')
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')