Fixed support of session_persistence for lbaas/octavia
This patch will fix broken support of session_persistence and only add cookie_name when type is APP_COOKIE. Change-Id: I32ad7840208bcc20091abcc1df68a7a707a7c4ac
This commit is contained in:
parent
68c1b31768
commit
e111000aab
|
@ -159,6 +159,7 @@ class LoadBalancerDriver(base.DriverBase):
|
||||||
try:
|
try:
|
||||||
pool = self.oc().pool_create(pool['lb_method'], listener.id,
|
pool = self.oc().pool_create(pool['lb_method'], listener.id,
|
||||||
pool['protocol'],
|
pool['protocol'],
|
||||||
|
pool['session_persistence'],
|
||||||
pool['admin_state_up'])
|
pool['admin_state_up'])
|
||||||
except exception.InternalError as ex:
|
except exception.InternalError as ex:
|
||||||
msg = 'Failed in creating lb pool: %s.' % str(ex)
|
msg = 'Failed in creating lb pool: %s.' % str(ex)
|
||||||
|
|
|
@ -98,12 +98,18 @@ class OctaviaClient(base.DriverBase):
|
||||||
|
|
||||||
@sdk.translate_exception
|
@sdk.translate_exception
|
||||||
def pool_create(self, lb_algorithm, listener_id, protocol,
|
def pool_create(self, lb_algorithm, listener_id, protocol,
|
||||||
admin_state_up=True, name=None, description=None):
|
session_persistence, admin_state_up=True,
|
||||||
|
name=None, description=None):
|
||||||
|
|
||||||
|
# Remove cookie_name when type not equal to APP_COOKIE
|
||||||
|
if session_persistence['type'] != 'APP_COOKIE':
|
||||||
|
session_persistence.pop('cookie_name', None)
|
||||||
|
|
||||||
kwargs = {
|
kwargs = {
|
||||||
'lb_algorithm': lb_algorithm,
|
'lb_algorithm': lb_algorithm,
|
||||||
'listener_id': listener_id,
|
'listener_id': listener_id,
|
||||||
'protocol': protocol,
|
'protocol': protocol,
|
||||||
|
'session_persistence': session_persistence,
|
||||||
'admin_state_up': admin_state_up,
|
'admin_state_up': admin_state_up,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,11 @@ class TestOctaviaLBaaSDriver(base.SenlinTestCase):
|
||||||
self.pool = {
|
self.pool = {
|
||||||
'lb_method': 'ROUND_ROBIN',
|
'lb_method': 'ROUND_ROBIN',
|
||||||
'protocol': 'HTTP',
|
'protocol': 'HTTP',
|
||||||
'admin_state_up': True
|
'session_persistence': {
|
||||||
|
'type': 'SOURCE_IP',
|
||||||
|
'cookie_name': 'whatever',
|
||||||
|
},
|
||||||
|
'admin_state_up': True,
|
||||||
}
|
}
|
||||||
self.hm = {
|
self.hm = {
|
||||||
"type": "HTTP",
|
"type": "HTTP",
|
||||||
|
@ -168,7 +172,7 @@ class TestOctaviaLBaaSDriver(base.SenlinTestCase):
|
||||||
self.assertEqual('LISTENER_ID', res['listener'])
|
self.assertEqual('LISTENER_ID', res['listener'])
|
||||||
self.oc.pool_create.assert_called_once_with(
|
self.oc.pool_create.assert_called_once_with(
|
||||||
self.pool['lb_method'], 'LISTENER_ID', self.pool['protocol'],
|
self.pool['lb_method'], 'LISTENER_ID', self.pool['protocol'],
|
||||||
self.pool['admin_state_up'])
|
self.pool['session_persistence'], self.pool['admin_state_up'])
|
||||||
self.assertEqual('POOL_ID', res['pool'])
|
self.assertEqual('POOL_ID', res['pool'])
|
||||||
self.oc.healthmonitor_create.assert_called_once_with(
|
self.oc.healthmonitor_create.assert_called_once_with(
|
||||||
self.hm['type'], self.hm['delay'], self.hm['timeout'],
|
self.hm['type'], self.hm['delay'], self.hm['timeout'],
|
||||||
|
@ -227,7 +231,7 @@ class TestOctaviaLBaaSDriver(base.SenlinTestCase):
|
||||||
self.assertEqual('LISTENER_ID', res['listener'])
|
self.assertEqual('LISTENER_ID', res['listener'])
|
||||||
self.oc.pool_create.assert_called_once_with(
|
self.oc.pool_create.assert_called_once_with(
|
||||||
self.pool['lb_method'], 'LISTENER_ID', self.pool['protocol'],
|
self.pool['lb_method'], 'LISTENER_ID', self.pool['protocol'],
|
||||||
self.pool['admin_state_up'])
|
self.pool['session_persistence'], self.pool['admin_state_up'])
|
||||||
self.assertEqual('POOL_ID', res['pool'])
|
self.assertEqual('POOL_ID', res['pool'])
|
||||||
self.oc.healthmonitor_create.assert_called_once_with(
|
self.oc.healthmonitor_create.assert_called_once_with(
|
||||||
self.hm['type'], self.hm['delay'], self.hm['timeout'],
|
self.hm['type'], self.hm['delay'], self.hm['timeout'],
|
||||||
|
@ -357,7 +361,7 @@ class TestOctaviaLBaaSDriver(base.SenlinTestCase):
|
||||||
self.vip['connection_limit'], self.vip['admin_state_up'])
|
self.vip['connection_limit'], self.vip['admin_state_up'])
|
||||||
self.oc.pool_create.assert_called_once_with(
|
self.oc.pool_create.assert_called_once_with(
|
||||||
self.pool['lb_method'], 'LISTENER_ID', self.pool['protocol'],
|
self.pool['lb_method'], 'LISTENER_ID', self.pool['protocol'],
|
||||||
self.pool['admin_state_up'])
|
self.pool['session_persistence'], self.pool['admin_state_up'])
|
||||||
self.lb_driver._wait_for_lb_ready.assert_called_with('LB_ID')
|
self.lb_driver._wait_for_lb_ready.assert_called_with('LB_ID')
|
||||||
self.lb_driver.lb_delete.assert_called_once_with(
|
self.lb_driver.lb_delete.assert_called_once_with(
|
||||||
loadbalancer='LB_ID', listener='LISTENER_ID', pool='POOL_ID')
|
loadbalancer='LB_ID', listener='LISTENER_ID', pool='POOL_ID')
|
||||||
|
|
|
@ -129,6 +129,12 @@ class TestOctaviaV2Driver(base.SenlinTestCase):
|
||||||
lb_algorithm = 'ROUND_ROBIN'
|
lb_algorithm = 'ROUND_ROBIN'
|
||||||
listener_id = 'ID1'
|
listener_id = 'ID1'
|
||||||
protocol = 'HTTP'
|
protocol = 'HTTP'
|
||||||
|
session_persistence = {
|
||||||
|
'type': 'SOURCE_IP',
|
||||||
|
'cookie_name': 'whatever',
|
||||||
|
}
|
||||||
|
session_persistence_expected = session_persistence.copy()
|
||||||
|
session_persistence_expected.pop('cookie_name', None)
|
||||||
pool_obj = mock.Mock()
|
pool_obj = mock.Mock()
|
||||||
|
|
||||||
# All input parameters are provided
|
# All input parameters are provided
|
||||||
|
@ -140,20 +146,55 @@ class TestOctaviaV2Driver(base.SenlinTestCase):
|
||||||
|
|
||||||
self.conn.load_balancer.create_pool.return_value = pool_obj
|
self.conn.load_balancer.create_pool.return_value = pool_obj
|
||||||
self.assertEqual(pool_obj, self.oc.pool_create(
|
self.assertEqual(pool_obj, self.oc.pool_create(
|
||||||
lb_algorithm, listener_id, protocol, **kwargs))
|
lb_algorithm, listener_id, protocol, session_persistence,
|
||||||
|
**kwargs))
|
||||||
self.conn.load_balancer.create_pool.assert_called_once_with(
|
self.conn.load_balancer.create_pool.assert_called_once_with(
|
||||||
lb_algorithm=lb_algorithm, listener_id=listener_id,
|
lb_algorithm=lb_algorithm, listener_id=listener_id,
|
||||||
protocol=protocol, **kwargs)
|
protocol=protocol,
|
||||||
|
session_persistence=session_persistence_expected,
|
||||||
|
**kwargs)
|
||||||
|
|
||||||
# Use default input parameters
|
# Use default input parameters
|
||||||
kwargs = {
|
kwargs = {
|
||||||
'admin_state_up': True
|
'admin_state_up': True
|
||||||
}
|
}
|
||||||
self.assertEqual(pool_obj, self.oc.pool_create(
|
self.assertEqual(pool_obj, self.oc.pool_create(
|
||||||
lb_algorithm, listener_id, protocol))
|
lb_algorithm, listener_id, protocol, session_persistence))
|
||||||
self.conn.load_balancer.create_pool.assert_called_with(
|
self.conn.load_balancer.create_pool.assert_called_with(
|
||||||
lb_algorithm=lb_algorithm, listener_id=listener_id,
|
lb_algorithm=lb_algorithm, listener_id=listener_id,
|
||||||
protocol=protocol, **kwargs)
|
protocol=protocol,
|
||||||
|
session_persistence=session_persistence_expected,
|
||||||
|
**kwargs)
|
||||||
|
|
||||||
|
def test_pool_create_cookie_removed(self):
|
||||||
|
lb_algorithm = 'ROUND_ROBIN'
|
||||||
|
listener_id = 'ID1'
|
||||||
|
protocol = 'HTTP'
|
||||||
|
pool_obj = mock.Mock()
|
||||||
|
|
||||||
|
# All input parameters are provided
|
||||||
|
kwargs = {
|
||||||
|
'admin_state_up': True,
|
||||||
|
'name': 'test-pool',
|
||||||
|
'description': 'This is a pool',
|
||||||
|
}
|
||||||
|
|
||||||
|
self.conn.load_balancer.create_pool.return_value = pool_obj
|
||||||
|
|
||||||
|
# Check type is APP_COOKIE
|
||||||
|
session_persistence_app_cookie = {
|
||||||
|
'type': 'APP_COOKIE',
|
||||||
|
'cookie_name': 'whatever',
|
||||||
|
}
|
||||||
|
self.assertEqual(pool_obj, self.oc.pool_create(
|
||||||
|
lb_algorithm, listener_id, protocol,
|
||||||
|
session_persistence_app_cookie, **kwargs))
|
||||||
|
# cookie_name is not removed
|
||||||
|
self.conn.load_balancer.create_pool.assert_called_once_with(
|
||||||
|
lb_algorithm=lb_algorithm, listener_id=listener_id,
|
||||||
|
protocol=protocol,
|
||||||
|
session_persistence=session_persistence_app_cookie,
|
||||||
|
**kwargs)
|
||||||
|
|
||||||
def test_pool_delete(self):
|
def test_pool_delete(self):
|
||||||
pool_id = 'ID1'
|
pool_id = 'ID1'
|
||||||
|
|
Loading…
Reference in New Issue