Support REDIRECT_PREFIX action for L7Policy
Currently, Octavia only support three actions for L7Policy, in this patch we will implement new action for L7Policy. Story: 2003700 Change-Id: Ie99591ede097b566294ebdb673c460442dd6d942
This commit is contained in:
parent
7fa83ef8e6
commit
62192dba3a
@ -523,6 +523,20 @@ l7policy-redirect-pool_id-optional:
|
|||||||
in: body
|
in: body
|
||||||
required: false
|
required: false
|
||||||
type: uuid
|
type: uuid
|
||||||
|
l7policy-redirect-prefix:
|
||||||
|
description: |
|
||||||
|
Requests matching this policy will be redirected to this Prefix URL.
|
||||||
|
Only valid if ``action`` is ``REDIRECT_PREFIX``.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
l7policy-redirect-prefix-optional:
|
||||||
|
description: |
|
||||||
|
Requests matching this policy will be redirected to this Prefix URL.
|
||||||
|
Only valid if ``action`` is ``REDIRECT_PREFIX``.
|
||||||
|
in: body
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
l7policy-redirect-url:
|
l7policy-redirect-url:
|
||||||
description: |
|
description: |
|
||||||
Requests matching this policy will be redirected to this URL.
|
Requests matching this policy will be redirected to this URL.
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
"provisioning_status": "ACTIVE",
|
"provisioning_status": "ACTIVE",
|
||||||
"updated_at": "2017-06-24T23:30:05",
|
"updated_at": "2017-06-24T23:30:05",
|
||||||
"redirect_pool_id": null,
|
"redirect_pool_id": null,
|
||||||
|
"redirect_prefix": null,
|
||||||
"redirect_url": "http://www.example.com",
|
"redirect_url": "http://www.example.com",
|
||||||
"action": "REDIRECT_TO_URL",
|
"action": "REDIRECT_TO_URL",
|
||||||
"position": 1,
|
"position": 1,
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
"provisioning_status": "PENDING_CREATE",
|
"provisioning_status": "PENDING_CREATE",
|
||||||
"updated_at": "2017-06-24T23:30:05",
|
"updated_at": "2017-06-24T23:30:05",
|
||||||
"redirect_pool_id": null,
|
"redirect_pool_id": null,
|
||||||
|
"redirect_prefix": null,
|
||||||
"redirect_url": "http://www.example.com",
|
"redirect_url": "http://www.example.com",
|
||||||
"action": "REDIRECT_TO_URL",
|
"action": "REDIRECT_TO_URL",
|
||||||
"position": 1,
|
"position": 1,
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
"provisioning_status": "ACTIVE",
|
"provisioning_status": "ACTIVE",
|
||||||
"updated_at": "2017-06-24T23:30:05",
|
"updated_at": "2017-06-24T23:30:05",
|
||||||
"redirect_pool_id": null,
|
"redirect_pool_id": null,
|
||||||
|
"redirect_prefix": null,
|
||||||
"redirect_url": "http://www.example.com",
|
"redirect_url": "http://www.example.com",
|
||||||
"action": "REDIRECT_TO_URL",
|
"action": "REDIRECT_TO_URL",
|
||||||
"position": 1,
|
"position": 1,
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
"provisioning_status": "PENDING_UPDATE",
|
"provisioning_status": "PENDING_UPDATE",
|
||||||
"updated_at": "2017-06-24T23:30:05",
|
"updated_at": "2017-06-24T23:30:05",
|
||||||
"redirect_pool_id": null,
|
"redirect_pool_id": null,
|
||||||
|
"redirect_prefix": null,
|
||||||
"redirect_url": "http://www.example.com",
|
"redirect_url": "http://www.example.com",
|
||||||
"action": "REDIRECT_TO_URL",
|
"action": "REDIRECT_TO_URL",
|
||||||
"position": 1,
|
"position": 1,
|
||||||
|
@ -57,6 +57,7 @@ Response Parameters
|
|||||||
- project_id: project_id
|
- project_id: project_id
|
||||||
- provisioning_status: provisioning_status
|
- provisioning_status: provisioning_status
|
||||||
- redirect_pool_id: l7policy-redirect-pool_id
|
- redirect_pool_id: l7policy-redirect-pool_id
|
||||||
|
- redirect_prefix: l7policy-redirect-prefix
|
||||||
- redirect_url: l7policy-redirect-url
|
- redirect_url: l7policy-redirect-url
|
||||||
- rules: l7policy-rule-ids
|
- rules: l7policy-rule-ids
|
||||||
- updated_at: updated_at
|
- updated_at: updated_at
|
||||||
@ -139,6 +140,7 @@ Request
|
|||||||
- position: l7policy-position-optional
|
- position: l7policy-position-optional
|
||||||
- project_id: project_id-optional
|
- project_id: project_id-optional
|
||||||
- redirect_pool_id: l7policy-redirect-pool_id-optional
|
- redirect_pool_id: l7policy-redirect-pool_id-optional
|
||||||
|
- redirect_prefix: l7policy-redirect-prefix-optional
|
||||||
- redirect_url: l7policy-redirect-url-optional
|
- redirect_url: l7policy-redirect-url-optional
|
||||||
|
|
||||||
Request Example
|
Request Example
|
||||||
@ -170,6 +172,7 @@ Response Parameters
|
|||||||
- project_id: project_id
|
- project_id: project_id
|
||||||
- provisioning_status: provisioning_status
|
- provisioning_status: provisioning_status
|
||||||
- redirect_pool_id: l7policy-redirect-pool_id
|
- redirect_pool_id: l7policy-redirect-pool_id
|
||||||
|
- redirect_prefix: l7policy-redirect-prefix
|
||||||
- redirect_url: l7policy-redirect-url
|
- redirect_url: l7policy-redirect-url
|
||||||
- rules: l7policy-rule-ids
|
- rules: l7policy-rule-ids
|
||||||
- updated_at: updated_at
|
- updated_at: updated_at
|
||||||
@ -235,6 +238,7 @@ Response Parameters
|
|||||||
- project_id: project_id
|
- project_id: project_id
|
||||||
- provisioning_status: provisioning_status
|
- provisioning_status: provisioning_status
|
||||||
- redirect_pool_id: l7policy-redirect-pool_id
|
- redirect_pool_id: l7policy-redirect-pool_id
|
||||||
|
- redirect_prefix: l7policy-redirect-prefix
|
||||||
- redirect_url: l7policy-redirect-url
|
- redirect_url: l7policy-redirect-url
|
||||||
- rules: l7policy-rule-ids
|
- rules: l7policy-rule-ids
|
||||||
- updated_at: updated_at
|
- updated_at: updated_at
|
||||||
@ -290,6 +294,7 @@ Request
|
|||||||
- name: name-optional
|
- name: name-optional
|
||||||
- position: l7policy-position-optional
|
- position: l7policy-position-optional
|
||||||
- redirect_pool_id: l7policy-redirect-pool_id-optional
|
- redirect_pool_id: l7policy-redirect-pool_id-optional
|
||||||
|
- redirect_prefix: l7policy-redirect-prefix-optional
|
||||||
- redirect_url: l7policy-redirect-url-optional
|
- redirect_url: l7policy-redirect-url-optional
|
||||||
|
|
||||||
Request Example
|
Request Example
|
||||||
@ -321,6 +326,7 @@ Response Parameters
|
|||||||
- project_id: project_id
|
- project_id: project_id
|
||||||
- provisioning_status: provisioning_status
|
- provisioning_status: provisioning_status
|
||||||
- redirect_pool_id: l7policy-redirect-pool_id
|
- redirect_pool_id: l7policy-redirect-pool_id
|
||||||
|
- redirect_prefix: l7policy-redirect-prefix
|
||||||
- redirect_url: l7policy-redirect-url
|
- redirect_url: l7policy-redirect-url
|
||||||
- rules: l7policy-rule-ids
|
- rules: l7policy-rule-ids
|
||||||
- updated_at: updated_at
|
- updated_at: updated_at
|
||||||
|
@ -60,7 +60,7 @@ Redirect *http://www.example.com/* to *https://www.example.com/*
|
|||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
openstack loadbalancer listener create --name http_listener --protocol HTTP --protocol-port 80 lb1
|
openstack loadbalancer listener create --name http_listener --protocol HTTP --protocol-port 80 lb1
|
||||||
openstack loadbalancer l7policy create --action REDIRECT_TO_URL --redirect-url https://www.example.com/ --name policy1 http_listener
|
openstack loadbalancer l7policy create --action REDIRECT_PREFIX --redirect-prefix https://www.example.com/ --name policy1 http_listener
|
||||||
openstack loadbalancer l7rule create --compare-type STARTS_WITH --type PATH --value / policy1
|
openstack loadbalancer l7rule create --compare-type STARTS_WITH --type PATH --value / policy1
|
||||||
|
|
||||||
|
|
||||||
|
@ -220,7 +220,7 @@ class L7Policy(BaseDataModel):
|
|||||||
def __init__(self, action=Unset, admin_state_up=Unset, description=Unset,
|
def __init__(self, action=Unset, admin_state_up=Unset, description=Unset,
|
||||||
l7policy_id=Unset, listener_id=Unset, name=Unset,
|
l7policy_id=Unset, listener_id=Unset, name=Unset,
|
||||||
position=Unset, redirect_pool_id=Unset, redirect_url=Unset,
|
position=Unset, redirect_pool_id=Unset, redirect_url=Unset,
|
||||||
rules=Unset):
|
rules=Unset, redirect_prefix=Unset):
|
||||||
|
|
||||||
self.action = action
|
self.action = action
|
||||||
self.admin_state_up = admin_state_up
|
self.admin_state_up = admin_state_up
|
||||||
@ -232,6 +232,7 @@ class L7Policy(BaseDataModel):
|
|||||||
self.redirect_pool_id = redirect_pool_id
|
self.redirect_pool_id = redirect_pool_id
|
||||||
self.redirect_url = redirect_url
|
self.redirect_url = redirect_url
|
||||||
self.rules = rules
|
self.rules = rules
|
||||||
|
self.redirect_prefix = redirect_prefix
|
||||||
|
|
||||||
|
|
||||||
class L7Rule(BaseDataModel):
|
class L7Rule(BaseDataModel):
|
||||||
|
@ -29,6 +29,7 @@ class L7PolicyResponse(base.BaseType):
|
|||||||
action = wtypes.wsattr(wtypes.StringType())
|
action = wtypes.wsattr(wtypes.StringType())
|
||||||
redirect_pool_id = wtypes.wsattr(wtypes.UuidType())
|
redirect_pool_id = wtypes.wsattr(wtypes.UuidType())
|
||||||
redirect_url = wtypes.wsattr(wtypes.StringType())
|
redirect_url = wtypes.wsattr(wtypes.StringType())
|
||||||
|
redirect_prefix = wtypes.wsattr(wtypes.StringType())
|
||||||
position = wtypes.wsattr(wtypes.IntegerType())
|
position = wtypes.wsattr(wtypes.IntegerType())
|
||||||
l7rules = wtypes.wsattr([l7rule.L7RuleResponse])
|
l7rules = wtypes.wsattr([l7rule.L7RuleResponse])
|
||||||
redirect_pool = wtypes.wsattr(pool.PoolResponse)
|
redirect_pool = wtypes.wsattr(pool.PoolResponse)
|
||||||
@ -66,6 +67,7 @@ class L7PolicyPOST(base.BaseType):
|
|||||||
mandatory=True)
|
mandatory=True)
|
||||||
redirect_pool_id = wtypes.wsattr(wtypes.UuidType())
|
redirect_pool_id = wtypes.wsattr(wtypes.UuidType())
|
||||||
redirect_url = wtypes.wsattr(base.URLType())
|
redirect_url = wtypes.wsattr(base.URLType())
|
||||||
|
redirect_prefix = wtypes.wsattr(base.URLType())
|
||||||
position = wtypes.wsattr(wtypes.IntegerType(),
|
position = wtypes.wsattr(wtypes.IntegerType(),
|
||||||
default=constants.MAX_POLICY_POSITION)
|
default=constants.MAX_POLICY_POSITION)
|
||||||
redirect_pool = wtypes.wsattr(pool.PoolPOST)
|
redirect_pool = wtypes.wsattr(pool.PoolPOST)
|
||||||
@ -81,4 +83,5 @@ class L7PolicyPUT(base.BaseType):
|
|||||||
wtypes.Enum(str, *constants.SUPPORTED_L7POLICY_ACTIONS))
|
wtypes.Enum(str, *constants.SUPPORTED_L7POLICY_ACTIONS))
|
||||||
redirect_pool_id = wtypes.wsattr(wtypes.UuidType())
|
redirect_pool_id = wtypes.wsattr(wtypes.UuidType())
|
||||||
redirect_url = wtypes.wsattr(base.URLType())
|
redirect_url = wtypes.wsattr(base.URLType())
|
||||||
|
redirect_prefix = wtypes.wsattr(base.URLType())
|
||||||
position = wtypes.wsattr(wtypes.IntegerType())
|
position = wtypes.wsattr(wtypes.IntegerType())
|
||||||
|
@ -38,6 +38,7 @@ class L7PolicyResponse(BaseL7PolicyType):
|
|||||||
listener_id = wtypes.wsattr(wtypes.UuidType())
|
listener_id = wtypes.wsattr(wtypes.UuidType())
|
||||||
redirect_pool_id = wtypes.wsattr(wtypes.UuidType())
|
redirect_pool_id = wtypes.wsattr(wtypes.UuidType())
|
||||||
redirect_url = wtypes.wsattr(wtypes.StringType())
|
redirect_url = wtypes.wsattr(wtypes.StringType())
|
||||||
|
redirect_prefix = wtypes.wsattr(wtypes.StringType())
|
||||||
position = wtypes.wsattr(wtypes.IntegerType())
|
position = wtypes.wsattr(wtypes.IntegerType())
|
||||||
rules = wtypes.wsattr([types.IdOnlyType])
|
rules = wtypes.wsattr([types.IdOnlyType])
|
||||||
created_at = wtypes.wsattr(wtypes.datetime.datetime)
|
created_at = wtypes.wsattr(wtypes.datetime.datetime)
|
||||||
@ -86,6 +87,7 @@ class L7PolicyPOST(BaseL7PolicyType):
|
|||||||
mandatory=True)
|
mandatory=True)
|
||||||
redirect_pool_id = wtypes.wsattr(wtypes.UuidType())
|
redirect_pool_id = wtypes.wsattr(wtypes.UuidType())
|
||||||
redirect_url = wtypes.wsattr(types.URLType())
|
redirect_url = wtypes.wsattr(types.URLType())
|
||||||
|
redirect_prefix = wtypes.wsattr(types.URLType())
|
||||||
position = wtypes.wsattr(wtypes.IntegerType(
|
position = wtypes.wsattr(wtypes.IntegerType(
|
||||||
minimum=constants.MIN_POLICY_POSITION,
|
minimum=constants.MIN_POLICY_POSITION,
|
||||||
maximum=constants.MAX_POLICY_POSITION),
|
maximum=constants.MAX_POLICY_POSITION),
|
||||||
@ -107,6 +109,7 @@ class L7PolicyPUT(BaseL7PolicyType):
|
|||||||
wtypes.Enum(str, *constants.SUPPORTED_L7POLICY_ACTIONS))
|
wtypes.Enum(str, *constants.SUPPORTED_L7POLICY_ACTIONS))
|
||||||
redirect_pool_id = wtypes.wsattr(wtypes.UuidType())
|
redirect_pool_id = wtypes.wsattr(wtypes.UuidType())
|
||||||
redirect_url = wtypes.wsattr(types.URLType())
|
redirect_url = wtypes.wsattr(types.URLType())
|
||||||
|
redirect_prefix = wtypes.wsattr(types.URLType())
|
||||||
position = wtypes.wsattr(wtypes.IntegerType(
|
position = wtypes.wsattr(wtypes.IntegerType(
|
||||||
minimum=constants.MIN_POLICY_POSITION,
|
minimum=constants.MIN_POLICY_POSITION,
|
||||||
maximum=constants.MAX_POLICY_POSITION))
|
maximum=constants.MAX_POLICY_POSITION))
|
||||||
@ -126,6 +129,7 @@ class L7PolicySingleCreate(BaseL7PolicyType):
|
|||||||
mandatory=True)
|
mandatory=True)
|
||||||
redirect_pool = wtypes.wsattr(pool.PoolSingleCreate)
|
redirect_pool = wtypes.wsattr(pool.PoolSingleCreate)
|
||||||
redirect_url = wtypes.wsattr(types.URLType())
|
redirect_url = wtypes.wsattr(types.URLType())
|
||||||
|
redirect_prefix = wtypes.wsattr(types.URLType())
|
||||||
position = wtypes.wsattr(wtypes.IntegerType(
|
position = wtypes.wsattr(wtypes.IntegerType(
|
||||||
minimum=constants.MIN_POLICY_POSITION,
|
minimum=constants.MIN_POLICY_POSITION,
|
||||||
maximum=constants.MAX_POLICY_POSITION),
|
maximum=constants.MAX_POLICY_POSITION),
|
||||||
|
@ -161,9 +161,11 @@ SUPPORTED_L7RULE_COMPARE_TYPES = (L7RULE_COMPARE_TYPE_REGEX,
|
|||||||
L7POLICY_ACTION_REJECT = 'REJECT'
|
L7POLICY_ACTION_REJECT = 'REJECT'
|
||||||
L7POLICY_ACTION_REDIRECT_TO_URL = 'REDIRECT_TO_URL'
|
L7POLICY_ACTION_REDIRECT_TO_URL = 'REDIRECT_TO_URL'
|
||||||
L7POLICY_ACTION_REDIRECT_TO_POOL = 'REDIRECT_TO_POOL'
|
L7POLICY_ACTION_REDIRECT_TO_POOL = 'REDIRECT_TO_POOL'
|
||||||
|
L7POLICY_ACTION_REDIRECT_PREFIX = 'REDIRECT_PREFIX'
|
||||||
SUPPORTED_L7POLICY_ACTIONS = (L7POLICY_ACTION_REJECT,
|
SUPPORTED_L7POLICY_ACTIONS = (L7POLICY_ACTION_REJECT,
|
||||||
L7POLICY_ACTION_REDIRECT_TO_URL,
|
L7POLICY_ACTION_REDIRECT_TO_URL,
|
||||||
L7POLICY_ACTION_REDIRECT_TO_POOL)
|
L7POLICY_ACTION_REDIRECT_TO_POOL,
|
||||||
|
L7POLICY_ACTION_REDIRECT_PREFIX)
|
||||||
|
|
||||||
MIN_POLICY_POSITION = 1
|
MIN_POLICY_POSITION = 1
|
||||||
# Largest a 32-bit integer can be, which is a limitation
|
# Largest a 32-bit integer can be, which is a limitation
|
||||||
|
@ -592,7 +592,7 @@ class L7Policy(BaseDataModel):
|
|||||||
position=None, listener=None, redirect_pool=None,
|
position=None, listener=None, redirect_pool=None,
|
||||||
enabled=None, l7rules=None, provisioning_status=None,
|
enabled=None, l7rules=None, provisioning_status=None,
|
||||||
operating_status=None, project_id=None, created_at=None,
|
operating_status=None, project_id=None, created_at=None,
|
||||||
updated_at=None):
|
updated_at=None, redirect_prefix=None):
|
||||||
self.id = id
|
self.id = id
|
||||||
self.name = name
|
self.name = name
|
||||||
self.description = description
|
self.description = description
|
||||||
@ -610,6 +610,7 @@ class L7Policy(BaseDataModel):
|
|||||||
self.project_id = project_id
|
self.project_id = project_id
|
||||||
self.created_at = created_at
|
self.created_at = created_at
|
||||||
self.updated_at = updated_at
|
self.updated_at = updated_at
|
||||||
|
self.redirect_prefix = redirect_prefix
|
||||||
|
|
||||||
def _conditionally_remove_pool_links(self, pool):
|
def _conditionally_remove_pool_links(self, pool):
|
||||||
"""Removes links to the given pool from parent objects.
|
"""Removes links to the given pool from parent objects.
|
||||||
|
@ -308,6 +308,7 @@ class JinjaTemplater(object):
|
|||||||
'id': l7policy.id,
|
'id': l7policy.id,
|
||||||
'action': l7policy.action,
|
'action': l7policy.action,
|
||||||
'redirect_url': l7policy.redirect_url,
|
'redirect_url': l7policy.redirect_url,
|
||||||
|
'redirect_prefix': l7policy.redirect_prefix,
|
||||||
'enabled': l7policy.enabled
|
'enabled': l7policy.enabled
|
||||||
}
|
}
|
||||||
if l7policy.redirect_pool:
|
if l7policy.redirect_pool:
|
||||||
|
@ -106,6 +106,9 @@ bind {{ lb_vip_address }}:{{ listener.protocol_port }} {{
|
|||||||
{% elif l7policy.action == constants.L7POLICY_ACTION_REDIRECT_TO_POOL and l7policy.redirect_pool.enabled %}
|
{% elif l7policy.action == constants.L7POLICY_ACTION_REDIRECT_TO_POOL and l7policy.redirect_pool.enabled %}
|
||||||
use_backend {{ l7policy.redirect_pool.id }} if{{ l7rule_list_macro(
|
use_backend {{ l7policy.redirect_pool.id }} if{{ l7rule_list_macro(
|
||||||
l7policy) }}
|
l7policy) }}
|
||||||
|
{% elif l7policy.action == constants.L7POLICY_ACTION_REDIRECT_PREFIX %}
|
||||||
|
redirect prefix {{ l7policy.redirect_prefix }} if{{ l7rule_list_macro(
|
||||||
|
l7policy) }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
|
|
||||||
|
@ -194,29 +194,43 @@ def sanitize_l7policy_api_args(l7policy, create=False):
|
|||||||
raise exceptions.InvalidL7PolicyArgs(
|
raise exceptions.InvalidL7PolicyArgs(
|
||||||
msg='redirect_pool_id or redirect_pool must not be None')
|
msg='redirect_pool_id or redirect_pool must not be None')
|
||||||
l7policy.update({'redirect_url': None})
|
l7policy.update({'redirect_url': None})
|
||||||
|
elif l7policy['action'] == constants.L7POLICY_ACTION_REDIRECT_PREFIX:
|
||||||
|
if not l7policy.get('redirect_prefix'):
|
||||||
|
raise exceptions.InvalidL7PolicyArgs(
|
||||||
|
msg='redirect_prefix must not be None')
|
||||||
else:
|
else:
|
||||||
raise exceptions.InvalidL7PolicyAction(
|
raise exceptions.InvalidL7PolicyAction(
|
||||||
action=l7policy['action'])
|
action=l7policy['action'])
|
||||||
if ((l7policy.get('redirect_pool_id') or
|
if ((l7policy.get('redirect_pool_id') or l7policy.get('redirect_pool')) and
|
||||||
l7policy.get('redirect_pool')) and l7policy.get('redirect_url')):
|
(l7policy.get('redirect_url') or l7policy.get('redirect_prefix'))):
|
||||||
raise exceptions.InvalidL7PolicyArgs(
|
raise exceptions.InvalidL7PolicyArgs(
|
||||||
msg='Cannot specify redirect_pool_id and redirect_url '
|
msg='Cannot specify redirect_pool_id and redirect_url or '
|
||||||
'at the same time')
|
'redirect_prefix at the same time')
|
||||||
if l7policy.get('redirect_pool_id'):
|
if l7policy.get('redirect_pool_id'):
|
||||||
l7policy.update({
|
l7policy.update({
|
||||||
'action': constants.L7POLICY_ACTION_REDIRECT_TO_POOL})
|
'action': constants.L7POLICY_ACTION_REDIRECT_TO_POOL})
|
||||||
l7policy.update({'redirect_url': None})
|
l7policy.update({'redirect_url': None})
|
||||||
l7policy.pop('redirect_pool', None)
|
l7policy.pop('redirect_pool', None)
|
||||||
|
l7policy.update({'redirect_prefix': None})
|
||||||
if l7policy.get('redirect_pool'):
|
if l7policy.get('redirect_pool'):
|
||||||
l7policy.update({
|
l7policy.update({
|
||||||
'action': constants.L7POLICY_ACTION_REDIRECT_TO_POOL})
|
'action': constants.L7POLICY_ACTION_REDIRECT_TO_POOL})
|
||||||
l7policy.update({'redirect_url': None})
|
l7policy.update({'redirect_url': None})
|
||||||
l7policy.pop('redirect_pool_id', None)
|
l7policy.pop('redirect_pool_id', None)
|
||||||
|
l7policy.update({'redirect_prefix': None})
|
||||||
if l7policy.get('redirect_url'):
|
if l7policy.get('redirect_url'):
|
||||||
url(l7policy['redirect_url'])
|
url(l7policy['redirect_url'])
|
||||||
l7policy.update({
|
l7policy.update({
|
||||||
'action': constants.L7POLICY_ACTION_REDIRECT_TO_URL})
|
'action': constants.L7POLICY_ACTION_REDIRECT_TO_URL})
|
||||||
l7policy.update({'redirect_pool_id': None})
|
l7policy.update({'redirect_pool_id': None})
|
||||||
|
l7policy.update({'redirect_prefix': None})
|
||||||
|
l7policy.pop('redirect_pool', None)
|
||||||
|
if l7policy.get('redirect_prefix'):
|
||||||
|
url(l7policy['redirect_prefix'])
|
||||||
|
l7policy.update({
|
||||||
|
'action': constants.L7POLICY_ACTION_REDIRECT_PREFIX})
|
||||||
|
l7policy.update({'redirect_pool_id': None})
|
||||||
|
l7policy.update({'redirect_url': None})
|
||||||
l7policy.pop('redirect_pool', None)
|
l7policy.pop('redirect_pool', None)
|
||||||
|
|
||||||
# If we are creating, we need an action at this point
|
# If we are creating, we need an action at this point
|
||||||
|
@ -0,0 +1,49 @@
|
|||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
"""add l7policy action redirect prefix
|
||||||
|
|
||||||
|
Revision ID: 55874a4ceed6
|
||||||
|
Revises: 76aacf2e176c
|
||||||
|
Create Date: 2018-09-09 20:35:38.780054
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from sqlalchemy import sql
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = '55874a4ceed6'
|
||||||
|
down_revision = '76aacf2e176c'
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
# Add collumn redirect_prefix
|
||||||
|
op.add_column(
|
||||||
|
u'l7policy',
|
||||||
|
sa.Column(u'redirect_prefix', sa.String(255), nullable=True)
|
||||||
|
)
|
||||||
|
insert_table = sql.table(
|
||||||
|
u'l7policy_action',
|
||||||
|
sql.column(u'name', sa.String),
|
||||||
|
sql.column(u'description', sa.String)
|
||||||
|
)
|
||||||
|
|
||||||
|
op.bulk_insert(
|
||||||
|
insert_table,
|
||||||
|
[
|
||||||
|
{'name': 'REDIRECT_PREFIX'}
|
||||||
|
]
|
||||||
|
)
|
@ -621,6 +621,9 @@ class L7Policy(base_models.BASE, base_models.IdMixin, base_models.ProjectMixin,
|
|||||||
redirect_url = sa.Column(
|
redirect_url = sa.Column(
|
||||||
sa.String(255),
|
sa.String(255),
|
||||||
nullable=True)
|
nullable=True)
|
||||||
|
redirect_prefix = sa.Column(
|
||||||
|
sa.String(255),
|
||||||
|
nullable=True)
|
||||||
position = sa.Column(sa.Integer, nullable=False)
|
position = sa.Column(sa.Integer, nullable=False)
|
||||||
enabled = sa.Column(sa.Boolean(), nullable=False)
|
enabled = sa.Column(sa.Boolean(), nullable=False)
|
||||||
listener = orm.relationship("Listener", uselist=False,
|
listener = orm.relationship("Listener", uselist=False,
|
||||||
|
@ -1589,12 +1589,19 @@ class L7PolicyRepository(BaseRepository):
|
|||||||
if l7policy.action == consts.L7POLICY_ACTION_REJECT:
|
if l7policy.action == consts.L7POLICY_ACTION_REJECT:
|
||||||
model_kwargs.update(redirect_url=None)
|
model_kwargs.update(redirect_url=None)
|
||||||
model_kwargs.update(redirect_pool_id=None)
|
model_kwargs.update(redirect_pool_id=None)
|
||||||
|
model_kwargs.update(redirect_prefix=None)
|
||||||
elif (l7policy.action ==
|
elif (l7policy.action ==
|
||||||
consts.L7POLICY_ACTION_REDIRECT_TO_URL):
|
consts.L7POLICY_ACTION_REDIRECT_TO_URL):
|
||||||
model_kwargs.update(redirect_pool_id=None)
|
model_kwargs.update(redirect_pool_id=None)
|
||||||
|
model_kwargs.update(redirect_prefix=None)
|
||||||
elif (l7policy.action ==
|
elif (l7policy.action ==
|
||||||
consts.L7POLICY_ACTION_REDIRECT_TO_POOL):
|
consts.L7POLICY_ACTION_REDIRECT_TO_POOL):
|
||||||
model_kwargs.update(redirect_url=None)
|
model_kwargs.update(redirect_url=None)
|
||||||
|
model_kwargs.update(redirect_prefix=None)
|
||||||
|
elif (l7policy.action ==
|
||||||
|
consts.L7POLICY_ACTION_REDIRECT_PREFIX):
|
||||||
|
model_kwargs.update(redirect_url=None)
|
||||||
|
model_kwargs.update(redirect_pool_id=None)
|
||||||
|
|
||||||
l7policy_db.update(model_kwargs)
|
l7policy_db.update(model_kwargs)
|
||||||
|
|
||||||
|
@ -684,6 +684,7 @@ class TestLoadBalancerGraph(base.BaseAPITest):
|
|||||||
'name': None,
|
'name': None,
|
||||||
'description': None,
|
'description': None,
|
||||||
'redirect_url': None,
|
'redirect_url': None,
|
||||||
|
'redirect_prefix': None,
|
||||||
'l7rules': []
|
'l7rules': []
|
||||||
}
|
}
|
||||||
expected_l7policy.update(create_l7policy)
|
expected_l7policy.update(create_l7policy)
|
||||||
|
@ -2256,6 +2256,7 @@ class TestLoadBalancerGraph(base.BaseAPITest):
|
|||||||
'name': '',
|
'name': '',
|
||||||
'description': '',
|
'description': '',
|
||||||
'redirect_url': None,
|
'redirect_url': None,
|
||||||
|
'redirect_prefix': None,
|
||||||
'rules': [],
|
'rules': [],
|
||||||
'project_id': self._project_id,
|
'project_id': self._project_id,
|
||||||
'provisioning_status': constants.PENDING_CREATE,
|
'provisioning_status': constants.PENDING_CREATE,
|
||||||
|
@ -301,6 +301,7 @@ class SampleDriverDataModels(object):
|
|||||||
'action': 'go',
|
'action': 'go',
|
||||||
'redirect_pool_id': self.pool1_id,
|
'redirect_pool_id': self.pool1_id,
|
||||||
'redirect_url': '/index.html',
|
'redirect_url': '/index.html',
|
||||||
|
'redirect_prefix': 'https://example.com/',
|
||||||
'position': 1,
|
'position': 1,
|
||||||
'listener': None,
|
'listener': None,
|
||||||
'redirect_pool': None,
|
'redirect_pool': None,
|
||||||
@ -323,16 +324,19 @@ class SampleDriverDataModels(object):
|
|||||||
|
|
||||||
self.db_l7policies = [self.db_l7policy1, self.db_l7policy2]
|
self.db_l7policies = [self.db_l7policy1, self.db_l7policy2]
|
||||||
|
|
||||||
self.provider_l7policy1_dict = {'action': 'go',
|
self.provider_l7policy1_dict = {
|
||||||
'admin_state_up': True,
|
'action': 'go',
|
||||||
'description': 'L7policy 1',
|
'admin_state_up': True,
|
||||||
'l7policy_id': self.l7policy1_id,
|
'description': 'L7policy 1',
|
||||||
'listener_id': self.listener1_id,
|
'l7policy_id': self.l7policy1_id,
|
||||||
'name': 'l7policy_1',
|
'listener_id': self.listener1_id,
|
||||||
'position': 1,
|
'name': 'l7policy_1',
|
||||||
'redirect_pool_id': self.pool1_id,
|
'position': 1,
|
||||||
'redirect_url': '/index.html',
|
'redirect_pool_id': self.pool1_id,
|
||||||
'rules': self.provider_l7rules_dicts}
|
'redirect_url': '/index.html',
|
||||||
|
'redirect_prefix': 'https://example.com/',
|
||||||
|
'rules': self.provider_l7rules_dicts
|
||||||
|
}
|
||||||
|
|
||||||
self.provider_l7policy2_dict = copy.deepcopy(
|
self.provider_l7policy2_dict = copy.deepcopy(
|
||||||
self.provider_l7policy1_dict)
|
self.provider_l7policy1_dict)
|
||||||
|
@ -623,6 +623,12 @@ class TestHaproxyCfg(base.TestCase):
|
|||||||
".example.com\n"
|
".example.com\n"
|
||||||
" http-request deny if sample_l7rule_id_4 "
|
" http-request deny if sample_l7rule_id_4 "
|
||||||
"sample_l7rule_id_5\n"
|
"sample_l7rule_id_5\n"
|
||||||
|
" acl sample_l7rule_id_2 req.hdr(Some-header) -m sub "
|
||||||
|
"This\\ string\\\\\\ with\\ stuff\n"
|
||||||
|
" acl sample_l7rule_id_3 req.cook(some-cookie) -m reg "
|
||||||
|
"this.*|that\n"
|
||||||
|
" redirect prefix https://example.com if "
|
||||||
|
"!sample_l7rule_id_2 sample_l7rule_id_3\n"
|
||||||
" default_backend sample_pool_id_1\n"
|
" default_backend sample_pool_id_1\n"
|
||||||
" timeout client 50000\n\n").format(
|
" timeout client 50000\n\n").format(
|
||||||
maxconn=constants.HAPROXY_MAX_MAXCONN)
|
maxconn=constants.HAPROXY_MAX_MAXCONN)
|
||||||
|
@ -192,6 +192,7 @@ RET_L7POLICY_1 = {
|
|||||||
'action': constants.L7POLICY_ACTION_REDIRECT_TO_POOL,
|
'action': constants.L7POLICY_ACTION_REDIRECT_TO_POOL,
|
||||||
'redirect_pool': RET_POOL_2,
|
'redirect_pool': RET_POOL_2,
|
||||||
'redirect_url': None,
|
'redirect_url': None,
|
||||||
|
'redirect_prefix': None,
|
||||||
'enabled': True,
|
'enabled': True,
|
||||||
'l7rules': [RET_L7RULE_1]}
|
'l7rules': [RET_L7RULE_1]}
|
||||||
|
|
||||||
@ -200,6 +201,7 @@ RET_L7POLICY_2 = {
|
|||||||
'action': constants.L7POLICY_ACTION_REDIRECT_TO_URL,
|
'action': constants.L7POLICY_ACTION_REDIRECT_TO_URL,
|
||||||
'redirect_pool': None,
|
'redirect_pool': None,
|
||||||
'redirect_url': 'http://www.example.com',
|
'redirect_url': 'http://www.example.com',
|
||||||
|
'redirect_prefix': None,
|
||||||
'enabled': True,
|
'enabled': True,
|
||||||
'l7rules': [RET_L7RULE_2, RET_L7RULE_3]}
|
'l7rules': [RET_L7RULE_2, RET_L7RULE_3]}
|
||||||
|
|
||||||
@ -208,6 +210,7 @@ RET_L7POLICY_3 = {
|
|||||||
'action': constants.L7POLICY_ACTION_REJECT,
|
'action': constants.L7POLICY_ACTION_REJECT,
|
||||||
'redirect_pool': None,
|
'redirect_pool': None,
|
||||||
'redirect_url': None,
|
'redirect_url': None,
|
||||||
|
'redirect_prefix': None,
|
||||||
'enabled': True,
|
'enabled': True,
|
||||||
'l7rules': [RET_L7RULE_4, RET_L7RULE_5]}
|
'l7rules': [RET_L7RULE_4, RET_L7RULE_5]}
|
||||||
|
|
||||||
@ -216,6 +219,7 @@ RET_L7POLICY_4 = {
|
|||||||
'action': constants.L7POLICY_ACTION_REJECT,
|
'action': constants.L7POLICY_ACTION_REJECT,
|
||||||
'redirect_pool': None,
|
'redirect_pool': None,
|
||||||
'redirect_url': None,
|
'redirect_url': None,
|
||||||
|
'redirect_prefix': None,
|
||||||
'enabled': True,
|
'enabled': True,
|
||||||
'l7rules': []}
|
'l7rules': []}
|
||||||
|
|
||||||
@ -224,6 +228,7 @@ RET_L7POLICY_5 = {
|
|||||||
'action': constants.L7POLICY_ACTION_REJECT,
|
'action': constants.L7POLICY_ACTION_REJECT,
|
||||||
'redirect_pool': None,
|
'redirect_pool': None,
|
||||||
'redirect_url': None,
|
'redirect_url': None,
|
||||||
|
'redirect_prefix': None,
|
||||||
'enabled': False,
|
'enabled': False,
|
||||||
'l7rules': [RET_L7RULE_5]}
|
'l7rules': [RET_L7RULE_5]}
|
||||||
|
|
||||||
@ -232,9 +237,19 @@ RET_L7POLICY_6 = {
|
|||||||
'action': constants.L7POLICY_ACTION_REJECT,
|
'action': constants.L7POLICY_ACTION_REJECT,
|
||||||
'redirect_pool': None,
|
'redirect_pool': None,
|
||||||
'redirect_url': None,
|
'redirect_url': None,
|
||||||
|
'redirect_prefix': None,
|
||||||
'enabled': True,
|
'enabled': True,
|
||||||
'l7rules': []}
|
'l7rules': []}
|
||||||
|
|
||||||
|
RET_L7POLICY_7 = {
|
||||||
|
'id': 'sample_l7policy_id_7',
|
||||||
|
'action': constants.L7POLICY_ACTION_REDIRECT_PREFIX,
|
||||||
|
'redirect_pool': None,
|
||||||
|
'redirect_url': None,
|
||||||
|
'redirect_prefix': 'https://example.com',
|
||||||
|
'enabled': True,
|
||||||
|
'l7rules': [RET_L7RULE_2, RET_L7RULE_3]}
|
||||||
|
|
||||||
RET_LISTENER = {
|
RET_LISTENER = {
|
||||||
'id': 'sample_listener_id_1',
|
'id': 'sample_listener_id_1',
|
||||||
'protocol_port': '80',
|
'protocol_port': '80',
|
||||||
@ -267,7 +282,8 @@ RET_LISTENER_L7 = {
|
|||||||
'topology': 'SINGLE',
|
'topology': 'SINGLE',
|
||||||
'pools': [RET_POOL_1, RET_POOL_2],
|
'pools': [RET_POOL_1, RET_POOL_2],
|
||||||
'l7policies': [RET_L7POLICY_1, RET_L7POLICY_2, RET_L7POLICY_3,
|
'l7policies': [RET_L7POLICY_1, RET_L7POLICY_2, RET_L7POLICY_3,
|
||||||
RET_L7POLICY_4, RET_L7POLICY_5, RET_L7POLICY_6],
|
RET_L7POLICY_4, RET_L7POLICY_5, RET_L7POLICY_6,
|
||||||
|
RET_L7POLICY_7],
|
||||||
'enabled': True,
|
'enabled': True,
|
||||||
'insert_headers': {},
|
'insert_headers': {},
|
||||||
'timeout_client_data': 50000,
|
'timeout_client_data': 50000,
|
||||||
@ -527,7 +543,8 @@ def sample_listener_tuple(proto=None, monitor=True, alloc_default_pool=True,
|
|||||||
sample_l7policy_tuple('sample_l7policy_id_3', sample_policy=3),
|
sample_l7policy_tuple('sample_l7policy_id_3', sample_policy=3),
|
||||||
sample_l7policy_tuple('sample_l7policy_id_4', sample_policy=4),
|
sample_l7policy_tuple('sample_l7policy_id_4', sample_policy=4),
|
||||||
sample_l7policy_tuple('sample_l7policy_id_5', sample_policy=5),
|
sample_l7policy_tuple('sample_l7policy_id_5', sample_policy=5),
|
||||||
sample_l7policy_tuple('sample_l7policy_id_6', sample_policy=6)]
|
sample_l7policy_tuple('sample_l7policy_id_6', sample_policy=6),
|
||||||
|
sample_l7policy_tuple('sample_l7policy_id_7', sample_policy=7)]
|
||||||
else:
|
else:
|
||||||
pools = [
|
pools = [
|
||||||
sample_pool_tuple(
|
sample_pool_tuple(
|
||||||
@ -733,10 +750,12 @@ def sample_health_monitor_tuple(proto='HTTP', sample_hm=1):
|
|||||||
def sample_l7policy_tuple(id,
|
def sample_l7policy_tuple(id,
|
||||||
action=constants.L7POLICY_ACTION_REJECT,
|
action=constants.L7POLICY_ACTION_REJECT,
|
||||||
redirect_pool=None, redirect_url=None,
|
redirect_pool=None, redirect_url=None,
|
||||||
|
redirect_prefix=None,
|
||||||
enabled=True, sample_policy=1):
|
enabled=True, sample_policy=1):
|
||||||
in_l7policy = collections.namedtuple('l7policy',
|
in_l7policy = collections.namedtuple('l7policy',
|
||||||
'id, action, redirect_pool, '
|
'id, action, redirect_pool, '
|
||||||
'redirect_url, l7rules, enabled')
|
'redirect_url, redirect_prefix, '
|
||||||
|
'l7rules, enabled')
|
||||||
l7rules = []
|
l7rules = []
|
||||||
if sample_policy == 1:
|
if sample_policy == 1:
|
||||||
action = constants.L7POLICY_ACTION_REDIRECT_TO_POOL
|
action = constants.L7POLICY_ACTION_REDIRECT_TO_POOL
|
||||||
@ -760,11 +779,17 @@ def sample_l7policy_tuple(id,
|
|||||||
elif sample_policy == 6:
|
elif sample_policy == 6:
|
||||||
action = constants.L7POLICY_ACTION_REJECT
|
action = constants.L7POLICY_ACTION_REJECT
|
||||||
l7rules = [sample_l7rule_tuple('sample_l7rule_id_6', sample_rule=6)]
|
l7rules = [sample_l7rule_tuple('sample_l7rule_id_6', sample_rule=6)]
|
||||||
|
elif sample_policy == 7:
|
||||||
|
action = constants.L7POLICY_ACTION_REDIRECT_PREFIX
|
||||||
|
redirect_prefix = 'https://example.com'
|
||||||
|
l7rules = [sample_l7rule_tuple('sample_l7rule_id_2', sample_rule=2),
|
||||||
|
sample_l7rule_tuple('sample_l7rule_id_3', sample_rule=3)]
|
||||||
return in_l7policy(
|
return in_l7policy(
|
||||||
id=id,
|
id=id,
|
||||||
action=action,
|
action=action,
|
||||||
redirect_pool=redirect_pool,
|
redirect_pool=redirect_pool,
|
||||||
redirect_url=redirect_url,
|
redirect_url=redirect_url,
|
||||||
|
redirect_prefix=redirect_prefix,
|
||||||
l7rules=l7rules,
|
l7rules=l7rules,
|
||||||
enabled=enabled)
|
enabled=enabled)
|
||||||
|
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- Support REDIRECT_PREFIX action for L7Policy
|
Loading…
Reference in New Issue
Block a user