From 2b23d744a617cb279a73551a5c7cd7ccc2b3b695 Mon Sep 17 00:00:00 2001 From: Senthilnathan Murugappan Date: Fri, 1 Apr 2016 16:00:57 -0700 Subject: [PATCH] Handle session persistence info in case of lbaasv2 Change-Id: Ic6e6c19322558b8c6508c3db4a1fc6a6d1edfeb8 Closes-Bug:#1565135 --- .../loadbalancer/v2/loadbalancer_pool.py | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/neutron_plugin_contrail/plugins/opencontrail/loadbalancer/v2/loadbalancer_pool.py b/neutron_plugin_contrail/plugins/opencontrail/loadbalancer/v2/loadbalancer_pool.py index a99a9bb..5a5f428 100644 --- a/neutron_plugin_contrail/plugins/opencontrail/loadbalancer/v2/loadbalancer_pool.py +++ b/neutron_plugin_contrail/plugins/opencontrail/loadbalancer/v2/loadbalancer_pool.py @@ -38,6 +38,12 @@ def make_properties(self, pool): for key, mapping in self._loadbalancer_pool_type_mapping.iteritems(): if mapping in pool: setattr(props, key, pool[mapping]) + sp = pool['session_persistence'] + if sp is not None: + if 'type' in sp: + props.session_persistence = sp['type'] + if 'cookie_name' in sp: + props.persistence_cookie_name = sp['cookie_name'] return props def _get_listeners(self, pool): @@ -56,6 +62,7 @@ def make_dict(self, pool, fields=None): 'description': self._get_object_description(pool), 'status': self._get_object_status(pool), 'listeners': self._get_listeners(pool), + 'session_persistence': None, } props = pool.get_loadbalancer_pool_properties() @@ -64,6 +71,12 @@ def make_dict(self, pool, fields=None): if value is not None: res[mapping] = value + if props.session_persistence: + sp = {'type': props.session_persistence} + if props.session_persistence == 'APP_COOKIE': + sp['cookie_name'] = props.persistence_cookie_name + res['session_persistence'] = sp + res['provider'] = pool.get_loadbalancer_pool_provider() # members @@ -170,10 +183,25 @@ def create(self, context, pool): self._api.loadbalancer_pool_create(pool) return self.make_dict(pool) + def _update_pool_properties(self, props, pool): + change = self.update_properties_subr(props, pool) + if 'session_persistence' in pool: + sp = pool['session_persistence'] + new_type = sp.get('type', None) + if props.session_persistence != new_type: + props.session_persistence = new_type + change = True + new_cookie_name = sp.get('cookie_name', None) + if props.persistence_cookie_name != new_cookie_name and \ + props.session_persistence == 'APP_COOKIE': + props.persistence_cookie_name = new_cookie_name + change = True + return change + def update_properties(self, pool_db, id, p): props = pool_db.get_loadbalancer_pool_properties() change = False - if self.update_properties_subr(props, p): + if self._update_pool_properties(props, p): pool_db.set_loadbalancer_pool_properties(props) change = True