From 6298bf7b097c724a7c6035bc16ff0ff21368b72d Mon Sep 17 00:00:00 2001 From: lvdongbing Date: Mon, 4 Jan 2016 22:21:06 +0800 Subject: [PATCH] Revise policy api --- bilean/api/openstack/v1/__init__.py | 36 +++++++++++++++++++++++++++ bilean/api/openstack/v1/policies.py | 38 +++++++++++++++++++++++------ bilean/api/openstack/v1/rules.py | 8 ++++-- 3 files changed, 72 insertions(+), 10 deletions(-) diff --git a/bilean/api/openstack/v1/__init__.py b/bilean/api/openstack/v1/__init__.py index 791f8f9..0fb4766 100644 --- a/bilean/api/openstack/v1/__init__.py +++ b/bilean/api/openstack/v1/__init__.py @@ -111,6 +111,42 @@ class API(wsgi.Router): action="delete", conditions={'method': 'DELETE'}) + # Policies + policy_resource = policies.create_resource(conf) + policy_path = "/{tenant_id}/policies" + with mapper.submapper(controller=policy_resource, + path_prefix=policy_path) as policy_mapper: + + # Policy collection + policy_mapper.connect("policy_index", + "", + action="index", + conditions={'method': 'GET'}) + + # Policy detail + policy_mapper.connect("policy_get", + "/{policy_id}", + action="get", + conditions={'method': 'GET'}) + + # Create policy + policy_mapper.connect("policy_create", + "", + action="create", + conditions={'method': 'POST'}) + + # Update policy + policy_mapper.connect("policy_update", + "/{policy_id}", + action="update", + conditions={'method': 'PUT'}) + + # Delete policy + policy_mapper.connect("policy_delete", + "/{policy_id}", + action="delete", + conditions={'method': 'DELETE'}) + # Events event_resource = events.create_resource(conf) event_path = "/{tenant_id}/events" diff --git a/bilean/api/openstack/v1/policies.py b/bilean/api/openstack/v1/policies.py index 03fc945..55bfe7f 100644 --- a/bilean/api/openstack/v1/policies.py +++ b/bilean/api/openstack/v1/policies.py @@ -58,7 +58,6 @@ class PolicyController(object): """List summary information for all policies""" filter_whitelist = { 'name': 'mixed', - 'type': 'mixed', 'metadata': 'mixed', } param_whitelist = { @@ -83,7 +82,7 @@ class PolicyController(object): filters = None policies = self.rpc_client.policy_list(req.context, filters=filters, - **params) + **params) return {'policies': policies} @@ -91,7 +90,7 @@ class PolicyController(object): def get(self, req, policy_id): """Get detailed information for a policy""" policy = self.rpc_client.policy_get(req.context, - policy_id) + policy_id) return {'policy': policy} @@ -101,18 +100,41 @@ class PolicyController(object): if not validator.is_valid_body(body): raise exc.HTTPUnprocessableEntity() - policy_data = body.get('policy') + policy_data = body.get('policy', None) + if profile_data is None: + raise exc.HTTPBadRequest(_("Malformed request data, missing " + "'policy' key in request body.")) + data = PolicyData(policy_data) policy = self.rpc_client.policy_create(req.context, - data.name(), - data.spec(), - data.metadata()) + data.name(), + data.rules(), + data.metadata()) return {'policy': policy} + @util.policy_enforce + def update(self, req, policy_id, body): + if not validator.is_valid_body(body): + raise exc.HTTPUnprocessableEntity() + + policy_data = body.get('policy', None) + if profile_data is None: + raise exc.HTTPBadRequest(_("Malformed request data, missing " + "'policy' key in request body.")) + + name = policy_data.get(consts.POLICY_NAME, None) + metadata = policy_data.get(consts.POLICY_METADATA, None) + is_default = policy_data.get(consts.POLICY_IS_DEFAULT, None) + + policy = self.rpc_client.policy_update(req.context, policy_id, name, + metadata, is_default) + return {'policy': policy} + + @util.policy_enforce def delete(self, req, policy_id): """Delete a policy with given policy_id""" - self.rpc_client.delete_policy(req.context, policy_id) + self.rpc_client.policy_delete(req.context, policy_id) def create_resource(options): diff --git a/bilean/api/openstack/v1/rules.py b/bilean/api/openstack/v1/rules.py index c743063..bf48638 100644 --- a/bilean/api/openstack/v1/rules.py +++ b/bilean/api/openstack/v1/rules.py @@ -103,7 +103,11 @@ class RuleController(object): if not validator.is_valid_body(body): raise exc.HTTPUnprocessableEntity() - rule_data = body.get('rule') + rule_data = body.get('rule', None) + if rule_data is None: + raise exc.HTTPBadRequest(_("Malformed request data, missing " + "'rule' key in request body.")) + data = RuleData(rule_data) rule = self.rpc_client.rule_create(req.context, data.name(), @@ -114,7 +118,7 @@ class RuleController(object): @util.policy_enforce def delete(self, req, rule_id): """Delete a rule with given rule_id""" - self.rpc_client.delete_rule(req.context, rule_id) + self.rpc_client.rule_delete(req.context, rule_id) def create_resource(options):