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)
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)
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
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'))
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
def test_empty_model(self): congress_rules = congress.CongressRulesManager() rules = congress_rules.convert(None) self.assertEqual(0, len(rules))
def test_empty_model(self): congress_rules = congress.CongressRulesManager() rules = congress_rules.convert(None) self.assertTrue(len(rules) == 0)