Beispiel #1
0
    def test_convert_task_transitions_common_publish_keys_different_values(self):
        converter = workflows_base.WorkflowConverter()
        task_spec = OrderedMap([
            ('publish', OrderedMap([
                ('good_data', '{{ _.good }}'),
                ('common_key_1', '{{ _.common_data }}'),
                ('common_key_2', '{{ _.different_data_1_1 }}'),
                ('common_key_3', '{{ _.different_data_1_2 }}'),
            ])),
            ('publish-on-error', OrderedMap([
                ('bad_data', '{{ _.bad }}'),
                ('common_key_1', '{{ _.common_data }}'),
                ('common_key_2', '{{ _.different_data_2_1 }}'),
                ('common_key_3', '{{ _.different_data_2_2 }}'),
            ])),
            ('on-complete', [
                OrderedMap([('do_thing_sometimes', '{{ _.d }}')]),
                'do_thing_always'
            ]),
        ])
        expr_converter = jinja.JinjaExpressionConverter()

        with self.assertRaises(NotImplementedError) as ctx_m:
            converter.convert_task_transitions("tsk_name", task_spec, expr_converter, set())

        rgx = re.compile(r"Task 'tsk_name' contains one or more keys "
                         r"\((?:common_key_2, common_key_3|common_key_3, common_key_2)\) "
                         r"in both publish and publish-on-error dictionaries that have different "
                         r"values\. Please either remove the common keys, or ensure that the "
                         r"values of any common keys are the same\.")
        self.assertRegex(str(ctx_m.exception), rgx)
Beispiel #2
0
 def test_convert_tasks(self):
     converter = workflows_base.WorkflowConverter()
     expr_converter = jinja.JinjaExpressionConverter()
     mistral_tasks = OrderedMap([
         ('jinja_task', OrderedMap([
             ('action', 'mypack.actionname'),
             ('input', OrderedMap([
                 ('cmd', '{{ _.test }}'),
             ])),
             ('on-success', ['next_task']),
         ]))
     ])
     result = converter.convert_tasks(mistral_tasks, expr_converter, set())
     self.assertEqual(result, OrderedMap([
         ('jinja_task', OrderedMap([
             ('action', 'mypack.actionname'),
             ('input', OrderedMap([
                 ('cmd', '{{ ctx().test }}'),
             ])),
             ('next', [
                 OrderedMap([
                     ('when', '{{ succeeded() }}'),
                     ('do', [
                         'next_task',
                     ])
                 ]),
             ]),
         ]))
     ]))
Beispiel #3
0
    def test_convert_task_transitions_common_publish_keys_same_values(self):
        converter = workflows_base.WorkflowConverter()
        task_spec = OrderedMap([
            ('publish', OrderedMap([
                ('good_data', '{{ _.good }}'),
                ('common_data_1', '{{ _.common_1 }}'),
                ('common_data_2', '{{ _.common_2 }}'),
            ])),
            ('publish-on-error', OrderedMap([
                ('bad_data', '{{ _.bad }}'),
                ('common_data_1', '{{ _.common_1 }}'),
                ('common_data_2', '{{ _.common_2 }}'),
            ])),
            ('on-complete', [
                'do_thing_always'
            ]),
        ])
        expr_converter = jinja.JinjaExpressionConverter()

        result = converter.convert_task_transitions("task_name", task_spec, expr_converter, set())
        self.assertDictEqual(result, OrderedMap([
            ('next', [
                OrderedMap([
                    ('publish', [
                        {'good_data': '{{ ctx().good }}'},
                        {'common_data_1': '{{ ctx().common_1 }}'},
                        {'common_data_2': '{{ ctx().common_2 }}'},
                        {'bad_data': '{{ ctx().bad }}'},
                    ]),
                    ('do', [
                        'do_thing_always',
                    ]),
                ]),
            ]),
        ]))
Beispiel #4
0
 def expr_type_converter(self, expr_type):
     if expr_type is None:
         expr_converter = jinja.JinjaExpressionConverter()
     elif isinstance(expr_type, six.string_types):
         expr_type = expr_type.lower()
         if expr_type == 'jinja':
             expr_converter = jinja.JinjaExpressionConverter()
         elif expr_type == 'yaql':
             expr_converter = yql.YaqlExpressionConverter()
         else:
             raise TypeError(
                 "Unknown expression type: {}".format(expr_type))
     elif isinstance(expr_type, expr_base.BaseExpressionConverter):
         expr_converter = expr_type
     else:
         raise TypeError("Unknown expression class type: {}".format(
             type(expr_type)))
     return expr_converter
