示例#1
0
    def test_trigger_instance_payload_with_special_values(self):
        # Test a rule where TriggerInstance payload contains a dot (".") and $
        self._setup_sample_trigger("st2.test.trigger1")
        self._setup_sample_trigger("st2.test.trigger2")
        rule_db_1 = self._setup_sample_rule(RULE_1)
        rule_db_2 = self._setup_sample_rule(RULE_2)
        rule_db_3 = self._setup_sample_rule(RULE_3)
        rules = [rule_db_1, rule_db_2, rule_db_3]
        trigger_instance = container_utils.create_trigger_instance(
            "dummy_pack_1.st2.test.trigger2",
            {
                "k1": "t1_p_v",
                "k2.k2": "v2",
                "k3.more.nested.deep": "some.value",
                "k4.even.more.nested$": "foo",
                "yep$aaa": "b",
            },
            date_utils.get_datetime_utc_now(),
        )

        trigger = get_trigger_db_by_ref(trigger_instance.trigger)
        rules_matcher = RulesMatcher(trigger_instance, trigger, rules)
        matching_rules = rules_matcher.get_matching_rules()
        self.assertIsNotNone(matching_rules)
        self.assertEqual(len(matching_rules), 1)
示例#2
0
    def evaluate(self):
        """
        Evaluate trigger instance against the rule.

        :return: ``True`` if the rule matches, ``False`` otherwise.
        :rtype: ``boolean``
        """

        rule_db = self._get_rule_db()
        trigger_instance_db, trigger_db = self._get_trigger_instance_db()

        # The trigger check needs to be performed here as that is not performed
        # by RulesMatcher.
        if rule_db.trigger != trigger_db.ref:
            LOG.info('rule.trigger "%s" and trigger.ref "%s" do not match.',
                     rule_db.trigger, trigger_db.ref)
            return False

        matcher = RulesMatcher(trigger_instance=trigger_instance_db,
                               trigger=trigger_db,
                               rules=[rule_db],
                               extra_info=True)
        matching_rules = matcher.get_matching_rules()

        return len(matching_rules) >= 1
示例#3
0
    def test_rule_enforcement_is_created_on_exception_3(self):
        # 1. Exception in payload_lookup.get_value
        rule_enforcement_dbs = list(RuleEnforcement.get_all())
        self.assertEqual(rule_enforcement_dbs, [])

        self._setup_sample_trigger('st2.test.trigger4')
        rule_4_db = self._setup_sample_rule(RULE_4)
        rules = [rule_4_db]
        trigger_instance = container_utils.create_trigger_instance(
            'dummy_pack_1.st2.test.trigger4',
            {'k1': 't2_p_v', 'k2': 'v2'},
            date_utils.get_datetime_utc_now()
        )
        trigger = get_trigger_db_by_ref(trigger_instance.trigger)

        rules_matcher = RulesMatcher(trigger_instance, trigger, rules)
        matching_rules = rules_matcher.get_matching_rules()
        self.assertEqual(matching_rules, [])
        self.assertEqual(len(matching_rules), 0)

        rule_enforcement_dbs = list(RuleEnforcement.get_all())
        self.assertEqual(len(rule_enforcement_dbs), 1)

        expected_failure = ('Failed to match rule "yoyohoneysingh.st2.test.rule4" against trigger '
                            'instance "%s": There might be a problem with the criteria in rule '
                            'yoyohoneysingh.st2.test.rule4: exception in equals' %
                            (str(trigger_instance.id)))
        self.assertEqual(rule_enforcement_dbs[0].failure_reason, expected_failure)
        self.assertEqual(rule_enforcement_dbs[0].trigger_instance_id, str(trigger_instance.id))
        self.assertEqual(rule_enforcement_dbs[0].rule['id'], str(rule_4_db.id))
        self.assertEqual(rule_enforcement_dbs[0].status, RULE_ENFORCEMENT_STATUS_FAILED)
    def get_matching_rules_for_trigger(self, trigger_instance):
        trigger = trigger_instance.trigger

        trigger_db = get_trigger_db_by_ref(trigger_instance.trigger)

        if not trigger_db:
            LOG.error(
                'No matching trigger found in db for trigger instance %s.',
                trigger_instance)
            return None

        rules = get_rules_given_trigger(trigger=trigger)

        LOG.info('Found %d rules defined for trigger %s', len(rules),
                 trigger_db.get_reference().ref)

        if len(rules) < 1:
            return rules

        matcher = RulesMatcher(trigger_instance=trigger_instance,
                               trigger=trigger_db,
                               rules=rules)

        matching_rules = matcher.get_matching_rules()
        LOG.info('Matched %s rule(s) for trigger_instance %s (trigger=%s)',
                 len(matching_rules), trigger_instance['id'], trigger_db.ref)
        return matching_rules
