From 0923fca80623facce941120a7dc544e5395793ca Mon Sep 17 00:00:00 2001 From: Honza Pokorny Date: Tue, 20 Nov 2018 15:22:51 -0400 Subject: [PATCH] Add a way to update ContainerImagePrepare params Closes-Bug: #1807154 Change-Id: I1e1cd3c2756c1cafe8096dd19cd572887917b853 --- setup.cfg | 1 + tripleo_common/actions/container_images.py | 38 ++++++++++++ .../tests/actions/test_container_images.py | 58 +++++++++++++++++++ workbooks/container_images.yaml | 51 ++++++++++++++++ 4 files changed, 148 insertions(+) create mode 100644 workbooks/container_images.yaml diff --git a/setup.cfg b/setup.cfg index 23858d54e..3930c1c72 100644 --- a/setup.cfg +++ b/setup.cfg @@ -85,6 +85,7 @@ mistral.actions = tripleo.config.get_overcloud_config = tripleo_common.actions.config:GetOvercloudConfig tripleo.container_images.prepare = tripleo_common.actions.container_images:PrepareContainerImageEnv tripleo.container_images.prepare_params = tripleo_common.actions.container_images:PrepareContainerImageParameters + tripleo.container_images.container_image_prepare_defaults = tripleo_common.actions.container_images:ContainerImagePrepareDefault tripleo.deployment.config = tripleo_common.actions.deployment:OrchestrationDeployAction tripleo.deployment.deploy = tripleo_common.actions.deployment:DeployStackAction tripleo.deployment.get_deployment_failures = tripleo_common.actions.deployment:DeploymentFailuresAction diff --git a/tripleo_common/actions/container_images.py b/tripleo_common/actions/container_images.py index d8b7fc559..1582f802f 100644 --- a/tripleo_common/actions/container_images.py +++ b/tripleo_common/actions/container_images.py @@ -13,6 +13,7 @@ # License for the specific language governing permissions and limitations # under the License. +import copy import logging import os import sys @@ -165,3 +166,40 @@ class PrepareContainerImageParameters(base.TripleOAction): update_action = heat_capabilities.UpdateCapabilitiesAction( environments, container=self.container) return update_action.run(context) + + +class ContainerImagePrepareDefault(base.TripleOAction): + """ContainerImagePrepare default parameters + + """ + + def __init__(self, values): + + super(ContainerImagePrepareDefault, self).__init__() + self.values = values + + def run(self, context): + cip = copy.deepcopy(kolla_builder.CONTAINER_IMAGE_PREPARE_PARAM) + + for entry in cip: + if 'push_destination' in self.values: + entry['push_destination'] = self.values['push_destination'] + + if 'tag_from_label' in self.values: + entry['tag_from_label'] = self.values['tag_from_label'] + + if 'namespace' in self.values: + entry['set']['namespace'] = self.values['namespace'] + + if 'name_prefix' in self.values: + entry['set']['name_prefix'] = self.values['name_prefix'] + + if 'name_suffix' in self.values: + entry['set']['name_suffix'] = self.values['name_suffix'] + + if 'tag' in self.values: + entry['set']['tag'] = self.values['tag'] + + return { + 'ContainerImagePrepare': cip + } diff --git a/tripleo_common/tests/actions/test_container_images.py b/tripleo_common/tests/actions/test_container_images.py index ee63d1a49..5899b36ae 100644 --- a/tripleo_common/tests/actions/test_container_images.py +++ b/tripleo_common/tests/actions/test_container_images.py @@ -22,6 +22,7 @@ import yaml from mistral_lib import actions from tripleo_common.actions import container_images +from tripleo_common.image import kolla_builder from tripleo_common.tests import base @@ -177,3 +178,60 @@ class PrepareContainerImageParametersTest(base.TestCase): 'environments/containers-default-parameters.yaml', image_env_contents ) + + +class ContainerImagePrepareDefaultTest(base.TestCase): + + def setUp(self): + super(ContainerImagePrepareDefaultTest, self).setUp() + self.ctx = mock.MagicMock() + + def test_empty(self): + action = container_images.ContainerImagePrepareDefault({}) + result = action.run(self.ctx) + + self.assertEqual( + result['ContainerImagePrepare'], + kolla_builder.CONTAINER_IMAGE_PREPARE_PARAM + ) + + def test_some_values(self): + values = { + 'tag_from_label': 'tag label', + 'push_destination': True, + 'namespace': 'namespace', + 'name_prefix': 'prefix-', + 'name_suffix': '-suffix', + 'tag': 'tag' + } + action = container_images.ContainerImagePrepareDefault(values) + result = action.run(self.ctx) + + self.assertTrue('ContainerImagePrepare' in result) + self.assertEqual(1, len(result['ContainerImagePrepare'])) + + self.assertTrue('tag_from_label' in result['ContainerImagePrepare'][0]) + self.assertEqual( + 'tag label', + result['ContainerImagePrepare'][0]['tag_from_label'] + ) + + self.assertTrue( + 'push_destination' in result['ContainerImagePrepare'][0] + ) + self.assertEqual( + True, + result['ContainerImagePrepare'][0]['push_destination'] + ) + + self.assertTrue('set' in result['ContainerImagePrepare'][0]) + self.assertTrue( + isinstance(result['ContainerImagePrepare'][0]['set'], dict) + ) + + s = result['ContainerImagePrepare'][0]['set'] + + self.assertEqual(s['namespace'], 'namespace') + self.assertEqual(s['name_prefix'], 'prefix-') + self.assertEqual(s['name_suffix'], '-suffix') + self.assertEqual(s['tag'], 'tag') diff --git a/workbooks/container_images.yaml b/workbooks/container_images.yaml new file mode 100644 index 000000000..d4b5d05fe --- /dev/null +++ b/workbooks/container_images.yaml @@ -0,0 +1,51 @@ +--- +version: '2.0' +name: tripleo.container_images.v1 +description: TripleO Container Images Workflows v1 + +workflows: + container_image_prepare_default: + description: > + Populate the ContainerImagePrepare parameter + + tags: + - tripleo-common-managed + + input: + - container + - container_image_values: {} + - update_parameters: true + - queue_name: tripleo + + tasks: + format_data: + action: tripleo.container_images.container_image_prepare_defaults values=<% $.container_image_values %> + publish: + status: SUCCESS + params: <% task().result %> + publish-on-error: + status: FAILED + message: <% task().result %> + on-error: send_message + on-success: + - update_parameters: <% $.update_parameters %> + - send_message: <% not $.update_parameters %> + + update_parameters: + action: tripleo.parameters.update + input: + container: <% $.container %> + parameters: <% $.params %> + publish-on-error: + status: FAILED + message: <% task().result %> + on-complete: send_message + + send_message: + workflow: tripleo.messaging.v1.send + input: + queue_name: <% $.queue_name %> + type: <% execution().name %> + status: <% $.status %> + execution: <% execution() %> + message: <% $.get('message', '') %>