Beispiel #5
0
    def test_convert_task_transition_simple_no_publish(self):
        converter = workflows_base.WorkflowConverter()
        transitions = ['a', 'b', 'c']
        publish = None
        orquesta_expr = 'succeeded()'
        expr_converter = jinja.JinjaExpressionConverter()

        result = converter.convert_task_transition_simple(transitions,
                                                          publish,
                                                          orquesta_expr,
                                                          expr_converter)

        expected = OrderedMap([
            ('when', '{{ succeeded() }}'),
            ('do', ['a', 'b', 'c']),
        ])
        self.assertEqual(result, expected)
Beispiel #6
0
    def test_convert_task_transition_simple_no_transitions(self):
        converter = workflows_base.WorkflowConverter()
        transitions = None
        publish = OrderedMap([('key_plain', 'data'),
                              ('key_expr', '{{ _.test }}')])
        orquesta_expr = 'succeeded()'
        expr_converter = jinja.JinjaExpressionConverter()

        result = converter.convert_task_transition_simple(transitions,
                                                          publish,
                                                          orquesta_expr,
                                                          expr_converter)

        expected = OrderedMap([
            ('when', '{{ succeeded() }}'),
            ('publish', [
                {'key_plain': 'data'},
                {'key_expr': '{{ ctx().test }}'}
            ]),
        ])
        self.assertEqual(result, expected)
Beispiel #7
0
 def test_expr_type_converter_class_jinja(self):
     expr_type = jinja.JinjaExpressionConverter()
     converter = workflows_base.WorkflowConverter()
     result = converter.expr_type_converter(expr_type)
     self.assertIs(result, expr_type)
Beispiel #8
0
 def test_convert_task_transitions_empty(self):
     converter = workflows_base.WorkflowConverter()
     task_spec = OrderedMap([])
     expr_converter = jinja.JinjaExpressionConverter()
     result = converter.convert_task_transitions("task_name", task_spec, expr_converter, set())
     self.assertEqual(result, OrderedMap([]))
Beispiel #9
0
 def test_convert_task_transitions(self):
     converter = workflows_base.WorkflowConverter()
     task_spec = OrderedMap([
         ('publish', OrderedMap([
             ('good_data', '{{ _.good }}'),
         ])),
         ('publish-on-error', OrderedMap([
             ('bad_data', '{{ _.bad }}'),
         ])),
         ('on-success', [
             OrderedMap([('do_thing_a', '{{ _.x }}')]),
             OrderedMap([('do_thing_b', '{{ _.x }}')])
         ]),
         ('on-error', [
             OrderedMap([('do_thing_error', '{{ _.e }}')]),
         ]),
         ('on-complete', [
             OrderedMap([('do_thing_sometimes', '{{ _.d }}')]),
             'do_thing_always'
         ]),
     ])
     expr_converter = jinja.JinjaExpressionConverter()
     result = converter.convert_task_transitions("task_name", task_spec, expr_converter, set())
     self.assertDictEqual(result, OrderedMap([
         ('next', [
             OrderedMap([
                 ('when', '{{ succeeded() and (ctx().x) }}'),
                 ('publish', [
                     {'good_data': '{{ ctx().good }}'}
                 ]),
                 ('do', [
                     'do_thing_a',
                     'do_thing_b',
                 ]),
             ]),
             OrderedMap([
                 ('when', '{{ failed() and (ctx().e) }}'),
                 ('publish', [
                     {'bad_data': '{{ ctx().bad }}'}
                 ]),
                 ('do', [
                     'do_thing_error',
                 ]),
             ]),
             OrderedMap([
                 ('publish', [
                     {'good_data': '{{ ctx().good }}'},
                     {'bad_data': '{{ ctx().bad }}'},
                 ]),
                 ('do', [
                     'do_thing_always',
                 ]),
             ]),
             OrderedMap([
                 ('when', '{{ ctx().d }}'),
                 ('publish', [
                     {'good_data': '{{ ctx().good }}'},
                     {'bad_data': '{{ ctx().bad }}'},
                 ]),
                 ('do', [
                     'do_thing_sometimes',
                 ]),
             ]),
         ]),
     ]))