aboutsummaryrefslogtreecommitdiffstats
path: root/moon_manager
diff options
context:
space:
mode:
Diffstat (limited to 'moon_manager')
-rw-r--r--moon_manager/moon_manager/api/slaves.py110
-rw-r--r--moon_manager/moon_manager/http_server.py3
-rw-r--r--moon_manager/tests/unit_python/api/test_assignemnt.py174
3 files changed, 286 insertions, 1 deletions
diff --git a/moon_manager/moon_manager/api/slaves.py b/moon_manager/moon_manager/api/slaves.py
new file mode 100644
index 00000000..d87b8aad
--- /dev/null
+++ b/moon_manager/moon_manager/api/slaves.py
@@ -0,0 +1,110 @@
+# Copyright 2015 Open Platform for NFV Project, Inc. and its contributors
+# This software is distributed under the terms and conditions of the 'Apache-2.0'
+# license which can be found in the file 'LICENSE' in this package distribution
+# or at 'http://www.apache.org/licenses/LICENSE-2.0'.
+"""
+PDP are Policy Decision Point.
+
+"""
+
+from flask import request
+from flask_restful import Resource
+import logging
+import requests
+import time
+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, exceptions
+
+__version__ = "4.3.0"
+
+logger = logging.getLogger("moon.manager.api." + __name__)
+
+
+class Slaves(Resource):
+ """
+ Endpoint for pdp requests
+ """
+
+ __urls__ = (
+ "/slaves",
+ "/slaves/",
+ "/slaves/<string:uuid>",
+ "/slaves/<string:uuid>/",
+ )
+
+ def __init__(self, **kwargs):
+ conf = configuration.get_configuration("components/orchestrator")
+ self.orchestrator_hostname = conf["components/orchestrator"].get("hostname",
+ "orchestrator")
+ self.orchestrator_port = conf["components/orchestrator"].get("port",
+ 80)
+
+ @check_auth
+ def get(self, uuid=None, user_id=None):
+ """Retrieve all slaves
+
+ :param uuid: uuid of the slave
+ :param user_id: user ID who do the request
+ :return: {
+ "slaves": {
+ "XXX": {
+ "name": "...",
+ "installed": True
+ },
+ "YYY": {
+ "name": "...",
+ "installed": False
+ }
+ }
+ }
+ """
+ req = requests.get("http://{}:{}/slaves".format(
+ self.orchestrator_hostname, self.orchestrator_port
+ ))
+ return {"slaves": req.json()}
+
+ @check_auth
+ def patch(self, uuid=None, user_id=None):
+ """Update a slave
+
+ :param uuid: uuid of the slave to update
+ :param user_id: user ID who do the request
+ :request body: {
+ "op": "replace",
+ "variable": "configured",
+ "value": True,
+ }
+ :return: 204
+ :internal_api: add_pdp
+ """
+ logger.info("Will made a request for {}".format(uuid))
+ if request.json.get("op") == "replace" \
+ and request.json.get("variable") == "configured" \
+ and request.json.get("value"):
+ req = requests.post("http://{}:{}/pods".format(
+ self.orchestrator_hostname, self.orchestrator_port,
+ ),
+ json={"slave_name": uuid}
+ )
+ if req.status_code != 200:
+ logger.warning("Get error from Orchestrator {} {}".format(
+ req.reason, req.status_code
+ ))
+ return "Orchestrator: " + str(req.reason), req.status_code
+ elif request.json.get("op") == "replace" \
+ and request.json.get("variable") == "configured" \
+ and not request.json.get("value"):
+ req = requests.delete("http://{}:{}/pods/{}".format(
+ self.orchestrator_hostname, self.orchestrator_port, uuid
+ ))
+ if req.status_code != 200:
+ logger.warning("Get error from Orchestrator {} {}".format(
+ req.reason, req.status_code
+ ))
+ return "Orchestrator: " + str(req.reason), req.status_code
+ else:
+ return "Malformed request", 400
+ return {"slaves": req.json()}
diff --git a/moon_manager/moon_manager/http_server.py b/moon_manager/moon_manager/http_server.py
index d67e1121..a98cab43 100644
--- a/moon_manager/moon_manager/http_server.py
+++ b/moon_manager/moon_manager/http_server.py
@@ -14,6 +14,7 @@ from moon_manager.api.generic import Status, Logs, API
from moon_manager.api.models import Models
from moon_manager.api.policies import Policies
from moon_manager.api.pdp import PDP
+from moon_manager.api.slaves import Slaves
from moon_manager.api.meta_rules import MetaRules
from moon_manager.api.meta_data import SubjectCategories, ObjectCategories, ActionCategories
from moon_manager.api.perimeter import Subjects, Objects, Actions
@@ -32,7 +33,7 @@ __API__ = (
Subjects, Objects, Actions, Rules,
SubjectAssignments, ObjectAssignments, ActionAssignments,
SubjectData, ObjectData, ActionData,
- Models, Policies, PDP
+ Models, Policies, PDP, Slaves
)
diff --git a/moon_manager/tests/unit_python/api/test_assignemnt.py b/moon_manager/tests/unit_python/api/test_assignemnt.py
new file mode 100644
index 00000000..08688e04
--- /dev/null
+++ b/moon_manager/tests/unit_python/api/test_assignemnt.py
@@ -0,0 +1,174 @@
+import api.utilities as utilities
+import json
+
+
+# subject_categories_test
+
+
+def get_subject_assignment(client, policy_id):
+ req = client.get("/policies/{}/subject_assignments".format(policy_id))
+ subject_assignment = utilities.get_json(req.data)
+ return req, subject_assignment
+
+
+def add_subject_assignment(client, policy_id, category_id):
+ data = {
+ "id": "id1",
+ "category_id": category_id,
+ "data_id": "data_id1"
+ }
+ req = client.post("/policies/{}/subject_assignments/{}".format(policy_id, category_id), data=json.dumps(data),
+ headers={'Content-Type': 'application/json'})
+ subject_assignment = utilities.get_json(req.data)
+ return req, subject_assignment
+
+
+def delete_subject_assignment(client, policy_id):
+ req = client.delete("/policies/{}/subject_assignments".format(policy_id))
+ return req
+
+
+def test_get_subject_assignment():
+ policy_id = utilities.get_policy_id()
+ client = utilities.register_client()
+ req, subject_assignment = get_subject_assignment(client, policy_id)
+ assert req.status_code == 200
+ assert isinstance(subject_assignment, dict)
+ assert "subject_assignments" in subject_assignment
+
+
+def test_add_subject_assignment():
+ policy_id = utilities.get_policy_id()
+ client = utilities.register_client()
+ req, subject_assignment = add_subject_assignment(client, policy_id, "111")
+ assert req.status_code == 200
+ assert isinstance(subject_assignment, dict)
+ value = subject_assignment["subject_assignments"]
+ assert "subject_assignments" in subject_assignment
+ id = list(value.keys())[0]
+ assert value[id]['policy_id'] == policy_id
+ assert value[id]['category_id'] == "111"
+ assert value[id]['subject_id'] == "id1"
+
+
+def test_delete_subject_assignment():
+ client = utilities.register_client()
+ policy_id = utilities.get_policy_id()
+ success_req = delete_subject_assignment(client, policy_id)
+ assert success_req.status_code == 200
+
+# ---------------------------------------------------------------------------
+
+# object_categories_test
+
+
+def get_object_assignment(client, policy_id):
+ req = client.get("/policies/{}/object_assignments".format(policy_id))
+ object_assignment = utilities.get_json(req.data)
+ return req, object_assignment
+
+
+def add_object_assignment(client, policy_id, category_id):
+ data = {
+ "id": "id1",
+ "category_id": category_id,
+ "data_id": "data_id1"
+ }
+ req = client.post("/policies/{}/object_assignments/{}".format(policy_id, category_id), data=json.dumps(data),
+ headers={'Content-Type': 'application/json'})
+ object_assignment = utilities.get_json(req.data)
+ return req, object_assignment
+
+
+def delete_object_assignment(client, policy_id):
+ req = client.delete("/policies/{}/object_assignments".format(policy_id))
+ return req
+
+
+def test_get_object_assignment():
+ policy_id = utilities.get_policy_id()
+ client = utilities.register_client()
+ req, object_assignment = get_object_assignment(client, policy_id)
+ assert req.status_code == 200
+ assert isinstance(object_assignment, dict)
+ assert "object_assignments" in object_assignment
+
+
+def test_add_object_assignment():
+ policy_id = utilities.get_policy_id()
+ client = utilities.register_client()
+ req, object_assignment = add_object_assignment(client, policy_id, "111")
+ assert req.status_code == 200
+ assert isinstance(object_assignment, dict)
+ value = object_assignment["object_assignments"]
+ assert "object_assignments" in object_assignment
+ id = list(value.keys())[0]
+ assert value[id]['policy_id'] == policy_id
+ assert value[id]['category_id'] == "111"
+ assert value[id]['object_id'] == "id1"
+
+
+def test_delete_object_assignment():
+ client = utilities.register_client()
+ policy_id = utilities.get_policy_id()
+ success_req = delete_object_assignment(client, policy_id)
+ assert success_req.status_code == 200
+
+# ---------------------------------------------------------------------------
+
+# action_categories_test
+
+
+def get_action_assignment(client, policy_id):
+ req = client.get("/policies/{}/action_assignments".format(policy_id))
+ action_assignment = utilities.get_json(req.data)
+ return req, action_assignment
+
+
+def add_action_assignment(client, policy_id, category_id):
+ data = {
+ "id": "id1",
+ "category_id": category_id,
+ "data_id": "data_id1"
+ }
+ req = client.post("/policies/{}/action_assignments/{}".format(policy_id, category_id), data=json.dumps(data),
+ headers={'Content-Type': 'application/json'})
+ action_assignment = utilities.get_json(req.data)
+ return req, action_assignment
+
+
+def delete_action_assignment(client, policy_id):
+ req = client.delete("/policies/{}/action_assignments".format(policy_id))
+ return req
+
+
+def test_get_action_assignment():
+ policy_id = utilities.get_policy_id()
+ client = utilities.register_client()
+ req, action_assignment = get_action_assignment(client, policy_id)
+ assert req.status_code == 200
+ assert isinstance(action_assignment, dict)
+ assert "action_assignments" in action_assignment
+
+
+def test_add_action_assignment():
+ policy_id = utilities.get_policy_id()
+ client = utilities.register_client()
+ req, action_assignment = add_action_assignment(client, policy_id, "111")
+ assert req.status_code == 200
+ assert isinstance(action_assignment, dict)
+ value = action_assignment["action_assignments"]
+ assert "action_assignments" in action_assignment
+ id = list(value.keys())[0]
+ assert value[id]['policy_id'] == policy_id
+ assert value[id]['category_id'] == "111"
+ assert value[id]['action_id'] == "id1"
+
+
+def test_delete_action_assignment():
+ client = utilities.register_client()
+ policy_id = utilities.get_policy_id()
+ success_req = delete_action_assignment(client, policy_id)
+ assert success_req.status_code == 200
+
+# --------------------------------------------------------------------------- \ No newline at end of file