From 3ae796a0bc741c004c2415731e6f656724aafd52 Mon Sep 17 00:00:00 2001 From: Jason Dunsmore Date: Wed, 3 Feb 2016 16:55:10 -0600 Subject: [PATCH] Remove extraneous fields from Cloud LoadBalancer access list This fixes a bug where the load balancer creation fails with this error: resource CREATE failed: BadRequest: resources.loadbalancer: Must supply a unique access list item to update the current list. (HTTP 400) Closes-Bug: 1541953 Change-Id: I5183b305a7bf2cef16e5e01e88fdb3f24aeb4be5 --- contrib/rackspace/rackspace/resources/cloud_loadbalancer.py | 1 + .../rackspace/rackspace/tests/test_cloud_loadbalancer.py | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/contrib/rackspace/rackspace/resources/cloud_loadbalancer.py b/contrib/rackspace/rackspace/resources/cloud_loadbalancer.py index f75af3c8d..b35642888 100644 --- a/contrib/rackspace/rackspace/resources/cloud_loadbalancer.py +++ b/contrib/rackspace/rackspace/resources/cloud_loadbalancer.py @@ -789,6 +789,7 @@ class CloudLoadBalancer(resource.Resource): return False def _access_list_needs_update(self, old, new): + old = [{key: al[key] for key in self._ACCESS_LIST_KEYS} for al in old] old = set([frozenset(s.items()) for s in old]) new = set([frozenset(s.items()) for s in new]) return old != new diff --git a/contrib/rackspace/rackspace/tests/test_cloud_loadbalancer.py b/contrib/rackspace/rackspace/tests/test_cloud_loadbalancer.py index d5fb7ab2a..f8cb8a605 100644 --- a/contrib/rackspace/rackspace/tests/test_cloud_loadbalancer.py +++ b/contrib/rackspace/rackspace/tests/test_cloud_loadbalancer.py @@ -680,6 +680,10 @@ class LoadBalancerTest(common.HeatTestCase): 'type': 'ALLOW'}, {'address': '172.165.3.43', 'type': 'DENY'}] + api_access_list = [{"address": '192.168.1.1/0', 'id': 1234, + 'type': 'ALLOW'}, + {'address': '172.165.3.43', 'id': 3422, + 'type': 'DENY'}] template = self._set_template(self.lb_template, accessList=access_list) @@ -688,7 +692,7 @@ class LoadBalancerTest(common.HeatTestCase): self.expected_body) self.m.StubOutWithMock(fake_lb, 'get_access_list') fake_lb.get_access_list().AndReturn([]) - fake_lb.get_access_list().AndReturn(access_list) + fake_lb.get_access_list().AndReturn(api_access_list) self.m.StubOutWithMock(fake_lb, 'add_access_list') fake_lb.add_access_list(access_list)