summaryrefslogtreecommitdiff
path: root/neutronclient/neutron
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-03-01 06:33:54 +0000
committerGerrit Code Review <review@openstack.org>2016-03-01 06:33:54 +0000
commit67247a84aac41db3ab8d7ab2ce6d565f75661e05 (patch)
tree13aa2177e234c949e5cc6e8bf15124a0cc66e516 /neutronclient/neutron
parentc422c2610ed219f84e4f9cfaa8ffdf5689999e7e (diff)
parenta64aad2c0ffe84e15d59b5df03b0685e37094a45 (diff)
downloadpython-neutronclient-67247a84aac41db3ab8d7ab2ce6d565f75661e05.tar.gz
Merge "Reflecting L7 content rules capability in LBaaS"
Diffstat (limited to 'neutronclient/neutron')
-rw-r--r--neutronclient/neutron/v2_0/lb/v2/l7policy.py155
-rw-r--r--neutronclient/neutron/v2_0/lb/v2/l7rule.py148
2 files changed, 303 insertions, 0 deletions
diff --git a/neutronclient/neutron/v2_0/lb/v2/l7policy.py b/neutronclient/neutron/v2_0/lb/v2/l7policy.py
new file mode 100644
index 0000000..26c3315
--- /dev/null
+++ b/neutronclient/neutron/v2_0/lb/v2/l7policy.py
@@ -0,0 +1,155 @@
+# Copyright 2016 Radware LTD.
+# All Rights Reserved
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+from neutronclient._i18n import _
+from neutronclient.common import exceptions
+from neutronclient.common import utils
+from neutronclient.neutron import v2_0 as neutronV20
+
+
+def _get_listener_id(client, listener_id_or_name):
+ return neutronV20.find_resourceid_by_name_or_id(
+ client, 'listener', listener_id_or_name)
+
+
+def _get_pool_id(client, pool_id_or_name):
+ return neutronV20.find_resourceid_by_name_or_id(
+ client, 'pool', pool_id_or_name, cmd_resource='lbaas_pool')
+
+
+def _add_common_args(parser, is_create=True):
+ parser.add_argument(
+ '--name',
+ help=_('Name of the policy.'))
+ parser.add_argument(
+ '--description',
+ help=_('Description of the policy.'))
+ parser.add_argument(
+ '--action',
+ required=is_create,
+ metavar='ACTION',
+ type=utils.convert_to_uppercase,
+ choices=['REJECT', 'REDIRECT_TO_POOL', 'REDIRECT_TO_URL'],
+ help=_('Action type of the policy.'))
+ parser.add_argument(
+ '--redirect-pool',
+ help=_('ID or name of the pool for REDIRECT_TO_POOL action type.'))
+ parser.add_argument(
+ '--redirect-url',
+ help=_('URL for REDIRECT_TO_URL action type. '
+ 'This should be a valid URL string.'))
+ parser.add_argument(
+ '--position',
+ type=int,
+ help=_('L7 policy position in ordered policies list. '
+ 'This must be an integer starting from 1. '
+ 'Not specifying the position will place the policy '
+ 'at the tail of existing policies list.'))
+
+
+def _common_args2body(client, parsed_args, is_create=True):
+ if parsed_args.redirect_url:
+ if parsed_args.action != 'REDIRECT_TO_URL':
+ raise exceptions.CommandError(_('Action must be REDIRECT_TO_URL'))
+ if parsed_args.redirect_pool:
+ if parsed_args.action != 'REDIRECT_TO_POOL':
+ raise exceptions.CommandError(_('Action must be REDIRECT_TO_POOL'))
+ parsed_args.redirect_pool_id = _get_pool_id(
+ client, parsed_args.redirect_pool)
+ if (parsed_args.action == 'REDIRECT_TO_URL' and
+ not parsed_args.redirect_url):
+ raise exceptions.CommandError(_('Redirect URL must be specified'))
+ if (parsed_args.action == 'REDIRECT_TO_POOL' and
+ not parsed_args.redirect_pool):
+ raise exceptions.CommandError(_('Redirect pool must be specified'))
+
+ attributes = ['name', 'description',
+ 'action', 'redirect_pool_id', 'redirect_url',
+ 'position', 'admin_state_up']
+ if is_create:
+ parsed_args.listener_id = _get_listener_id(
+ client, parsed_args.listener)
+ attributes.extend(['listener_id', 'tenant_id'])
+ body = {}
+ neutronV20.update_dict(parsed_args, body, attributes)
+ return {'l7policy': body}
+
+
+class ListL7Policy(neutronV20.ListCommand):
+ """LBaaS v2 List L7 policies that belong to a given listener."""
+
+ resource = 'l7policy'
+ shadow_resource = 'lbaas_l7policy'
+ pagination_support = True
+ sorting_support = True
+ list_columns = [
+ 'id', 'name', 'action', 'redirect_pool_id', 'redirect_url',
+ 'position', 'admin_state_up', 'status'
+ ]
+
+
+class ShowL7Policy(neutronV20.ShowCommand):
+ """LBaaS v2 Show information of a given L7 policy."""
+
+ resource = 'l7policy'
+ shadow_resource = 'lbaas_l7policy'
+
+
+class CreateL7Policy(neutronV20.CreateCommand):
+ """LBaaS v2 Create L7 policy."""
+
+ resource = 'l7policy'
+ shadow_resource = 'lbaas_l7policy'
+
+ def add_known_arguments(self, parser):
+ _add_common_args(parser)
+ parser.add_argument(
+ '--admin-state-down',
+ dest='admin_state_up',
+ action='store_false',
+ help=_('Set admin state up to false.'))
+ parser.add_argument(
+ '--listener',
+ required=True,
+ metavar='LISTENER',
+ help=_('ID or name of the listener this policy belongs to.'))
+
+ def args2body(self, parsed_args):
+ return _common_args2body(self.get_client(), parsed_args)
+
+
+class UpdateL7Policy(neutronV20.UpdateCommand):
+ """LBaaS v2 Update a given L7 policy."""
+
+ resource = 'l7policy'
+ shadow_resource = 'lbaas_l7policy'
+
+ def add_known_arguments(self, parser):
+ _add_common_args(parser, is_create=False)
+ utils.add_boolean_argument(
+ parser, '--admin-state-up',
+ help=_('Specify the administrative state of the policy'
+ ' (True meaning "Up").'))
+
+ def args2body(self, parsed_args):
+ return _common_args2body(self.get_client(), parsed_args, False)
+
+
+class DeleteL7Policy(neutronV20.DeleteCommand):
+ """LBaaS v2 Delete a given L7 policy."""
+
+ resource = 'l7policy'
+ shadow_resource = 'lbaas_l7policy'
diff --git a/neutronclient/neutron/v2_0/lb/v2/l7rule.py b/neutronclient/neutron/v2_0/lb/v2/l7rule.py
new file mode 100644
index 0000000..1286559
--- /dev/null
+++ b/neutronclient/neutron/v2_0/lb/v2/l7rule.py
@@ -0,0 +1,148 @@
+# Copyright 2016 Radware LTD.
+# All Rights Reserved
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+
+from neutronclient._i18n import _
+from neutronclient.common import utils
+from neutronclient.neutron import v2_0 as neutronV20
+
+
+def _get_policy_id(client, policy_id_or_name):
+ return neutronV20.find_resourceid_by_name_or_id(
+ client, 'l7policy', policy_id_or_name,
+ cmd_resource='lbaas_l7policy')
+
+
+class LbaasL7RuleMixin(object):
+
+ def set_extra_attrs(self, parsed_args):
+ self.parent_id = _get_policy_id(self.get_client(),
+ parsed_args.l7policy)
+
+ def add_known_arguments(self, parser):
+ parser.add_argument(
+ 'l7policy', metavar='L7POLICY',
+ help=_('ID or name of L7 policy this rule belongs to.'))
+
+
+def _add_common_args(parser, is_create=True):
+ parser.add_argument(
+ '--type',
+ required=is_create,
+ type=utils.convert_to_uppercase,
+ choices=['HOST_NAME', 'PATH', 'FILE_TYPE', 'HEADER', 'COOKIE'],
+ help=_('Rule type.'))
+ parser.add_argument(
+ '--compare-type',
+ required=is_create,
+ type=utils.convert_to_uppercase,
+ choices=['REGEX', 'STARTS_WITH', 'ENDS_WITH',
+ 'CONTAINS', 'EQUAL_TO'],
+ help=_('Rule compare type.'))
+ parser.add_argument(
+ '--invert-compare',
+ dest='invert',
+ action='store_true',
+ help=_('Invert the compare type.'))
+ parser.add_argument(
+ '--key',
+ help=_('Key to compare.'
+ ' Relevant for HEADER and COOKIE types only.'))
+ parser.add_argument(
+ '--value',
+ required=is_create,
+ help=_('Value to compare.'))
+
+
+def _common_args2body(client, parsed_args, is_create=True):
+ attributes = ['type', 'compare_type',
+ 'invert', 'key', 'value', 'admin_state_up']
+ if is_create:
+ attributes.append('tenant_id')
+ body = {}
+ neutronV20.update_dict(parsed_args, body, attributes)
+ return {'rule': body}
+
+
+class ListL7Rule(LbaasL7RuleMixin, neutronV20.ListCommand):
+ """LBaaS v2 List L7 rules that belong to a given L7 policy."""
+
+ resource = 'rule'
+ shadow_resource = 'lbaas_l7rule'
+ pagination_support = True
+ sorting_support = True
+
+ list_columns = [
+ 'id', 'type', 'compare_type', 'invert', 'key', 'value',
+ 'admin_state_up', 'status'
+ ]
+
+ def take_action(self, parsed_args):
+ self.parent_id = _get_policy_id(self.get_client(),
+ parsed_args.l7policy)
+ self.values_specs.append('--l7policy_id=%s' % self.parent_id)
+ return super(ListL7Rule, self).take_action(parsed_args)
+
+
+class ShowL7Rule(LbaasL7RuleMixin, neutronV20.ShowCommand):
+ """LBaaS v2 Show information of a given rule."""
+
+ resource = 'rule'
+ shadow_resource = 'lbaas_l7rule'
+
+
+class CreateL7Rule(LbaasL7RuleMixin, neutronV20.CreateCommand):
+ """LBaaS v2 Create L7 rule."""
+
+ resource = 'rule'
+ shadow_resource = 'lbaas_l7rule'
+
+ def add_known_arguments(self, parser):
+ super(CreateL7Rule, self).add_known_arguments(parser)
+ _add_common_args(parser)
+ parser.add_argument(
+ '--admin-state-down',
+ dest='admin_state_up',
+ action='store_false',
+ help=_('Set admin state up to false'))
+
+ def args2body(self, parsed_args):
+ return _common_args2body(self.get_client(), parsed_args)
+
+
+class UpdateL7Rule(LbaasL7RuleMixin, neutronV20.UpdateCommand):
+ """LBaaS v2 Update a given L7 rule."""
+
+ resource = 'rule'
+ shadow_resource = 'lbaas_l7rule'
+
+ def add_known_arguments(self, parser):
+ super(UpdateL7Rule, self).add_known_arguments(parser)
+ _add_common_args(parser, False)
+ utils.add_boolean_argument(
+ parser, '--admin-state-up',
+ help=_('Specify the administrative state of the rule'
+ ' (True meaning "Up").'))
+
+ def args2body(self, parsed_args):
+ return _common_args2body(self.get_client(), parsed_args, False)
+
+
+class DeleteL7Rule(LbaasL7RuleMixin, neutronV20.DeleteCommand):
+ """LBaaS v2 Delete a given L7 rule."""
+
+ resource = 'rule'
+ shadow_resource = 'lbaas_l7rule'