def test_run_purge_missing(self, get_object_client_mock, mock_cache): mock_ctx = mock.MagicMock() # setup swift swift = mock.MagicMock() mocked_env = """ name: test-container environments: - path: /path/to/overcloud-default-env.yaml - path: /path/to/ceph-storage-env.yaml """ swift.get_object.return_value = ({}, mocked_env) get_object_client_mock.return_value = swift environments = { '/path/to/overcloud-default-env.yaml': True, '/path/to/network-isolation.json': False, '/path/to/poc-custom-env.yaml': True } action = heat_capabilities.UpdateCapabilitiesAction( environments, self.container_name, True) self.assertEqual( { 'name': 'test-container', 'environments': [{ 'path': '/path/to/overcloud-default-env.yaml' }, { 'path': '/path/to/poc-custom-env.yaml' }] }, action.run(mock_ctx)) mock_cache.assert_called_once_with(mock_ctx, self.container_name, "tripleo.parameters.get")
def test_run(self, get_workflow_client_mock): # setup mistral mistral = mock.MagicMock() mocked_env = mock.MagicMock() mocked_env.variables = { 'environments': [ { 'path': '/path/to/overcloud-default-env.yaml' }, { 'path': '/path/to/ceph-storage-env.yaml' }, ] } mistral.environments.get.return_value = mocked_env get_workflow_client_mock.return_value = mistral environments = { '/path/to/ceph-storage-env.yaml': False, '/path/to/network-isolation.json': False, '/path/to/poc-custom-env.yaml': True } action = heat_capabilities.UpdateCapabilitiesAction( environments, self.container_name) self.assertEqual( { 'environments': [{ 'path': '/path/to/overcloud-default-env.yaml' }, { 'path': '/path/to/poc-custom-env.yaml' }] }, action.run())
def run(self, context): self.context = context swift = self.get_object_client(context) try: plan_env = plan_utils.get_env(swift, self.container) except swiftexceptions.ClientException as err: err_msg = ("Error retrieving environment for plan %s: %s" % (self.container, err)) LOG.exception(err_msg) return actions.Result(error=err_msg) try: env_paths, temp_env_paths = plan_utils.build_env_paths( swift, self.container, plan_env) env_files, env = plan_utils.process_environments_and_files( swift, env_paths) # ensure every image parameter has a default value, even if prepare # didn't return it params = default_image_params() role_data = self._get_role_data(swift) image_params = kolla_builder.container_images_prepare_multi( env, role_data, dry_run=True) if image_params: params.update(image_params) except Exception as err: LOG.exception("Error occurred while processing plan files.") return actions.Result(error=six.text_type(err)) finally: # cleanup any local temp files for f in temp_env_paths: os.remove(f) try: swiftutils.put_object_string( swift, self.container, constants.CONTAINER_DEFAULTS_ENVIRONMENT, yaml.safe_dump({'parameter_defaults': params}, default_flow_style=False)) except swiftexceptions.ClientException as err: err_msg = ("Error updating %s for plan %s: %s" % (constants.CONTAINER_DEFAULTS_ENVIRONMENT, self.container, err)) LOG.exception(err_msg) return actions.Result(error=err_msg) environments = {constants.CONTAINER_DEFAULTS_ENVIRONMENT: True} update_action = heat_capabilities.UpdateCapabilitiesAction( environments, container=self.container) return update_action.run(context)
def test_run_env_missing(self, get_obj_client_mock): mock_ctx = mock.MagicMock() # setup swift swift = mock.MagicMock() swift.get_object.side_effect = (swiftexceptions.ClientException( self.container_name)) get_obj_client_mock.return_value = swift action = heat_capabilities.UpdateCapabilitiesAction( {}, self.container_name) expected = actions.Result( data=None, error="Error retrieving environment for plan test-container: " "test-container") self.assertEqual(expected, action.run(mock_ctx))
def test_run_mistral_error(self, get_workflow_client_mock, get_obj_client_mock): # setup swift swift = mock.MagicMock() swift.get_object.return_value = ({}, MAPPING_YAML_CONTENTS) get_obj_client_mock.return_value = swift # setup mistral mistral = mock.MagicMock() mistral.environments.get = mock.Mock(side_effect=Exception) get_workflow_client_mock.return_value = mistral action = heat_capabilities.UpdateCapabilitiesAction( {}, self.container_name) expected = mistral_workflow_utils.Result( data=None, error="Error retrieving mistral environment. ") self.assertEqual(expected, action.run())
def run(self, context): params = default_image_params() swift = self.get_object_client(context) try: swift.put_object( self.container, constants.CONTAINER_DEFAULTS_ENVIRONMENT, yaml.safe_dump({'parameter_defaults': params}, default_flow_style=False)) except swiftexceptions.ClientException as err: err_msg = ("Error updating %s for plan %s: %s" % (constants.CONTAINER_DEFAULTS_ENVIRONMENT, self.container, err)) LOG.exception(err_msg) return actions.Result(error=err_msg) environments = {constants.CONTAINER_DEFAULTS_ENVIRONMENT: True} update_action = heat_capabilities.UpdateCapabilitiesAction( environments, container=self.container) return update_action.run(context)
def run(self, context): def ffunc(entry): return entry template_file = os.path.join(sys.prefix, 'share', 'tripleo-common', 'container-images', 'overcloud_containers.yaml.j2') builder = kolla_builder.KollaImageBuilder([template_file]) result = builder.container_images_from_template(filter=ffunc) params = {} for entry in result: imagename = entry.get('imagename', '') if 'params' in entry: for p in entry.pop('params'): params[p] = imagename swift = self.get_object_client(context) try: swift.put_object( self.container, constants.CONTAINER_DEFAULTS_ENVIRONMENT, yaml.safe_dump( {'parameter_defaults': params}, default_flow_style=False ) ) except swiftexceptions.ClientException as err: err_msg = ("Error updating %s for plan %s: %s" % ( constants.CONTAINER_DEFAULTS_ENVIRONMENT, self.container, err)) LOG.exception(err_msg) return actions.Result(error=err_msg) environments = {constants.CONTAINER_DEFAULTS_ENVIRONMENT: True} update_action = heat_capabilities.UpdateCapabilitiesAction( environments, container=self.container) return update_action.run(context)