示例#5
0
    def test_rule_enforcement_is_created_on_exception_2(self):
        # 1. Exception in payload_lookup.get_value
        rule_enforcement_dbs = list(RuleEnforcement.get_all())
        self.assertEqual(rule_enforcement_dbs, [])

        self._setup_sample_trigger('st2.test.trigger4')
        rule_4_db = self._setup_sample_rule(RULE_4)
        rules = [rule_4_db]
        trigger_instance = container_utils.create_trigger_instance(
            'dummy_pack_1.st2.test.trigger4', {
                'k1': 't2_p_v',
                'k2': 'v2'
            }, date_utils.get_datetime_utc_now())
        trigger = get_trigger_db_by_ref(trigger_instance.trigger)

        rules_matcher = RulesMatcher(trigger_instance, trigger, rules)
        matching_rules = rules_matcher.get_matching_rules()
        self.assertEqual(matching_rules, [])
        self.assertEqual(len(matching_rules), 0)

        rule_enforcement_dbs = list(RuleEnforcement.get_all())
        self.assertEqual(len(rule_enforcement_dbs), 1)

        expected_failure = (
            'Failed to match rule "yoyohoneysingh.st2.test.rule4" against trigger '
            'instance "%s": Failed transforming criteria key trigger.k1: '
            'exception in get_value' % (str(trigger_instance.id)))
        self.assertEqual(rule_enforcement_dbs[0].failure_reason,
                         expected_failure)
        self.assertEqual(rule_enforcement_dbs[0].trigger_instance_id,
                         str(trigger_instance.id))
        self.assertEqual(rule_enforcement_dbs[0].rule['id'], str(rule_4_db.id))
        self.assertEqual(rule_enforcement_dbs[0].status,
                         RULE_ENFORCEMENT_STATUS_FAILED)
示例#6
0
文件: tester.py 项目: nzlosh/st2
    def evaluate(self):
        """
        Evaluate trigger instance against the rule.

        :return: ``True`` if the rule matches, ``False`` otherwise.
        :rtype: ``boolean``
        """

        rule_db = self._get_rule_db()
        trigger_instance_db, trigger_db = self._get_trigger_instance_db()

        # The trigger check needs to be performed here as that is not performed
        # by RulesMatcher.
        if rule_db.trigger != trigger_db.ref:
            LOG.info('rule.trigger "%s" and trigger.ref "%s" do not match.',
                     rule_db.trigger, trigger_db.ref)
            return False

        # Check if rule matches criteria.
        matcher = RulesMatcher(trigger_instance=trigger_instance_db, trigger=trigger_db,
                               rules=[rule_db], extra_info=True)
        matching_rules = matcher.get_matching_rules()

        # Rule does not match so early exit.
        if len(matching_rules) < 1:
            return False

        # Check if rule can be enforced
        enforcer = RuleEnforcer(trigger_instance=trigger_instance_db, rule=rule_db)

        runner_type_db = mock.Mock()
        runner_type_db.runner_parameters = {}
        action_db = mock.Mock()
        action_db.parameters = {}
        params = rule_db.action.parameters  # pylint: disable=no-member

        context, additional_contexts = enforcer.get_action_execution_context(action_db=action_db,
                                                                             trace_context=None)

        # Note: We only return partially resolved parameters.
        # To be able to return all parameters we would need access to corresponding ActionDB,
        # RunnerTypeDB and ConfigDB object, but this would add a dependency on the database and the
        # tool is meant to be used standalone.
        try:
            params = enforcer.get_resolved_parameters(action_db=action_db,
                                                      runnertype_db=runner_type_db,
                                                      params=params,
                                                      context=context,
                                                      additional_contexts=additional_contexts)

            LOG.info('Action parameters resolved to:')
            for param in six.iteritems(params):
                LOG.info('\t%s: %s', param[0], param[1])
            return True
        except (UndefinedError, ValueError) as e:
            LOG.error('Failed to resolve parameters\n\tOriginal error : %s', six.text_type(e))
            return False
        except:
            LOG.exception('Failed to resolve parameters.')
            return False
