summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2021-12-24 09:23:31 +0000
committerGerrit Code Review <review@openstack.org>2021-12-24 09:23:31 +0000
commitea6633c35b04bb49c4a2858edc9df0a82d039478 (patch)
tree894dde0ace445ab7155eb1d8008bdd6dc29e300a
parent421a382cb14b22e384a5768dcbb5e4c3bc3d9bb4 (diff)
parentc63a2cbbadc0db9485843254b90932984e9aa36a (diff)
downloadheat-ea6633c35b04bb49c4a2858edc9df0a82d039478.tar.gz
Merge "Fix Pool resource update for session_persistence"
-rw-r--r--heat/engine/resources/openstack/octavia/pool.py10
-rw-r--r--heat/tests/openstack/octavia/test_pool.py1
2 files changed, 9 insertions, 2 deletions
diff --git a/heat/engine/resources/openstack/octavia/pool.py b/heat/engine/resources/openstack/octavia/pool.py
index 625483736..729af0793 100644
--- a/heat/engine/resources/openstack/octavia/pool.py
+++ b/heat/engine/resources/openstack/octavia/pool.py
@@ -87,6 +87,7 @@ class Pool(octavia_base.OctaviaBase):
'required if type is APP_COOKIE.')
)
},
+ update_allowed=True,
),
NAME: properties.Schema(
properties.Schema.STRING,
@@ -177,12 +178,15 @@ class Pool(octavia_base.OctaviaBase):
props['listener_id'] = props.pop(self.LISTENER)
if self.LOADBALANCER in props:
props['loadbalancer_id'] = props.pop(self.LOADBALANCER)
+ self._prepare_session_persistence(props)
+ return props
+
+ def _prepare_session_persistence(self, props):
session_p = props.get(self.SESSION_PERSISTENCE)
if session_p is not None:
session_props = dict(
(k, v) for k, v in session_p.items() if v is not None)
props[self.SESSION_PERSISTENCE] = session_props
- return props
def validate(self):
super(Pool, self).validate()
@@ -215,7 +219,9 @@ class Pool(octavia_base.OctaviaBase):
return self.client().pool_create(json={'pool': properties})['pool']
def _resource_update(self, prop_diff):
- self.client().pool_set(self.resource_id, json={'pool': prop_diff})
+ props = dict((k, v) for k, v in prop_diff.items() if v is not None)
+ self._prepare_session_persistence(props)
+ self.client().pool_set(self.resource_id, json={'pool': props})
def _resource_delete(self):
self.client().pool_delete(self.resource_id)
diff --git a/heat/tests/openstack/octavia/test_pool.py b/heat/tests/openstack/octavia/test_pool.py
index 1192d53d7..703c2695d 100644
--- a/heat/tests/openstack/octavia/test_pool.py
+++ b/heat/tests/openstack/octavia/test_pool.py
@@ -135,6 +135,7 @@ class PoolTest(common.HeatTestCase):
exceptions.Conflict(409), None]
prop_diff = {
'admin_state_up': False,
+ 'session_persistence': {'type': 'source_ip'},
'name': 'your_pool',
'lb_algorithm': 'SOURCE_IP'
}