aboutsummaryrefslogtreecommitdiffstats
path: root/moon_manager/moon_manager/api/pdp.py
diff options
context:
space:
mode:
Diffstat (limited to 'moon_manager/moon_manager/api/pdp.py')
-rw-r--r--moon_manager/moon_manager/api/pdp.py69
1 files changed, 53 insertions, 16 deletions
diff --git a/moon_manager/moon_manager/api/pdp.py b/moon_manager/moon_manager/api/pdp.py
index 9183c25d..4f11135e 100644
--- a/moon_manager/moon_manager/api/pdp.py
+++ b/moon_manager/moon_manager/api/pdp.py
@@ -16,21 +16,43 @@ from python_moonutilities.security_functions import check_auth
from python_moondb.core import PDPManager
from python_moondb.core import PolicyManager
from python_moondb.core import ModelManager
-from python_moonutilities import configuration
+from python_moonutilities import configuration, exceptions
-__version__ = "0.1.0"
+__version__ = "4.3.2"
-LOG = logging.getLogger("moon.manager.api." + __name__)
+logger = logging.getLogger("moon.manager.api." + __name__)
def delete_pod(uuid):
- raise NotImplementedError
+ 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:
+ url = "{}://{}:{}/pods".format(proto, hostname, port)
+ req = requests.get(url)
+ # except requests.exceptions.ConnectionError:
+ # logger.warning("Orchestrator is not ready, standby... {}".format(url))
+ # time.sleep(1)
+ # else:
+ # break
+ for pod_key, pod_list in req.json().get("pods", {}).items():
+ for pod_value in pod_list:
+ if "pdp_id" in pod_value:
+ if pod_value["pdp_id"] == uuid:
+ req = requests.delete("{}://{}:{}/pods/{}".format(proto, hostname, port, pod_key))
+ if req.status_code != 200:
+ logger.warning("Cannot delete pod {} - {}".format(pod_key, pod_value['name']))
+ logger.debug(req.content)
+ # Note (Asteroide): no need to go further if one match
+ break
def add_pod(uuid, data):
if not data.get("keystone_project_id"):
return
- LOG.info("Add a new pod {}".format(data))
+ 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")
@@ -45,12 +67,21 @@ def add_pod(uuid, data):
"{}://{}:{}/pods".format(proto, hostname, port),
json=data,
headers={"content-type": "application/json"})
- except requests.exceptions.ConnectionError:
- LOG.warning("Orchestrator is not ready, standby...")
+ except requests.exceptions.ConnectionError as e:
+ logger.warning("add_pod: Orchestrator is not ready, standby...")
+ logger.exception(e)
time.sleep(1)
else:
break
- LOG.info(req.text)
+ logger.info(req.text)
+
+
+def check_keystone_pid(k_pid):
+ data = PDPManager.get_pdp(user_id="admin")
+ for pdp_key, pdp_value in data.items():
+ logger.info("pdp={}".format(pdp_value))
+ if pdp_value["keystone_project_id"] == k_pid:
+ return True
class PDP(Resource):
@@ -84,7 +115,7 @@ class PDP(Resource):
try:
data = PDPManager.get_pdp(user_id=user_id, pdp_id=uuid)
except Exception as e:
- LOG.error(e, exc_info=True)
+ logger.error(e, exc_info=True)
return {"result": False,
"error": str(e)}, 500
return {"pdps": data}
@@ -115,14 +146,17 @@ class PDP(Resource):
data = dict(request.json)
if not data.get("keystone_project_id"):
data["keystone_project_id"] = None
+ else:
+ if check_keystone_pid(data.get("keystone_project_id")):
+ raise exceptions.PdpKeystoneMappingConflict
data = PDPManager.add_pdp(
user_id=user_id, pdp_id=None, value=request.json)
uuid = list(data.keys())[0]
- LOG.info("data={}".format(data))
- LOG.info("uuid={}".format(uuid))
+ logger.debug("data={}".format(data))
+ logger.debug("uuid={}".format(uuid))
add_pod(uuid=uuid, data=data[uuid])
except Exception as e:
- LOG.error(e, exc_info=True)
+ logger.error(e, exc_info=True)
return {"result": False,
"error": str(e)}, 500
return {"pdps": data}
@@ -143,7 +177,7 @@ class PDP(Resource):
data = PDPManager.delete_pdp(user_id=user_id, pdp_id=uuid)
delete_pod(uuid)
except Exception as e:
- LOG.error(e, exc_info=True)
+ logger.error(e, exc_info=True)
return {"result": False,
"error": str(e)}, 500
return {"result": True}
@@ -168,13 +202,16 @@ class PDP(Resource):
_data = dict(request.json)
if not _data.get("keystone_project_id"):
_data["keystone_project_id"] = None
+ else:
+ if check_keystone_pid(_data.get("keystone_project_id")):
+ raise exceptions.PdpKeystoneMappingConflict
data = PDPManager.update_pdp(
user_id=user_id, pdp_id=uuid, value=_data)
- LOG.info("data={}".format(data))
- LOG.info("uuid={}".format(uuid))
+ logger.debug("data={}".format(data))
+ logger.debug("uuid={}".format(uuid))
add_pod(uuid=uuid, data=data[uuid])
except Exception as e:
- LOG.error(e, exc_info=True)
+ logger.error(e, exc_info=True)
return {"result": False,
"error": str(e)}, 500
return {"pdps": data}