示例#7
0
    def test_rule_enforcement_is_created_on_exception_3(self):
        # 1. Exception in payload_lookup.get_value
        rule_enforcement_dbs = list(RuleEnforcement.get_all())
        self.assertEqual(rule_enforcement_dbs, [])

        self._setup_sample_trigger("st2.test.trigger4")
        rule_4_db = self._setup_sample_rule(RULE_4)
        rules = [rule_4_db]
        trigger_instance = container_utils.create_trigger_instance(
            "dummy_pack_1.st2.test.trigger4",
            {"k1": "t2_p_v", "k2": "v2"},
            date_utils.get_datetime_utc_now(),
        )
        trigger = get_trigger_db_by_ref(trigger_instance.trigger)

        rules_matcher = RulesMatcher(trigger_instance, trigger, rules)
        matching_rules = rules_matcher.get_matching_rules()
        self.assertEqual(matching_rules, [])
        self.assertEqual(len(matching_rules), 0)

        rule_enforcement_dbs = list(RuleEnforcement.get_all())
        self.assertEqual(len(rule_enforcement_dbs), 1)

        expected_failure = (
            'Failed to match rule "yoyohoneysingh.st2.test.rule4" against trigger '
            'instance "%s": There might be a problem with the criteria in rule '
            "yoyohoneysingh.st2.test.rule4: exception in equals"
            % (str(trigger_instance.id))
        )
        self.assertEqual(rule_enforcement_dbs[0].failure_reason, expected_failure)
        self.assertEqual(
            rule_enforcement_dbs[0].trigger_instance_id, str(trigger_instance.id)
        )
        self.assertEqual(rule_enforcement_dbs[0].rule["id"], str(rule_4_db.id))
        self.assertEqual(rule_enforcement_dbs[0].status, RULE_ENFORCEMENT_STATUS_FAILED)
示例#8
0
 def test_backstop_ignore(self):
     trigger_instance = container_utils.create_trigger_instance(
         self.models['triggers']['trigger1.yaml'].ref, {'k1': 'v1'},
         date_utils.get_datetime_utc_now())
     trigger = self.models['triggers']['trigger1.yaml']
     rules = [rule for rule in six.itervalues(self.models['rules'])]
     rules_matcher = RulesMatcher(trigger_instance, trigger, rules)
     matching_rules = rules_matcher.get_matching_rules()
     self.assertEqual(len(matching_rules), 1)
     self.assertEqual(matching_rules[0].id,
                      self.models['rules']['success.yaml'].id)
