From 14c7883df183183dc58bd682f8f87ac24804196c Mon Sep 17 00:00:00 2001 From: Michael Johnson Date: Tue, 10 Apr 2018 16:39:42 -0700 Subject: [PATCH] Add API alias for '/statuses' Fixes a neutron-lbaas LBaaS v2 API compatibility issue when requesting a load balancer status tree via '/statuses'. This patch adds an alias for '/statuses' to use the same code as '/status'. Change-Id: I7aebf87c5f48e2e72b1f7f26b95663a861382f36 Story: 2001812 Task: 12563 (cherry picked from commit 922c79f52f1dfd2c966f14bc99f6513e153f2d6a) --- octavia/api/v2/controllers/load_balancer.py | 10 +++++++--- .../tests/functional/api/v2/test_load_balancer.py | 15 +++++++++++++++ .../notes/statuses_alias-27559e3d74b9eaf0.yaml | 5 +++++ 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 releasenotes/notes/statuses_alias-27559e3d74b9eaf0.yaml diff --git a/octavia/api/v2/controllers/load_balancer.py b/octavia/api/v2/controllers/load_balancer.py index f7cac8f764..ed253619b5 100644 --- a/octavia/api/v2/controllers/load_balancer.py +++ b/octavia/api/v2/controllers/load_balancer.py @@ -483,15 +483,19 @@ class LoadBalancersController(base.BaseController): def _lookup(self, id, *remainder): """Overridden pecan _lookup method for custom routing. - Currently it checks if this was a statuses request and routes - the request to the StatusesController. + Currently it checks if this was a status request and routes + the request to the StatusController. + + 'statuses' is aliased here for backward compatibility with + neutron-lbaas LBaaS v2 API. """ if id and len(remainder) and (remainder[0] == 'status' or + remainder[0] == 'statuses' or remainder[0] == 'stats' or remainder[0] == 'failover'): controller = remainder[0] remainder = remainder[1:] - if controller == 'status': + if controller == 'status' or controller == 'statuses': return StatusController(lb_id=id), remainder elif controller == 'stats': return StatisticsController(lb_id=id), remainder diff --git a/octavia/tests/functional/api/v2/test_load_balancer.py b/octavia/tests/functional/api/v2/test_load_balancer.py index ee616fa7ee..5164bfb2a5 100644 --- a/octavia/tests/functional/api/v2/test_load_balancer.py +++ b/octavia/tests/functional/api/v2/test_load_balancer.py @@ -2432,10 +2432,25 @@ class TestLoadBalancerGraph(base.BaseAPITest): res = self.get(self.LB_PATH.format(lb_id=lb_id + "/status")) return res.json.get('statuses').get('loadbalancer') + # Test the "statuses" alias for "status". + # This is required for backward compatibility with neutron-lbaas def test_statuses(self): lb = self.create_load_balancer( uuidutils.generate_uuid()).get('loadbalancer') + statuses = self.get(self.LB_PATH.format(lb_id=lb['id'] + "/statuses")) + response = statuses.json.get('statuses').get('loadbalancer') + self.assertEqual(lb['name'], response['name']) + self.assertEqual(lb['id'], response['id']) + self.assertEqual(lb['operating_status'], + response['operating_status']) + self.assertEqual(lb['provisioning_status'], + response['provisioning_status']) + + def test_status(self): + lb = self.create_load_balancer( + uuidutils.generate_uuid()).get('loadbalancer') + response = self._getStatus(lb['id']) self.assertEqual(lb['name'], response['name']) self.assertEqual(lb['id'], response['id']) diff --git a/releasenotes/notes/statuses_alias-27559e3d74b9eaf0.yaml b/releasenotes/notes/statuses_alias-27559e3d74b9eaf0.yaml new file mode 100644 index 0000000000..216ff4c65f --- /dev/null +++ b/releasenotes/notes/statuses_alias-27559e3d74b9eaf0.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fixes a neutron-lbaas LBaaS v2 API compatibility issue when requesting a + load balancer status tree via '/statuses'.