Add l7rule commands to client
This patch implements the rule create, list, show, delete and set commands in the OpenStack client. Change-Id: I2b45b677feece00be01eeec6ce992cdb147e0f77
This commit is contained in:
parent
5f934036d8
commit
f9929dc37f
|
@ -8,11 +8,11 @@ lbaas-l7policy-delete,loadbalancer l7policy delete,LBaaS v2 Delete a given L7 po
|
||||||
lbaas-l7policy-list,loadbalancer l7policy list,LBaaS v2 List L7 policies that belong to a given listener.
|
lbaas-l7policy-list,loadbalancer l7policy list,LBaaS v2 List L7 policies that belong to a given listener.
|
||||||
lbaas-l7policy-show,loadbalancer l7policy show,LBaaS v2 Show information of a given L7 policy.
|
lbaas-l7policy-show,loadbalancer l7policy show,LBaaS v2 Show information of a given L7 policy.
|
||||||
lbaas-l7policy-update,loadbalancer l7policy set,LBaaS v2 Update a given L7 policy.
|
lbaas-l7policy-update,loadbalancer l7policy set,LBaaS v2 Update a given L7 policy.
|
||||||
lbaas-l7rule-create,,LBaaS v2 Create L7 rule.
|
lbaas-l7rule-create,loadbalancer l7rule create,LBaaS v2 Create L7 rule.
|
||||||
lbaas-l7rule-delete,,LBaaS v2 Delete a given L7 rule.
|
lbaas-l7rule-delete,loadbalancer l7rule delete,LBaaS v2 Delete a given L7 rule.
|
||||||
lbaas-l7rule-list,,LBaaS v2 List L7 rules that belong to a given L7 policy.
|
lbaas-l7rule-list,loadbalancer l7rule list,LBaaS v2 List L7 rules that belong to a given L7 policy.
|
||||||
lbaas-l7rule-show,,LBaaS v2 Show information of a given rule.
|
lbaas-l7rule-show,loadbalancer l7rule show,LBaaS v2 Show information of a given rule.
|
||||||
lbaas-l7rule-update,,LBaaS v2 Update a given L7 rule.
|
lbaas-l7rule-update,loadbalancer l7rule set,LBaaS v2 Update a given L7 rule.
|
||||||
lbaas-listener-create,loadbalancer listener create,LBaaS v2 Create a listener.
|
lbaas-listener-create,loadbalancer listener create,LBaaS v2 Create a listener.
|
||||||
lbaas-listener-delete,loadbalancer listener delete,LBaaS v2 Delete a given listener.
|
lbaas-listener-delete,loadbalancer listener delete,LBaaS v2 Delete a given listener.
|
||||||
lbaas-listener-list,loadbalancer listener list,LBaaS v2 List listeners that belong to a given tenant.
|
lbaas-listener-list,loadbalancer listener list,LBaaS v2 List listeners that belong to a given tenant.
|
||||||
|
|
|
|
@ -850,3 +850,177 @@ Delete a l7policy
|
||||||
.. describe:: <policy>
|
.. describe:: <policy>
|
||||||
|
|
||||||
L7policy to delete (name or ID).
|
L7policy to delete (name or ID).
|
||||||
|
|
||||||
|
======
|
||||||
|
l7rule
|
||||||
|
======
|
||||||
|
|
||||||
|
loadbalancer l7rule list
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
List l7rules for l7policy
|
||||||
|
|
||||||
|
.. program:: loadbalancer l7rule list
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
openstack loadbalancer l7rule list
|
||||||
|
--l7policy <l7policy>
|
||||||
|
|
||||||
|
.. _loadbalancer_l7rule_list-l7policy:
|
||||||
|
.. describe:: <l7policy>
|
||||||
|
|
||||||
|
l7policy to list rules for (name or ID).
|
||||||
|
|
||||||
|
loadbalancer l7rule show
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
Show the details of a single l7rule
|
||||||
|
|
||||||
|
.. program:: loadbalancer l7rule show
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
openstack loadbalancer l7rule show
|
||||||
|
<l7policy>
|
||||||
|
<rule-id>
|
||||||
|
|
||||||
|
.. _loadbalancer_l7rule_show-l7policy:
|
||||||
|
.. describe:: <l7policy>
|
||||||
|
|
||||||
|
l7policy to show rule from (name or ID)
|
||||||
|
|
||||||
|
.. _loadbalancer_l7rule_show-rule-id:
|
||||||
|
.. describe:: <l7rule_id>
|
||||||
|
|
||||||
|
l7rule to show
|
||||||
|
|
||||||
|
loadbalancer l7rule create
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
Create a l7rule
|
||||||
|
|
||||||
|
.. program:: loadbalancer l7rule create
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
openstack loadbalancer l7rule create
|
||||||
|
--compare-type {'REGEX','EQUAL_TO','CONTAINS','ENDS_WITH','STARTS_WITH'}
|
||||||
|
[--invert]
|
||||||
|
--value <value>
|
||||||
|
[--key <key>]
|
||||||
|
[--project <project>]
|
||||||
|
--type {'FILE_TYPE','PATH','COOKIE','HOST_NAME','HEADER'}
|
||||||
|
[--enable | --disable]
|
||||||
|
<l7policy>
|
||||||
|
|
||||||
|
.. option:: --compare-type {'REGEX','EQUAL_TO','CONTAINS','ENDS_WITH','STARTS_WITH'}
|
||||||
|
|
||||||
|
Set the compare type for the l7rule.
|
||||||
|
|
||||||
|
.. option:: --invert
|
||||||
|
|
||||||
|
Invert l7rule.
|
||||||
|
|
||||||
|
.. option:: --value <value>
|
||||||
|
|
||||||
|
Set the rule value to match on.
|
||||||
|
|
||||||
|
.. option:: --key <key>
|
||||||
|
|
||||||
|
Set the key for the l7rule's value to match on.
|
||||||
|
|
||||||
|
.. option:: --project <project>
|
||||||
|
|
||||||
|
Project for the l7rule (name or ID).
|
||||||
|
|
||||||
|
.. option:: --type {'FILE_TYPE','PATH','COOKIE','HOST_NAME','HEADER'}
|
||||||
|
|
||||||
|
Set the type for the l7rule.
|
||||||
|
|
||||||
|
.. option:: --enable
|
||||||
|
|
||||||
|
Enable l7rule (default)
|
||||||
|
|
||||||
|
.. option:: --disable
|
||||||
|
|
||||||
|
Disable l7rule
|
||||||
|
|
||||||
|
.. _loadbalancer_l7rule_create-l7policy:
|
||||||
|
.. describe:: <l7policy>
|
||||||
|
|
||||||
|
l7policy to add l7rule to (name or ID).
|
||||||
|
|
||||||
|
|
||||||
|
loadbalancer l7rule set
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Update a l7rule
|
||||||
|
|
||||||
|
.. program:: loadbalancer l7rule set
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
openstack loadbalancer l7rule set
|
||||||
|
[--compare-type {'REGEX','EQUAL_TO','CONTAINS','ENDS_WITH','STARTS_WITH'}]
|
||||||
|
[--invert]
|
||||||
|
[--value <value>]
|
||||||
|
[--key <key>]
|
||||||
|
[--type {'FILE_TYPE','PATH','COOKIE','HOST_NAME','HEADER'}]
|
||||||
|
[--enable | --disable]
|
||||||
|
--l7policy <policy>
|
||||||
|
<l7rule_id>
|
||||||
|
|
||||||
|
.. option:: --compare-type {'REGEX','EQUAL_TO','CONTAINS','ENDS_WITH','STARTS_WITH'}
|
||||||
|
|
||||||
|
Set the compare type for the l7rule.
|
||||||
|
|
||||||
|
.. option:: --invert
|
||||||
|
|
||||||
|
Invert l7rule.
|
||||||
|
|
||||||
|
.. option:: --value <value>
|
||||||
|
|
||||||
|
Set the rule value to match on.
|
||||||
|
|
||||||
|
.. option:: --key <key>
|
||||||
|
|
||||||
|
Set the key for the l7rule's value to match on.
|
||||||
|
|
||||||
|
.. option:: --type {'FILE_TYPE','PATH','COOKIE','HOST_NAME','HEADER'}
|
||||||
|
|
||||||
|
Set the type for the l7rule.
|
||||||
|
|
||||||
|
.. option:: --enable
|
||||||
|
|
||||||
|
Enable l7rule.
|
||||||
|
|
||||||
|
.. option:: --disable
|
||||||
|
|
||||||
|
Disable l7rule.
|
||||||
|
|
||||||
|
.. _loadbalancer_l7rule_set-l7policy:
|
||||||
|
.. describe:: <l7policy>
|
||||||
|
|
||||||
|
L7policy to update l7rule on (name or ID)
|
||||||
|
|
||||||
|
.. _loadbalancer_l7rule_set-l7rule_id:
|
||||||
|
.. describe:: <l7rule_id>
|
||||||
|
|
||||||
|
l7rule to update
|
||||||
|
|
||||||
|
loadbalancer l7rule delete
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
.. program:: loadbalancer l7rule delete
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
openstack loadbalancer l7rule delete
|
||||||
|
<l7policy>
|
||||||
|
<rule_id>
|
||||||
|
|
||||||
|
.. _loadbalancer_l7rule_delete-l7policy:
|
||||||
|
.. describe:: <l7policy>
|
||||||
|
|
||||||
|
l7policy to delete rule from (name or ID).
|
||||||
|
|
||||||
|
.. _loadbalancer_l7rule_delete-l7rule_id:
|
||||||
|
.. describe:: <l7rule_id>
|
||||||
|
|
||||||
|
l7rule to delete.
|
||||||
|
|
|
@ -29,4 +29,4 @@ BASE_SINGLE_MONITOR_URL = '/healthmonitors/{uuid}'
|
||||||
BASE_L7POLICY_URL = '/l7policies'
|
BASE_L7POLICY_URL = '/l7policies'
|
||||||
BASE_SINGLE_L7POLICY_URL = BASE_L7POLICY_URL + '/{policy_uuid}'
|
BASE_SINGLE_L7POLICY_URL = BASE_L7POLICY_URL + '/{policy_uuid}'
|
||||||
BASE_L7RULE_URL = BASE_SINGLE_L7POLICY_URL + '/rules'
|
BASE_L7RULE_URL = BASE_SINGLE_L7POLICY_URL + '/rules'
|
||||||
BASE_SINGLE_L7RULE_URL = BASE_SINGLE_L7POLICY_URL + '/{rule_uuid}'
|
BASE_SINGLE_L7RULE_URL = BASE_SINGLE_L7POLICY_URL + '/rules/{rule_uuid}'
|
||||||
|
|
|
@ -196,7 +196,7 @@ class APIv2(api.BaseAPI):
|
||||||
"""Delete a pool
|
"""Delete a pool
|
||||||
|
|
||||||
:param string pool_id:
|
:param string pool_id:
|
||||||
ID of of listener to delete
|
ID of of pool to delete
|
||||||
:return:
|
:return:
|
||||||
Response Code from the API
|
Response Code from the API
|
||||||
"""
|
"""
|
||||||
|
@ -344,7 +344,7 @@ class APIv2(api.BaseAPI):
|
||||||
"""Delete a l7policy
|
"""Delete a l7policy
|
||||||
|
|
||||||
:param string l7policy_id:
|
:param string l7policy_id:
|
||||||
ID of of listener to delete
|
ID of of l7policy to delete
|
||||||
:return:
|
:return:
|
||||||
Response Code from the API
|
Response Code from the API
|
||||||
"""
|
"""
|
||||||
|
@ -380,3 +380,81 @@ class APIv2(api.BaseAPI):
|
||||||
response = self.create(url, method='PUT', **kwargs)
|
response = self.create(url, method='PUT', **kwargs)
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
def l7rule_list(self, l7policy_id, **kwargs):
|
||||||
|
"""List all l7rules for a l7policy
|
||||||
|
|
||||||
|
:param kwargs:
|
||||||
|
Parameters to filter on (not implemented)
|
||||||
|
:return:
|
||||||
|
List of l7policies
|
||||||
|
"""
|
||||||
|
url = const.BASE_L7RULE_URL.format(policy_uuid=l7policy_id)
|
||||||
|
rule_list = self.list(url, **kwargs)
|
||||||
|
|
||||||
|
return rule_list
|
||||||
|
|
||||||
|
def l7rule_create(self, l7policy_id, **kwargs):
|
||||||
|
"""Create a l7rule
|
||||||
|
|
||||||
|
:param string l7policy_id:
|
||||||
|
The l7policy to create the l7rule for
|
||||||
|
:param kwargs:
|
||||||
|
Parameters to create a l7rule with (expects json=)
|
||||||
|
:return:
|
||||||
|
A dict of the created l7rule's settings
|
||||||
|
"""
|
||||||
|
url = const.BASE_L7RULE_URL.format(policy_uuid=l7policy_id)
|
||||||
|
rule = self.create(url, **kwargs)
|
||||||
|
|
||||||
|
return rule
|
||||||
|
|
||||||
|
def l7rule_delete(self, l7rule_id, l7policy_id):
|
||||||
|
"""Delete a l7rule
|
||||||
|
|
||||||
|
:param string l7rule_id:
|
||||||
|
ID of of listener to delete
|
||||||
|
:param string l7policy_id:
|
||||||
|
ID of the l7policy for this l7rule
|
||||||
|
:return:
|
||||||
|
Response Code from the API
|
||||||
|
"""
|
||||||
|
url = const.BASE_SINGLE_L7RULE_URL.format(rule_uuid=l7rule_id,
|
||||||
|
policy_uuid=l7policy_id)
|
||||||
|
response = self.delete(url)
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
|
def l7rule_show(self, l7rule_id, l7policy_id):
|
||||||
|
"""Show a l7rule's settings
|
||||||
|
|
||||||
|
:param string l7rule_id:
|
||||||
|
ID of the l7rule to show
|
||||||
|
:param string l7policy_id:
|
||||||
|
ID of the l7policy for this l7rule
|
||||||
|
:return:
|
||||||
|
Dict of the specified l7rule's settings
|
||||||
|
"""
|
||||||
|
url = const.BASE_L7RULE_URL.format(policy_uuid=l7policy_id)
|
||||||
|
|
||||||
|
rule = self.find(path=url, value=l7rule_id)
|
||||||
|
|
||||||
|
return rule
|
||||||
|
|
||||||
|
def l7rule_set(self, l7rule_id, l7policy_id, **kwargs):
|
||||||
|
"""Update a l7rule's settings
|
||||||
|
|
||||||
|
:param l7rule_id:
|
||||||
|
ID of the l7rule to update
|
||||||
|
:param string l7policy_id:
|
||||||
|
ID of the l7policy for this l7rule
|
||||||
|
:param kwargs:
|
||||||
|
A dict of arguments to update a l7rule
|
||||||
|
:return:
|
||||||
|
Response Code from the API
|
||||||
|
"""
|
||||||
|
url = const.BASE_SINGLE_L7RULE_URL.format(rule_uuid=l7rule_id,
|
||||||
|
policy_uuid=l7policy_id)
|
||||||
|
response = self.create(url, method='PUT', **kwargs)
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
|
@ -145,3 +145,28 @@ L7POLICY_COLUMNS = (
|
||||||
'action',
|
'action',
|
||||||
'position',
|
'position',
|
||||||
'admin_state_up')
|
'admin_state_up')
|
||||||
|
|
||||||
|
L7RULE_ROWS = (
|
||||||
|
'created_at',
|
||||||
|
'compare_type',
|
||||||
|
'provisioning_status',
|
||||||
|
'invert',
|
||||||
|
'admin_state_up',
|
||||||
|
'updated_at',
|
||||||
|
'value',
|
||||||
|
'key',
|
||||||
|
'project_id',
|
||||||
|
'type',
|
||||||
|
'id',
|
||||||
|
'operating_status')
|
||||||
|
|
||||||
|
L7RULE_COLUMNS = (
|
||||||
|
'id',
|
||||||
|
'project_id',
|
||||||
|
'provisioning_status',
|
||||||
|
'compare_type',
|
||||||
|
'type',
|
||||||
|
'key',
|
||||||
|
'value',
|
||||||
|
'invert',
|
||||||
|
'admin_state_up')
|
||||||
|
|
|
@ -0,0 +1,261 @@
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
"""L7rule action implementation"""
|
||||||
|
|
||||||
|
from cliff import lister
|
||||||
|
from osc_lib.command import command
|
||||||
|
from osc_lib import utils
|
||||||
|
|
||||||
|
from octaviaclient.osc.v2 import constants as const
|
||||||
|
from octaviaclient.osc.v2 import utils as v2_utils
|
||||||
|
|
||||||
|
COMPARE_TYPES = ['REGEX', 'EQUAL_TO', 'CONTAINS', 'ENDS_WITH', 'STARTS_WITH']
|
||||||
|
TYPES = ['FILE_TYPE', 'PATH', 'COOKIE', 'HOST_NAME', 'HEADER']
|
||||||
|
|
||||||
|
|
||||||
|
class CreateL7Rule(command.ShowOne):
|
||||||
|
"""Create a l7rule"""
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
parser = super(CreateL7Rule, self).get_parser(prog_name)
|
||||||
|
parser.add_argument(
|
||||||
|
'l7policy',
|
||||||
|
metavar='<l7policy>',
|
||||||
|
help="l7policy to add l7rule to (name or ID)"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--compare-type',
|
||||||
|
metavar='<type>',
|
||||||
|
required=True,
|
||||||
|
choices=COMPARE_TYPES,
|
||||||
|
help="Compare type for the l7rule"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--invert',
|
||||||
|
action='store_true',
|
||||||
|
default=None,
|
||||||
|
help="Invert l7rule"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--value',
|
||||||
|
metavar='<value>',
|
||||||
|
required=True,
|
||||||
|
help="Rule value"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--key',
|
||||||
|
metavar='<key>',
|
||||||
|
help="Key for the l7rule"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--type',
|
||||||
|
metavar='<type>',
|
||||||
|
required=True,
|
||||||
|
choices=TYPES,
|
||||||
|
help="Type for the l7rule"
|
||||||
|
)
|
||||||
|
admin_group = parser.add_mutually_exclusive_group()
|
||||||
|
admin_group.add_argument(
|
||||||
|
'--enable',
|
||||||
|
action='store_true',
|
||||||
|
default=True,
|
||||||
|
help="Enable l7policy (default)"
|
||||||
|
)
|
||||||
|
admin_group.add_argument(
|
||||||
|
'--disable',
|
||||||
|
action='store_true',
|
||||||
|
default=None,
|
||||||
|
help="Disable l7policy"
|
||||||
|
)
|
||||||
|
|
||||||
|
return parser
|
||||||
|
|
||||||
|
def take_action(self, parsed_args):
|
||||||
|
rows = const.L7RULE_ROWS
|
||||||
|
attrs = v2_utils.get_l7rule_attrs(self.app.client_manager,
|
||||||
|
parsed_args)
|
||||||
|
v2_utils.check_l7rule_attrs(attrs)
|
||||||
|
|
||||||
|
l7policy_id = attrs.pop('l7policy_id')
|
||||||
|
body = {"rule": attrs}
|
||||||
|
data = self.app.client_manager.load_balancer.l7rule_create(
|
||||||
|
l7policy_id=l7policy_id,
|
||||||
|
json=body
|
||||||
|
)
|
||||||
|
|
||||||
|
return (rows, (utils.get_dict_properties(
|
||||||
|
data['rule'], rows, formatters={})))
|
||||||
|
|
||||||
|
|
||||||
|
class DeleteL7Rule(command.Command):
|
||||||
|
"""Delete a l7rule"""
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
parser = super(DeleteL7Rule, self).get_parser(prog_name)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
'l7policy',
|
||||||
|
metavar="<l7policy>",
|
||||||
|
help="l7policy to delete rule from (name or ID)"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'l7rule',
|
||||||
|
metavar="<rule_id>",
|
||||||
|
help="l7rule to delete"
|
||||||
|
)
|
||||||
|
|
||||||
|
return parser
|
||||||
|
|
||||||
|
def take_action(self, parsed_args):
|
||||||
|
attrs = v2_utils.get_l7rule_attrs(self.app.client_manager, parsed_args)
|
||||||
|
|
||||||
|
self.app.client_manager.load_balancer.l7rule_delete(
|
||||||
|
l7rule_id=attrs['l7rule_id'],
|
||||||
|
l7policy_id=attrs['l7policy_id']
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class ListL7Rule(lister.Lister):
|
||||||
|
"""List l7rules for l7policy"""
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
parser = super(ListL7Rule, self).get_parser(prog_name)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
'l7policy',
|
||||||
|
metavar='<l7policy>',
|
||||||
|
help='l7policy to list rules for (name or ID)'
|
||||||
|
)
|
||||||
|
|
||||||
|
return parser
|
||||||
|
|
||||||
|
def take_action(self, parsed_args):
|
||||||
|
columns = const.L7RULE_COLUMNS
|
||||||
|
attrs = v2_utils.get_l7rule_attrs(self.app.client_manager, parsed_args)
|
||||||
|
|
||||||
|
data = self.app.client_manager.load_balancer.l7rule_list(
|
||||||
|
l7policy_id=attrs['l7policy_id']
|
||||||
|
)
|
||||||
|
|
||||||
|
return (columns,
|
||||||
|
(utils.get_dict_properties(
|
||||||
|
s, columns, formatters={}) for s in data['rules']))
|
||||||
|
|
||||||
|
|
||||||
|
class ShowL7Rule(command.ShowOne):
|
||||||
|
"""Show the details of a single l7rule"""
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
parser = super(ShowL7Rule, self).get_parser(prog_name)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
'l7policy',
|
||||||
|
metavar="<l7policy>",
|
||||||
|
help="l7policy to show rule from (name or ID)"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'l7rule',
|
||||||
|
metavar="<l7rule_id>",
|
||||||
|
help="l7rule to show"
|
||||||
|
)
|
||||||
|
|
||||||
|
return parser
|
||||||
|
|
||||||
|
def take_action(self, parsed_args):
|
||||||
|
rows = const.L7RULE_ROWS
|
||||||
|
|
||||||
|
attrs = v2_utils.get_l7rule_attrs(self.app.client_manager, parsed_args)
|
||||||
|
data = self.app.client_manager.load_balancer.l7rule_show(
|
||||||
|
l7rule_id=attrs['l7rule_id'],
|
||||||
|
l7policy_id=attrs['l7policy_id']
|
||||||
|
)
|
||||||
|
|
||||||
|
return (rows, (utils.get_dict_properties(
|
||||||
|
data, rows, formatters={})))
|
||||||
|
|
||||||
|
|
||||||
|
class SetL7Rule(command.Command):
|
||||||
|
"""Update a l7rule"""
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
parser = super(SetL7Rule, self).get_parser(prog_name)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
'l7policy',
|
||||||
|
metavar='<l7policy>',
|
||||||
|
help="L7policy to update rule on (name or ID)"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'l7rule',
|
||||||
|
metavar='<l7rule_id>',
|
||||||
|
help="l7rule to update"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--compare-type',
|
||||||
|
metavar='<type>',
|
||||||
|
choices=COMPARE_TYPES,
|
||||||
|
help="Compare type for the l7rule {}"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--invert',
|
||||||
|
action='store_true',
|
||||||
|
default=None,
|
||||||
|
help="Invert l7rule"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--value',
|
||||||
|
metavar='<value>',
|
||||||
|
help="Rule value"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--key',
|
||||||
|
metavar='<key>',
|
||||||
|
help="Key for the l7rule"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--type',
|
||||||
|
metavar='<type>',
|
||||||
|
choices=TYPES,
|
||||||
|
help="Type for the l7rule {}"
|
||||||
|
)
|
||||||
|
admin_group = parser.add_mutually_exclusive_group()
|
||||||
|
admin_group.add_argument(
|
||||||
|
'--enable',
|
||||||
|
action='store_true',
|
||||||
|
default=None,
|
||||||
|
help="Enable l7policy (default)"
|
||||||
|
)
|
||||||
|
admin_group.add_argument(
|
||||||
|
'--disable',
|
||||||
|
action='store_true',
|
||||||
|
default=None,
|
||||||
|
help="Disable l7policy"
|
||||||
|
)
|
||||||
|
|
||||||
|
return parser
|
||||||
|
|
||||||
|
def take_action(self, parsed_args):
|
||||||
|
attrs = v2_utils.get_l7rule_attrs(self.app.client_manager, parsed_args)
|
||||||
|
v2_utils.check_l7rule_attrs(attrs)
|
||||||
|
|
||||||
|
l7policy_id = attrs.pop('l7policy_id')
|
||||||
|
l7rule_id = attrs.pop('l7rule_id')
|
||||||
|
|
||||||
|
body = {'rule': attrs}
|
||||||
|
|
||||||
|
self.app.client_manager.load_balancer.l7rule_set(
|
||||||
|
l7rule_id=l7rule_id,
|
||||||
|
l7policy_id=l7policy_id,
|
||||||
|
json=body
|
||||||
|
)
|
|
@ -29,6 +29,7 @@ def get_resource_id(resource, resource_name, name):
|
||||||
The UUID of the found resource
|
The UUID of the found resource
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
|
# Projects can be non-uuid so we need to account for this
|
||||||
if resource_name == 'project':
|
if resource_name == 'project':
|
||||||
if name != 'non-uuid':
|
if name != 'non-uuid':
|
||||||
project_id = identity_common.find_project(
|
project_id = identity_common.find_project(
|
||||||
|
@ -50,6 +51,11 @@ def get_resource_id(resource, resource_name, name):
|
||||||
raise exceptions.CommandError(msg)
|
raise exceptions.CommandError(msg)
|
||||||
else:
|
else:
|
||||||
return names[0].get('id')
|
return names[0].get('id')
|
||||||
|
elif resource_name == 'l7rules':
|
||||||
|
names = [re for re in resource(name['l7policy_id'])['rules']
|
||||||
|
if re.get('id') == name['l7rule_id']]
|
||||||
|
name = name['l7rule_id']
|
||||||
|
return names[0].get('id')
|
||||||
else:
|
else:
|
||||||
names = [re for re in resource()[resource_name]
|
names = [re for re in resource()[resource_name]
|
||||||
if re.get('name') == name or re.get('id') == name]
|
if re.get('name') == name or re.get('id') == name]
|
||||||
|
@ -285,6 +291,52 @@ def check_l7policy_attrs(attrs):
|
||||||
raise exceptions.CommandError(msg)
|
raise exceptions.CommandError(msg)
|
||||||
|
|
||||||
|
|
||||||
|
def get_l7rule_attrs(client_manager, parsed_args):
|
||||||
|
attr_map = {
|
||||||
|
'action': ('action', str.upper),
|
||||||
|
'project': (
|
||||||
|
'project_id',
|
||||||
|
'project',
|
||||||
|
client_manager.identity
|
||||||
|
),
|
||||||
|
'invert': ('invert', lambda x: True),
|
||||||
|
'l7rule': (
|
||||||
|
'l7rule_id',
|
||||||
|
'l7rules',
|
||||||
|
'l7policy', # parent attr
|
||||||
|
client_manager.load_balancer.l7rule_list
|
||||||
|
),
|
||||||
|
'l7policy': (
|
||||||
|
'l7policy_id',
|
||||||
|
'l7policies',
|
||||||
|
client_manager.load_balancer.l7policy_list
|
||||||
|
),
|
||||||
|
'value': ('value', str),
|
||||||
|
'key': ('key', str),
|
||||||
|
'type': ('type', str),
|
||||||
|
'compare_type': ('compare_type', str.upper),
|
||||||
|
'enable': ('admin_state_up', lambda x: True),
|
||||||
|
'disable': ('admin_state_up', lambda x: False)
|
||||||
|
}
|
||||||
|
|
||||||
|
_attrs = vars(parsed_args)
|
||||||
|
attrs = _map_attrs(_attrs, attr_map)
|
||||||
|
|
||||||
|
return attrs
|
||||||
|
|
||||||
|
|
||||||
|
def check_l7rule_attrs(attrs):
|
||||||
|
msg = None
|
||||||
|
if 'type' in attrs.keys() and attrs['type'] == 'COOKIE':
|
||||||
|
if 'key' not in attrs:
|
||||||
|
msg = 'Missing argument: --type COOKIE requires --key <key>'
|
||||||
|
elif 'type' in attrs.keys() and attrs['type'] == 'HEADER':
|
||||||
|
if 'key' not in attrs:
|
||||||
|
msg = 'Missing argument: --type HEADER requires --key <key>'
|
||||||
|
if msg is not None:
|
||||||
|
raise exceptions.CommandError(msg)
|
||||||
|
|
||||||
|
|
||||||
def format_list(data):
|
def format_list(data):
|
||||||
return '\n'.join(i['id'] for i in data)
|
return '\n'.join(i['id'] for i in data)
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@ FAKE_LI = uuidutils.generate_uuid()
|
||||||
FAKE_PO = uuidutils.generate_uuid()
|
FAKE_PO = uuidutils.generate_uuid()
|
||||||
FAKE_ME = uuidutils.generate_uuid()
|
FAKE_ME = uuidutils.generate_uuid()
|
||||||
FAKE_L7PO = uuidutils.generate_uuid()
|
FAKE_L7PO = uuidutils.generate_uuid()
|
||||||
|
FAKE_L7RU = uuidutils.generate_uuid()
|
||||||
|
|
||||||
|
|
||||||
LIST_LB_RESP = {
|
LIST_LB_RESP = {
|
||||||
|
@ -60,6 +61,12 @@ LIST_L7PO_RESP = [
|
||||||
{'name': 'l72'},
|
{'name': 'l72'},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
LIST_L7RU_RESP = {
|
||||||
|
'rules':
|
||||||
|
[{'id': uuidutils.generate_uuid()},
|
||||||
|
{'id': uuidutils.generate_uuid()}]
|
||||||
|
}
|
||||||
|
|
||||||
SINGLE_LB_RESP = {'loadbalancer': {'id': FAKE_LB, 'name': 'lb1'}}
|
SINGLE_LB_RESP = {'loadbalancer': {'id': FAKE_LB, 'name': 'lb1'}}
|
||||||
SINGLE_LB_UPDATE = {"loadbalancer": {"admin_state_up": False}}
|
SINGLE_LB_UPDATE = {"loadbalancer": {"admin_state_up": False}}
|
||||||
|
|
||||||
|
@ -75,6 +82,9 @@ SINGLE_L7PO_UPDATE = {'l7policy': {'admin_state_up': False}}
|
||||||
SINGLE_ME_RESP = {'member': {'id': FAKE_ME, 'name': 'mem1'}}
|
SINGLE_ME_RESP = {'member': {'id': FAKE_ME, 'name': 'mem1'}}
|
||||||
SINGLE_ME_UPDATE = {"member": {"admin_state_up": False}}
|
SINGLE_ME_UPDATE = {"member": {"admin_state_up": False}}
|
||||||
|
|
||||||
|
SINGLE_L7RU_RESP = {'rule': {'id': FAKE_L7RU}}
|
||||||
|
SINGLE_L7RU_UPDATE = {'rule': {'admin_state_up': False}}
|
||||||
|
|
||||||
|
|
||||||
class TestLoadBalancerv2(utils.TestCase):
|
class TestLoadBalancerv2(utils.TestCase):
|
||||||
|
|
||||||
|
@ -332,3 +342,59 @@ class TestLoadBalancer(TestLoadBalancerv2):
|
||||||
)
|
)
|
||||||
ret = self.api.l7policy_delete(FAKE_L7PO)
|
ret = self.api.l7policy_delete(FAKE_L7PO)
|
||||||
self.assertEqual(200, ret.status_code)
|
self.assertEqual(200, ret.status_code)
|
||||||
|
|
||||||
|
def test_list_l7rule_no_options(self):
|
||||||
|
self.requests_mock.register_uri(
|
||||||
|
'GET',
|
||||||
|
FAKE_URL + 'l7policies/' + FAKE_L7PO + '/rules',
|
||||||
|
json=LIST_L7RU_RESP,
|
||||||
|
status_code=200,
|
||||||
|
)
|
||||||
|
ret = self.api.l7rule_list(FAKE_L7PO)
|
||||||
|
self.assertEqual(LIST_L7RU_RESP, ret)
|
||||||
|
|
||||||
|
def test_show_l7rule(self):
|
||||||
|
self.requests_mock.register_uri(
|
||||||
|
'GET',
|
||||||
|
FAKE_URL + 'l7policies/' + FAKE_L7PO + '/rules/' + FAKE_L7RU,
|
||||||
|
json=SINGLE_L7RU_RESP,
|
||||||
|
status_code=200
|
||||||
|
)
|
||||||
|
ret = self.api.l7rule_show(FAKE_L7RU, FAKE_L7PO)
|
||||||
|
self.assertEqual(SINGLE_L7RU_RESP['rule'], ret)
|
||||||
|
|
||||||
|
def test_create_l7rule(self):
|
||||||
|
self.requests_mock.register_uri(
|
||||||
|
'POST',
|
||||||
|
FAKE_URL + 'l7policies/' + FAKE_L7PO + '/rules',
|
||||||
|
json=SINGLE_L7RU_RESP,
|
||||||
|
status_code=200
|
||||||
|
)
|
||||||
|
ret = self.api.l7rule_create(FAKE_L7PO, json=SINGLE_L7RU_RESP)
|
||||||
|
self.assertEqual(SINGLE_L7RU_RESP, ret)
|
||||||
|
|
||||||
|
def test_set_l7rule(self):
|
||||||
|
self.requests_mock.register_uri(
|
||||||
|
'PUT',
|
||||||
|
FAKE_URL + 'l7policies/' + FAKE_L7PO + '/rules/' + FAKE_L7RU,
|
||||||
|
json=SINGLE_L7RU_UPDATE,
|
||||||
|
status_code=200
|
||||||
|
)
|
||||||
|
ret = self.api.l7rule_set(
|
||||||
|
l7rule_id=FAKE_L7RU,
|
||||||
|
l7policy_id=FAKE_L7PO,
|
||||||
|
json=SINGLE_L7RU_UPDATE
|
||||||
|
)
|
||||||
|
self.assertEqual(SINGLE_L7RU_UPDATE, ret)
|
||||||
|
|
||||||
|
def test_delete_l7rule(self):
|
||||||
|
self.requests_mock.register_uri(
|
||||||
|
'DELETE',
|
||||||
|
FAKE_URL + 'l7policies/' + FAKE_L7PO + '/rules/' + FAKE_L7RU,
|
||||||
|
status_code=200
|
||||||
|
)
|
||||||
|
ret = self.api.l7rule_delete(
|
||||||
|
l7rule_id=FAKE_L7RU,
|
||||||
|
l7policy_id=FAKE_L7PO
|
||||||
|
)
|
||||||
|
self.assertEqual(200, ret.status_code)
|
||||||
|
|
|
@ -194,3 +194,33 @@ class FakeL7Policy(object):
|
||||||
loaded=True)
|
loaded=True)
|
||||||
|
|
||||||
return l7po
|
return l7po
|
||||||
|
|
||||||
|
|
||||||
|
class FakeL7Rule(object):
|
||||||
|
"""Fake one or more L7policy."""
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def create_one_l7rule(attrs=None):
|
||||||
|
attrs = attrs or {}
|
||||||
|
|
||||||
|
l7ru_info = {
|
||||||
|
"created_at": "2017-05-04T18:46:35",
|
||||||
|
"compare_type": "ENDS_WITH",
|
||||||
|
"provisioning_status": "ACTIVE",
|
||||||
|
"invert": False,
|
||||||
|
"admin_state_up": True,
|
||||||
|
"value": ".example.com",
|
||||||
|
"key": None,
|
||||||
|
"project_id": str(uuid.uuid4()),
|
||||||
|
"type": "HOST_NAME",
|
||||||
|
"id": str(uuid.uuid4()),
|
||||||
|
"operating_status": "ONLINE"
|
||||||
|
}
|
||||||
|
|
||||||
|
l7ru_info.update(attrs)
|
||||||
|
|
||||||
|
l7ru = fakes.FakeResource(
|
||||||
|
info=copy.deepcopy(l7ru_info),
|
||||||
|
loaded=True)
|
||||||
|
|
||||||
|
return l7ru
|
||||||
|
|
|
@ -0,0 +1,239 @@
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
import copy
|
||||||
|
import mock
|
||||||
|
|
||||||
|
from octaviaclient.osc.v2 import l7rule
|
||||||
|
from octaviaclient.tests.unit.osc.v2 import fakes as ru_fakes
|
||||||
|
|
||||||
|
AUTH_TOKEN = "foobar"
|
||||||
|
AUTH_URL = "http://192.0.2.2"
|
||||||
|
|
||||||
|
|
||||||
|
class TestL7Policy(ru_fakes.TestLoadBalancerv2):
|
||||||
|
|
||||||
|
_l7ru = ru_fakes.FakeL7Rule.create_one_l7rule()
|
||||||
|
_l7po = ru_fakes.FakeL7Policy.create_one_l7policy()
|
||||||
|
|
||||||
|
columns = (
|
||||||
|
'id',
|
||||||
|
'project_id',
|
||||||
|
'provisioning_status',
|
||||||
|
'compare_type',
|
||||||
|
'type',
|
||||||
|
'key',
|
||||||
|
'value',
|
||||||
|
'invert',
|
||||||
|
'admin_state_up')
|
||||||
|
|
||||||
|
datalist = (
|
||||||
|
(
|
||||||
|
_l7ru.id,
|
||||||
|
_l7ru.project_id,
|
||||||
|
_l7ru.provisioning_status,
|
||||||
|
_l7ru.compare_type,
|
||||||
|
_l7ru.type,
|
||||||
|
_l7ru.key,
|
||||||
|
_l7ru.value,
|
||||||
|
_l7ru.invert,
|
||||||
|
_l7ru.admin_state_up
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
info = {'rules': [{
|
||||||
|
"provisioning_status": _l7ru.provisioning_status,
|
||||||
|
"compare_type": _l7ru.compare_type,
|
||||||
|
"type": _l7ru.type,
|
||||||
|
"key": _l7ru.key,
|
||||||
|
"project_id": _l7ru.project_id,
|
||||||
|
"id": _l7ru.id,
|
||||||
|
"value": _l7ru.value,
|
||||||
|
'l7rule_id': _l7ru.id,
|
||||||
|
'l7policy_id': _l7po.id,
|
||||||
|
'admin_state_up': _l7ru.admin_state_up,
|
||||||
|
'invert': _l7ru.invert
|
||||||
|
}]}
|
||||||
|
po_info = {'l7policies': [{
|
||||||
|
"listener_id": _l7po.listener_id,
|
||||||
|
"description": _l7po.description,
|
||||||
|
"admin_state_up": _l7po.admin_state_up,
|
||||||
|
"rules": _l7po.rules,
|
||||||
|
"provisioning_status": _l7po.provisioning_status,
|
||||||
|
"redirect_pool_id": _l7po.redirect_pool_id,
|
||||||
|
"action": _l7po.action,
|
||||||
|
"position": _l7po.position,
|
||||||
|
"project_id": _l7po.project_id,
|
||||||
|
"id": _l7po.id,
|
||||||
|
"name": _l7po.name
|
||||||
|
}]}
|
||||||
|
l7po_info = copy.deepcopy(po_info)
|
||||||
|
l7ru_info = copy.deepcopy(info)
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestL7Policy, self).setUp()
|
||||||
|
self.l7ru_mock = self.app.client_manager.load_balancer.load_balancers
|
||||||
|
self.l7ru_mock.reset_mock()
|
||||||
|
|
||||||
|
self.api_mock = mock.Mock()
|
||||||
|
self.api_mock.l7rule_list.return_value = self.l7ru_info
|
||||||
|
self.api_mock.l7pool_list.return_value = self.l7po_info
|
||||||
|
lb_client = self.app.client_manager
|
||||||
|
lb_client.load_balancer = self.api_mock
|
||||||
|
|
||||||
|
|
||||||
|
class TestL7RuleList(TestL7Policy):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestL7RuleList, self).setUp()
|
||||||
|
self.cmd = l7rule.ListL7Rule(self.app, None)
|
||||||
|
|
||||||
|
@mock.patch('octaviaclient.osc.v2.utils.get_l7rule_attrs')
|
||||||
|
def test_l7rule_list_no_options(self, mock_attrs):
|
||||||
|
mock_attrs.return_value = self.l7ru_info['rules'][0]
|
||||||
|
arglist = [self._l7po.id]
|
||||||
|
verifylist = [('l7policy', self._l7po.id)]
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
self.api_mock.l7rule_list.assert_called_with(l7policy_id=self._l7po.id)
|
||||||
|
self.assertEqual(self.columns, columns)
|
||||||
|
self.assertEqual(self.datalist, tuple(data))
|
||||||
|
|
||||||
|
|
||||||
|
class TestL7RuleDelete(TestL7Policy):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestL7RuleDelete, self).setUp()
|
||||||
|
self.cmd = l7rule.DeleteL7Rule(self.app, None)
|
||||||
|
|
||||||
|
@mock.patch('octaviaclient.osc.v2.utils.get_l7rule_attrs')
|
||||||
|
def test_l7rule_delete(self, mock_attrs):
|
||||||
|
mock_attrs.return_value = self.l7ru_info['rules'][0]
|
||||||
|
arglist = [self._l7po.id, self._l7ru.id]
|
||||||
|
verifylist = [
|
||||||
|
('l7policy', self._l7po.id),
|
||||||
|
('l7rule', self._l7ru.id)
|
||||||
|
]
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
self.api_mock.l7rule_delete.assert_called_with(
|
||||||
|
l7rule_id=self._l7ru.id,
|
||||||
|
l7policy_id=self._l7po.id
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestL7RuleCreate(TestL7Policy):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestL7RuleCreate, self).setUp()
|
||||||
|
self.api_mock = mock.Mock()
|
||||||
|
self.api_mock.l7rule_create.return_value = {
|
||||||
|
'rule': self.l7ru_info}
|
||||||
|
lb_client = self.app.client_manager
|
||||||
|
lb_client.load_balancer = self.api_mock
|
||||||
|
|
||||||
|
self.cmd = l7rule.CreateL7Rule(self.app, None)
|
||||||
|
|
||||||
|
@mock.patch('octaviaclient.osc.v2.utils.get_l7rule_attrs')
|
||||||
|
def test_l7rule_create(self, mock_attrs):
|
||||||
|
mock_attrs.return_value = {
|
||||||
|
'l7policy_id': self._l7po.id,
|
||||||
|
'compare-type': 'ENDS_WITH',
|
||||||
|
'value': '.example.com',
|
||||||
|
'type': 'HOST_NAME'
|
||||||
|
}
|
||||||
|
arglist = [self._l7po.id,
|
||||||
|
'--compare-type', 'ENDS_WITH',
|
||||||
|
'--value', '.example.com',
|
||||||
|
'--type', 'HOST_NAME']
|
||||||
|
|
||||||
|
verifylist = [
|
||||||
|
('l7policy', self._l7po.id),
|
||||||
|
('compare_type', 'ENDS_WITH'),
|
||||||
|
('value', '.example.com'),
|
||||||
|
('type', 'HOST_NAME')
|
||||||
|
]
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
self.api_mock.l7rule_create.assert_called_with(
|
||||||
|
l7policy_id=self._l7po.id,
|
||||||
|
json={'rule': {
|
||||||
|
'compare-type': 'ENDS_WITH',
|
||||||
|
'value': '.example.com',
|
||||||
|
'type': 'HOST_NAME'}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
class TestL7RuleShow(TestL7Policy):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestL7RuleShow, self).setUp()
|
||||||
|
self.api_mock = mock.Mock()
|
||||||
|
self.api_mock.l7policy_list.return_value = self.l7po_info
|
||||||
|
self.api_mock.l7rule_list.return_value = self.l7ru_info
|
||||||
|
self.api_mock.l7rule_show.return_value = {
|
||||||
|
'rule': self.l7ru_info['rules'][0]}
|
||||||
|
lb_client = self.app.client_manager
|
||||||
|
lb_client.load_balancer = self.api_mock
|
||||||
|
|
||||||
|
self.cmd = l7rule.ShowL7Rule(self.app, None)
|
||||||
|
|
||||||
|
def test_l7rule_show(self):
|
||||||
|
arglist = [self._l7po.id, self._l7ru.id]
|
||||||
|
verifylist = [
|
||||||
|
('l7policy', self._l7po.id),
|
||||||
|
('l7rule', self._l7ru.id)
|
||||||
|
]
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
self.api_mock.l7rule_show.assert_called_with(
|
||||||
|
l7rule_id=self._l7ru.id,
|
||||||
|
l7policy_id=self._l7po.id
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestL7RuleSet(TestL7Policy):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestL7RuleSet, self).setUp()
|
||||||
|
self.cmd = l7rule.SetL7Rule(self.app, None)
|
||||||
|
|
||||||
|
@mock.patch('octaviaclient.osc.v2.utils.get_l7rule_attrs')
|
||||||
|
def test_l7rule_set(self, mock_attrs):
|
||||||
|
mock_attrs.return_value = {
|
||||||
|
'admin_state_up': False,
|
||||||
|
'l7policy_id': self._l7po.id,
|
||||||
|
'l7rule_id': self._l7ru.id
|
||||||
|
}
|
||||||
|
arglist = [
|
||||||
|
self._l7po.id,
|
||||||
|
self._l7ru.id,
|
||||||
|
'--disable'
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('l7policy', self._l7po.id),
|
||||||
|
('l7rule', self._l7ru.id),
|
||||||
|
('disable', True)
|
||||||
|
]
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
self.api_mock.l7rule_set.assert_called_with(
|
||||||
|
l7rule_id=self._l7ru.id,
|
||||||
|
l7policy_id=self._l7po.id,
|
||||||
|
json={'rule': {'admin_state_up': False}})
|
|
@ -52,6 +52,11 @@ openstack.load_balancer.v2 =
|
||||||
loadbalancer_l7policy_show = octaviaclient.osc.v2.l7policy:ShowL7Policy
|
loadbalancer_l7policy_show = octaviaclient.osc.v2.l7policy:ShowL7Policy
|
||||||
loadbalancer_l7policy_delete = octaviaclient.osc.v2.l7policy:DeleteL7Policy
|
loadbalancer_l7policy_delete = octaviaclient.osc.v2.l7policy:DeleteL7Policy
|
||||||
loadbalancer_l7policy_set = octaviaclient.osc.v2.l7policy:SetL7Policy
|
loadbalancer_l7policy_set = octaviaclient.osc.v2.l7policy:SetL7Policy
|
||||||
|
loadbalancer_l7rule_create = octaviaclient.osc.v2.l7rule:CreateL7Rule
|
||||||
|
loadbalancer_l7rule_list = octaviaclient.osc.v2.l7rule:ListL7Rule
|
||||||
|
loadbalancer_l7rule_show = octaviaclient.osc.v2.l7rule:ShowL7Rule
|
||||||
|
loadbalancer_l7rule_delete = octaviaclient.osc.v2.l7rule:DeleteL7Rule
|
||||||
|
loadbalancer_l7rule_set = octaviaclient.osc.v2.l7rule:SetL7Rule
|
||||||
|
|
||||||
[build_sphinx]
|
[build_sphinx]
|
||||||
source-dir = doc/source
|
source-dir = doc/source
|
||||||
|
|
Loading…
Reference in New Issue