示例#9
0
    def get_matching_rules_for_trigger(self, trigger_instance):
        trigger = get_trigger_db(trigger=trigger_instance.trigger)
        rules = Rule.query(trigger=trigger_instance.trigger, enabled=True)
        LOG.info('Found %d rules defined for trigger %s', len(rules), trigger['name'])
        matcher = RulesMatcher(trigger_instance=trigger_instance,
                               trigger=trigger, rules=rules)

        matching_rules = matcher.get_matching_rules()
        LOG.info('Matched %s rule(s) for trigger_instance %s.', len(matching_rules),
                 trigger['name'])
        return matching_rules
示例#10
0
 def test_backstop_ignore(self):
     trigger_instance = container_utils.create_trigger_instance(
         self.models['triggers']['trigger1.yaml'].ref,
         {'k1': 'v1'},
         date_utils.get_datetime_utc_now()
     )
     trigger = self.models['triggers']['trigger1.yaml']
     rules = [rule for rule in six.itervalues(self.models['rules'])]
     rules_matcher = RulesMatcher(trigger_instance, trigger, rules)
     matching_rules = rules_matcher.get_matching_rules()
     self.assertEqual(len(matching_rules), 1)
     self.assertEqual(matching_rules[0].id, self.models['rules']['success.yaml'].id)
示例#11
0
文件: engine.py 项目: timff/st2
    def get_matching_rules_for_trigger(self, trigger_instance):
        trigger = trigger_instance.trigger
        trigger = get_trigger_db_by_ref(trigger_instance.trigger)
        rules = Rule.query(trigger=trigger_instance.trigger, enabled=True)
        LOG.info('Found %d rules defined for trigger %s', len(rules), trigger['name'])
        matcher = RulesMatcher(trigger_instance=trigger_instance,
                               trigger=trigger, rules=rules)

        matching_rules = matcher.get_matching_rules()
        LOG.info('Matched %s rule(s) for trigger_instance %s.', len(matching_rules),
                 trigger['name'])
        return matching_rules
示例#12
0
 def test_backstop_ignore(self):
     trigger_instance = container_utils.create_trigger_instance(
         self.models["triggers"]["trigger1.yaml"].ref,
         {"k1": "v1"},
         date_utils.get_datetime_utc_now(),
     )
     trigger = self.models["triggers"]["trigger1.yaml"]
     rules = [rule for rule in six.itervalues(self.models["rules"])]
     rules_matcher = RulesMatcher(trigger_instance, trigger, rules)
     matching_rules = rules_matcher.get_matching_rules()
     self.assertEqual(len(matching_rules), 1)
     self.assertEqual(matching_rules[0].id, self.models["rules"]["success.yaml"].id)
示例#13
0
 def test_get_matching_rules(self):
     self._setup_sample_trigger('st2.test.trigger1')
     trigger_instance = container_utils.create_trigger_instance(
         'dummy_pack_1.st2.test.trigger1',
         {'k1': 't1_p_v', 'k2': 'v2'},
         datetime.datetime.utcnow()
     )
     trigger = get_trigger_db_by_ref(trigger_instance.trigger)
     rules = self._get_sample_rules()
     rules_matcher = RulesMatcher(trigger_instance, trigger, rules)
     matching_rules = rules_matcher.get_matching_rules()
     self.assertTrue(matching_rules is not None)
     self.assertEqual(len(matching_rules), 1)
示例#14
0
 def test_get_matching_rules(self):
     self._setup_sample_trigger('st2.test.trigger1')
     trigger_instance = container_utils.create_trigger_instance(
         'dummy_pack_1.st2.test.trigger1', {
             'k1': 't1_p_v',
             'k2': 'v2'
         }, date_utils.get_datetime_utc_now())
     trigger = get_trigger_db_by_ref(trigger_instance.trigger)
     rules = self._get_sample_rules()
     rules_matcher = RulesMatcher(trigger_instance, trigger, rules)
     matching_rules = rules_matcher.get_matching_rules()
     self.assertTrue(matching_rules is not None)
     self.assertEqual(len(matching_rules), 1)
