Example #1
0
 def test_environment_owner(self):
     model = self._load_file("model.yaml")
     congress_rules = congress.CongressRulesManager()
     rules = congress_rules.convert(model, tenant_id='tenant1')
     rules_str = ", \n".join(map(str, rules))
     self.assertTrue('murano:objects+("c86104748a0c4907b4c5981e6d3bce9f", '
                     '"tenant1", "io.murano.Environment")' in rules_str)
Example #2
0
    def test_to_dictionary(self):
        """If model contains object entry (not dict)
        we try to convert to dict using 'to_dictionary' method.
        """

        class Struct(object):
            def __init__(self, d):
                self.__dict__ = d

            def to_dictionary(self):
                return self.__dict__

            def __getitem__(self, item):
                return self.__dict__[item]

        d = {'?': {'id': '1', 'type': 't1'},
             'apps': [Struct({'?': {'id': '2', 'type': 't2'},
                              'instances': [Struct(
                                  {'?': {'id': '3', 'type': 't3'}})]})]
             }

        model = Struct(d)

        congress_rules = congress.CongressRulesManager()
        tenant_id = uuidutils.generate_uuid()
        rules = congress_rules.convert(model, tenant_id=tenant_id)
        rules_str = ", \n".join(map(str, rules))
        print rules_str

        self.assertTrue('murano:objects+("1", "{0}", "t1")'.format(tenant_id)
                        in rules_str)
        self.assertTrue('murano:objects+("2", "1", "t2")' in rules_str)
        self.assertTrue('murano:objects+("3", "2", "t3")' in rules_str)
Example #3
0
    def _create_rules_str(self, model_file, package_loader=None):
        model = self._load_file(model_file)

        congress_rules = congress.CongressRulesManager()
        rules = congress_rules.convert(model, package_loader,
                                       tenant_id=TENANT_ID)
        rules_str = ", \n".join(map(str, rules))

        return rules_str
Example #4
0
    def validate(self, model, class_loader=None):
        """Validate model using Congress rule engine.

        @type model: dict
        @param model: Dictionary representation of model starting on
                      environment level (['Objects'])
        @type class_loader: murano.dsl.class_loader.MuranoClassLoader
        @param class_loader: Optional. Used for evaluating parent class types
        @raises ValidationError in case validation was not successful
        """

        if model is None:
            return

        client = self._client_manager.get_congress_client(self._environment)
        if not client:
            raise ValueError(_('Congress client is not configured!'))

        LOG.info(_LI('Validating model'))
        LOG.debug(model)

        rules = congress_rules.CongressRulesManager().convert(
            model, class_loader, self._environment.tenant_id)

        rules_str = map(str, rules)
        env_id = model['?']['id']
        # cleanup of data populated by murano driver
        rules_str.insert(0, 'deleteEnv("{0}")'.format(env_id))

        rules_line = " ".join(rules_str)
        LOG.debug('Congress rules: \n  ' + '\n  '.join(rules_str))

        validation_result = client.execute_policy_action(
            "murano_system", "simulate", False, False, {
                'query': 'predeploy_errors(eid, oid, msg)',
                'action_policy': 'murano_action',
                'sequence': rules_line
            })

        if validation_result["result"]:

            messages = self._parse_messages(env_id,
                                            validation_result["result"])

            if messages:
                result_str = "\n  ".join(map(str, messages))
                msg = _("Murano object model validation failed: {0}").format(
                    "\n  " + result_str)
                LOG.error(msg)
                raise ValidationError(msg)
        else:
            LOG.info(_LI('Model valid'))
Example #5
0
    def _execute_simulation(self, package_loader, env_id, model, query):
        rules = congress_rules.CongressRulesManager().convert(
            model, package_loader, self._execution_session.project_id)
        rules_str = list(map(str, rules))
        # cleanup of data populated by murano driver
        rules_str.insert(0, 'deleteEnv("{0}")'.format(env_id))
        rules_line = " ".join(rules_str)
        LOG.debug('Congress rules: \n  {rules} '.format(
            rules='\n  '.join(rules_str)))

        validation_result = self.client.execute_policy_action(
            "murano_system", "simulate", False, False, {
                'query': query,
                'action_policy': 'murano_action',
                'sequence': rules_line
            })
        return validation_result
Example #6
0
 def test_empty_model(self):
     congress_rules = congress.CongressRulesManager()
     rules = congress_rules.convert(None)
     self.assertEqual(0, len(rules))
Example #7
0
 def test_empty_model(self):
     congress_rules = congress.CongressRulesManager()
     rules = congress_rules.convert(None)
     self.assertTrue(len(rules) == 0)