Beispiel #1
0
    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")
Beispiel #2
0
    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)
Beispiel #4
0
    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))
Beispiel #5
0
    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)