示例#15
0
 def test_trigger_instance_payload_with_special_values(self):
     # Test a rule where TriggerInstance payload contains a dot (".") and $
     self._setup_sample_trigger('st2.test.trigger2')
     trigger_instance = container_utils.create_trigger_instance(
         'dummy_pack_1.st2.test.trigger2',
         {'k1': 't1_p_v', 'k2.k2': 'v2', 'k3.more.nested.deep': 'some.value',
          'k4.even.more.nested$': 'foo', 'yep$aaa': 'b'},
         date_utils.get_datetime_utc_now()
     )
     trigger = get_trigger_db_by_ref(trigger_instance.trigger)
     rules = self._get_sample_rules()
     rules_matcher = RulesMatcher(trigger_instance, trigger, rules)
     matching_rules = rules_matcher.get_matching_rules()
     self.assertTrue(matching_rules is not None)
     self.assertEqual(len(matching_rules), 1)
示例#16
0
 def test_trigger_instance_payload_with_special_values(self):
     # Test a rule where TriggerInstance payload contains a dot (".") and $
     self._setup_sample_trigger('st2.test.trigger2')
     trigger_instance = container_utils.create_trigger_instance(
         'dummy_pack_1.st2.test.trigger2',
         {'k1': 't1_p_v', 'k2.k2': 'v2', 'k3.more.nested.deep': 'some.value',
          'k4.even.more.nested$': 'foo', 'yep$aaa': 'b'},
         date_utils.get_datetime_utc_now()
     )
     trigger = get_trigger_db_by_ref(trigger_instance.trigger)
     rules = self._get_sample_rules()
     rules_matcher = RulesMatcher(trigger_instance, trigger, rules)
     matching_rules = rules_matcher.get_matching_rules()
     self.assertTrue(matching_rules is not None)
     self.assertEqual(len(matching_rules), 1)
示例#17
0
    def test_get_matching_rules(self):
        self._setup_sample_trigger("st2.test.trigger1")
        rule_db_1 = self._setup_sample_rule(RULE_1)
        rule_db_2 = self._setup_sample_rule(RULE_2)
        rule_db_3 = self._setup_sample_rule(RULE_3)
        rules = [rule_db_1, rule_db_2, rule_db_3]
        trigger_instance = container_utils.create_trigger_instance(
            "dummy_pack_1.st2.test.trigger1",
            {"k1": "t1_p_v", "k2": "v2"},
            date_utils.get_datetime_utc_now(),
        )

        trigger = get_trigger_db_by_ref(trigger_instance.trigger)
        rules_matcher = RulesMatcher(trigger_instance, trigger, rules)
        matching_rules = rules_matcher.get_matching_rules()
        self.assertIsNotNone(matching_rules)
        self.assertEqual(len(matching_rules), 1)
示例#18
0
    def evaluate(self):
        """
        Evaluate trigger instance against the rule.

        :return: ``True`` if the rule matches, ``False`` otherwise.
        :rtype: ``boolean``
        """

        rule_db = self._get_rule_db()
        trigger_instance_db, trigger_db = self._get_trigger_instance_db()

        # The trigger check needs to be performed here as that is not performed
        # by RulesMatcher.
        if rule_db.trigger != trigger_db.ref:
            LOG.info('rule.trigger "%s" and trigger.ref "%s" do not match.',
                     rule_db.trigger, trigger_db.ref)
            return False

        # Check if rule matches criteria.
        matcher = RulesMatcher(trigger_instance=trigger_instance_db,
                               trigger=trigger_db,
                               rules=[rule_db],
                               extra_info=True)
        matching_rules = matcher.get_matching_rules()

        # Rule does not match so early exit.
        if len(matching_rules) < 1:
            return False

        # Check if rule can be enforced
        try:
            enforcer = RuleEnforcer(trigger_instance=trigger_instance_db,
                                    rule=rule_db)
            params = enforcer.get_resolved_parameters()
            LOG.info('Action parameters resolved to:')
            for param in six.iteritems(params):
                LOG.info('\t%s: %s', param[0], param[1])
            return True
        except (UndefinedError, ValueError) as e:
            LOG.error('Failed to resolve parameters\n\tOriginal error : %s',
                      str(e))
            return False
        except:
            LOG.exception('Failed to resolve parameters.')
            return False
