Esempio n. 1
0
def add_pod(uuid, data):
    if not data.get("keystone_project_id"):
        return
    logger.info("Add a new pod {}".format(data))
    if "pdp_id" not in data:
        data["pdp_id"] = uuid
    data['policies'] = PolicyManager.get_policies(user_id="admin")
    data['models'] = ModelManager.get_models(user_id="admin")
    conf = configuration.get_configuration("components/orchestrator")
    hostname = conf["components/orchestrator"].get("hostname", "orchestrator")
    port = conf["components/orchestrator"].get("port", 80)
    proto = conf["components/orchestrator"].get("protocol", "http")
    while True:
        try:
            req = requests.post(
                "{}://{}:{}/pods".format(proto, hostname, port),
                json=data,
                headers={"content-type": "application/json"})
        except requests.exceptions.ConnectionError as e:
            logger.warning("add_pod: Orchestrator is not ready, standby...")
            logger.exception(e)
            time.sleep(1)
        else:
            break
    logger.info("Pod add request answer : {}".format(req.text))
Esempio n. 2
0
    def _import_models_with_new_meta_rules(self, json_models):
        if not isinstance(json_models, list):
            raise InvalidJson("models shall be a list!")

        for json_model in json_models:
            logger.debug("json_model {}".format(json_model))
            models = ModelManager.get_models(self._user_id)
            model_in_db = None
            model_id = None
            for model_key in models:
                if ("id" in json_model and model_key == json_model["id"]) or (
                        "name" in json_model
                        and models[model_key]["name"] == json_model["name"]):
                    model_in_db = models[model_key]
                    model_id = model_key

            # this should not occur as the model has been put in db previously in _import_models_without_new_meta_rules
            if model_in_db is None:
                raise UnknownModel("Unknown model ")

            json_key = dict()
            JsonUtils.convert_names_to_ids(json_model, json_key, "meta_rules",
                                           "meta_rule_id", "meta_rule",
                                           ModelManager, self._user_id)
            for meta_rule_id in json_key["meta_rule_id"]:
                if meta_rule_id not in model_in_db["meta_rules"]:
                    model_in_db["meta_rules"].append(meta_rule_id)

            ModelManager.update_model(self._user_id, model_id, model_in_db)
Esempio n. 3
0
 def _export_models(self, json_content):
     models = ModelManager.get_models(self._user_id)
     models_array = []
     for model_key in models:
         model = dict()
         JsonUtils.copy_field_if_exists(models[model_key], model, "name",
                                        str)
         JsonUtils.copy_field_if_exists(models[model_key], model,
                                        "description", str)
         # logger.info(models[model_key]["meta_rules"])
         JsonUtils.convert_ids_to_names(models[model_key]["meta_rules"],
                                        model, "meta_rules", "meta_rule",
                                        ModelManager, self._user_id)
         logger.info("Exporting model {}".format(model))
         models_array.append(model)
     if len(models_array) > 0:
         json_content["models"] = models_array
Esempio n. 4
0
    def get(self, uuid=None, user_id=None):
        """Retrieve all models

        :param uuid: uuid of the model
        :param user_id: user ID who do the request
        :return: {
            "model_id1": {
                "name": "...",
                "description": "... (optional)",
                "meta_rules": ["meta_rule_id1", ]
            }
        }
        :internal_api: get_models
        """
        data = ModelManager.get_models(user_id=user_id, model_id=uuid)

        return {"models": data}
Esempio n. 5
0
    def get(self, uuid=None, user_id=None):
        """Retrieve all models

        :param uuid: uuid of the model
        :param user_id: user ID who do the request
        :return: {
            "model_id1": {
                "name": "...",
                "description": "...",
                "meta_rules": ["meta_rule_id1", ]
            }
        }
        :internal_api: get_models
        """
        try:
            data = ModelManager.get_models(user_id=user_id, model_id=uuid)
        except Exception as e:
            logger.error(e, exc_info=True)
            return {"result": False, "error": str(e)}, 500
        return {"models": data}
Esempio n. 6
0
    def _import_models_without_new_meta_rules(self, json_models):
        if not isinstance(json_models, list):
            raise InvalidJson("models shall be a list!")

        for json_model in json_models:
            json_without_new_metarules = dict()
            JsonUtils.copy_field_if_exists(json_model,
                                           json_without_new_metarules, "name",
                                           str)

            # TODO put this in moondb
            # model_in_db = ModelManager.get_models_by_name(json_without_new_metarules["name"])
            models = ModelManager.get_models(self._user_id)
            model_in_db = None
            for model_key in models:
                if models[model_key]["name"] == json_without_new_metarules[
                        "name"]:
                    model_in_db = models[model_key]
                    model_id = model_key
            # end TODO

            JsonUtils.copy_field_if_exists(json_model,
                                           json_without_new_metarules,
                                           "description", str)
            if model_in_db is None:
                model_does_exist = False
            else:
                json_without_new_metarules["meta_rules"] = model_in_db[
                    "meta_rules"]
                model_does_exist = True
            model_override = JsonUtils.get_override(json_model)
            if not model_does_exist:
                logger.debug(
                    "Creating model {} ".format(json_without_new_metarules))
                ModelManager.add_model(self._user_id, None,
                                       json_without_new_metarules)
            elif model_override is True:
                logger.debug("Updating model with id {} : {} ".format(
                    model_id, json_without_new_metarules))
                ModelManager.update_model(self._user_id, model_id,
                                          json_without_new_metarules)
Esempio n. 7
0
def get_models(model_id=None):
    from python_moondb.core import ModelManager
    return ModelManager.get_models(user_id=None, model_id=model_id)