示例#19
0
文件: tester.py 项目: ruslantum/st2
    def evaluate(self):
        """
        Evaluate trigger instance against the rule.

        :return: ``True`` if the rule matches, ``False`` otherwise.
        :rtype: ``boolean``
        """
        rule_db = self._get_rule_db_from_file(file_path=self._rule_file_path)
        trigger_instance_db = \
            self._get_trigger_instance_db_from_file(file_path=self._trigger_instance_file_path)

        trigger_ref = ResourceReference.from_string_reference(trigger_instance_db['trigger'])

        trigger_db = TriggerDB(pack=trigger_ref.pack, name=trigger_ref.name, type=trigger_ref.ref)

        matcher = RulesMatcher(trigger_instance=trigger_instance_db, trigger=trigger_db,
                               rules=[rule_db])
        matching_rules = matcher.get_matching_rules()
        return len(matching_rules) >= 1
示例#20
0
文件: tester.py 项目: rlugojr/st2
    def evaluate(self):
        """
        Evaluate trigger instance against the rule.

        :return: ``True`` if the rule matches, ``False`` otherwise.
        :rtype: ``boolean``
        """

        rule_db = self._get_rule_db()
        trigger_instance_db, trigger_db = self._get_trigger_instance_db()

        # The trigger check needs to be performed here as that is not performed
        # by RulesMatcher.
        if rule_db.trigger != trigger_db.ref:
            LOG.info('rule.trigger "%s" and trigger.ref "%s" do not match.', rule_db.trigger, trigger_db.ref)
            return False

        # Check if rule matches criteria.
        matcher = RulesMatcher(
            trigger_instance=trigger_instance_db, trigger=trigger_db, rules=[rule_db], extra_info=True
        )
        matching_rules = matcher.get_matching_rules()

        # Rule does not match so early exit.
        if len(matching_rules) < 1:
            return False

        # Check if rule can be enforced
        try:
            enforcer = RuleEnforcer(trigger_instance=trigger_instance_db, rule=rule_db)
            params = enforcer.get_resolved_parameters()
            LOG.info("Action parameters resolved to:")
            for param in six.iteritems(params):
                LOG.info("\t%s: %s", param[0], param[1])
            return True
        except (UndefinedError, ValueError) as e:
            LOG.error("Failed to resolve parameters\n\tOriginal error : %s", str(e))
            return False
        except:
            LOG.exception("Failed to resolve parameters.")
            return False
示例#21
0
文件: tester.py 项目: automotola/st2
    def evaluate(self):
        """
        Evaluate trigger instance against the rule.

        :return: ``True`` if the rule matches, ``False`` otherwise.
        :rtype: ``boolean``
        """

        rule_db = self._get_rule_db()
        trigger_instance_db, trigger_db = self._get_trigger_instance_db()

        # The trigger check needs to be performed here as that is not performed
        # by RulesMatcher.
        if rule_db.trigger != trigger_db.ref:
            LOG.info('rule.trigger "%s" and trigger.ref "%s" do not match.',
                     rule_db.trigger, trigger_db.ref)
            return False

        matcher = RulesMatcher(trigger_instance=trigger_instance_db, trigger=trigger_db,
                               rules=[rule_db], extra_info=True)
        matching_rules = matcher.get_matching_rules()

        return len(matching_rules) >= 1
示例#22
0
    def evaluate(self):
        """
        Evaluate trigger instance against the rule.

        :return: ``True`` if the rule matches, ``False`` otherwise.
        :rtype: ``boolean``
        """
        rule_db = self._get_rule_db_from_file(file_path=self._rule_file_path)
        trigger_instance_db = \
            self._get_trigger_instance_db_from_file(file_path=self._trigger_instance_file_path)

        trigger_ref = ResourceReference.from_string_reference(
            trigger_instance_db['trigger'])

        trigger_db = TriggerDB(pack=trigger_ref.pack,
                               name=trigger_ref.name,
                               type=trigger_ref.ref)

        matcher = RulesMatcher(trigger_instance=trigger_instance_db,
                               trigger=trigger_db,
                               rules=[rule_db])
        matching_rules = matcher.get_matching_rules()
        return len(matching_rules) >= 1
示例#23
0
文件: engine.py 项目: nzlosh/st2
    def get_matching_rules_for_trigger(self, trigger_instance):
        trigger = trigger_instance.trigger

        trigger_db = get_trigger_db_by_ref(trigger_instance.trigger)

        if not trigger_db:
            LOG.error('No matching trigger found in db for trigger instance %s.', trigger_instance)
            return None

        rules = get_rules_given_trigger(trigger=trigger)

        LOG.info('Found %d rules defined for trigger %s', len(rules),
                 trigger_db.get_reference().ref)

        if len(rules) < 1:
            return rules

        matcher = RulesMatcher(trigger_instance=trigger_instance,
                               trigger=trigger_db, rules=rules)

        matching_rules = matcher.get_matching_rules()
        LOG.info('Matched %s rule(s) for trigger_instance %s (trigger=%s)', len(matching_rules),
                 trigger_instance['id'], trigger_db.ref)
        return matching_rules
示例#24
0
文件: tester.py 项目: zwunix/st2
    def evaluate(self):
        """
        Evaluate trigger instance against the rule.

        :return: ``True`` if the rule matches, ``False`` otherwise.
        :rtype: ``boolean``
        """

        rule_db = self._get_rule_db()
        trigger_instance_db, trigger_db = self._get_trigger_instance_db()

        # The trigger check needs to be performed here as that is not performed
        # by RulesMatcher.
        if rule_db.trigger != trigger_db.ref:
            LOG.info('rule.trigger "%s" and trigger.ref "%s" do not match.',
                     rule_db.trigger, trigger_db.ref)
            return False

        # Check if rule matches criteria.
        matcher = RulesMatcher(trigger_instance=trigger_instance_db,
                               trigger=trigger_db,
                               rules=[rule_db],
                               extra_info=True)
        matching_rules = matcher.get_matching_rules()

        # Rule does not match so early exit.
        if len(matching_rules) < 1:
            return False

        # Check if rule can be enforced
        enforcer = RuleEnforcer(trigger_instance=trigger_instance_db,
                                rule=rule_db)

        runner_type_db = mock.Mock()
        runner_type_db.runner_parameters = {}
        action_db = mock.Mock()
        action_db.parameters = {}
        params = rule_db.action.parameters  # pylint: disable=no-member

        context, additional_contexts = enforcer.get_action_execution_context(
            action_db=action_db, trace_context=None)

        # Note: We only return partially resolved parameters.
        # To be able to return all parameters we would need access to corresponding ActionDB,
        # RunnerTypeDB and ConfigDB object, but this would add a dependency on the database and the
        # tool is meant to be used standalone.
        try:
            params = enforcer.get_resolved_parameters(
                action_db=action_db,
                runnertype_db=runner_type_db,
                params=params,
                context=context,
                additional_contexts=additional_contexts)

            LOG.info('Action parameters resolved to:')
            for param in six.iteritems(params):
                LOG.info('\t%s: %s', param[0], param[1])
            return True
        except (UndefinedError, ValueError) as e:
            LOG.error('Failed to resolve parameters\n\tOriginal error : %s',
                      six.text_type(e))
            return False
        except:
            LOG.exception('Failed to resolve parameters.')
            return False