Use Octavia endpoint paths from openstacksdk

Ic0bb56f90fe9effcdcb2ae5db96b8a1ec19738df hardcoded paths used to send
POST requests to Octavia endpoints. Seems like those paths were changed
in openstacksdk 0.18.0 and Kuryr fails when using that version of the
library.

This commit fixes that by getting the correct paths directly from
openstacksdk.

Change-Id: I601353453871c545d6c8e10e86cd41f004aac533
Closes-Bug: 1826904
This commit is contained in:
Michał Dulko 2019-04-29 19:04:09 +02:00
parent 46105132a4
commit 004efce1c9
2 changed files with 38 additions and 30 deletions

View File

@ -20,6 +20,12 @@ import requests
from neutronclient.common import exceptions as n_exc
from openstack import exceptions as o_exc
from openstack.load_balancer.v2 import l7_policy as o_l7p
from openstack.load_balancer.v2 import l7_rule as o_l7r
from openstack.load_balancer.v2 import listener as o_lis
from openstack.load_balancer.v2 import load_balancer as o_lb
from openstack.load_balancer.v2 import member as o_mem
from openstack.load_balancer.v2 import pool as o_pool
from oslo_config import cfg
from oslo_log import log as logging
from oslo_utils import timeutils
@ -510,7 +516,7 @@ class LBaaSv2Driver(base.LBaaSDriver):
return None
def _post_lb_resource(self, path, resource, request):
def _post_lb_resource(self, resource, request, **kwargs):
# FIXME(dulek): openstacksdk doesn't support Octavia tags until version
# 0.24.0 (Stein+). At the moment our dependency is
# >=0.13.0, because we want Kuryr to support multiple
@ -521,12 +527,13 @@ class LBaaSv2Driver(base.LBaaSDriver):
# use lbaas.create_*() directly. Until then we manually
# send POST request.
lbaas = clients.get_loadbalancer_client()
response = lbaas.post(path, json={resource: request})
response = lbaas.post(resource.base_path % kwargs,
json={resource.resource_key: request})
if not response.ok:
LOG.error('Error when creating %s: %s', resource, response.text)
LOG.error('Error when creating %s: %s', resource.resource_key,
response.text)
response.raise_for_status()
response = response.json()[resource]
return response
return response.json()[resource.resource_key]
def _create_loadbalancer(self, loadbalancer):
request = {
@ -541,8 +548,7 @@ class LBaaSv2Driver(base.LBaaSDriver):
self._add_tags('loadbalancer', request)
response = self._post_lb_resource('loadbalancers', 'loadbalancer',
request)
response = self._post_lb_resource(o_lb.LoadBalancer, request)
loadbalancer.id = response['id']
loadbalancer.port_id = self._get_vip_port(loadbalancer).get("id")
@ -585,7 +591,7 @@ class LBaaSv2Driver(base.LBaaSDriver):
'protocol_port': listener.port,
}
self._add_tags('listener', request)
response = self._post_lb_resource('listeners', 'listener', request)
response = self._post_lb_resource(o_lis.Listener, request)
listener.id = response['id']
return listener
@ -618,7 +624,7 @@ class LBaaSv2Driver(base.LBaaSDriver):
'lb_algorithm': lb_algorithm,
}
self._add_tags('pool', request)
response = self._post_lb_resource('pools', 'pool', request)
response = self._post_lb_resource(o_pool.Pool, request)
pool.id = response['id']
return pool
@ -654,8 +660,8 @@ class LBaaSv2Driver(base.LBaaSDriver):
'protocol_port': member.port,
}
self._add_tags('member', request)
response = self._post_lb_resource('pools/%s/members' % member.pool_id,
'member', request)
response = self._post_lb_resource(o_mem.Member, request,
pool_id=member.pool_id)
member.id = response['id']
return member
@ -857,7 +863,7 @@ class LBaaSv2Driver(base.LBaaSDriver):
'redirect_pool_id': l7_policy.redirect_pool_id,
}
self._add_tags('l7policy', request)
response = self._post_lb_resource('l7policies', 'l7policy', request)
response = self._post_lb_resource(o_l7p.L7Policy, request)
l7_policy.id = response['id']
return l7_policy
@ -891,8 +897,8 @@ class LBaaSv2Driver(base.LBaaSDriver):
'value': l7_rule.value
}
self._add_tags('rule', request)
response = self._post_lb_resource(
'l7policies/%s/rules' % l7_rule.l7policy_id, 'rule', request)
response = self._post_lb_resource(o_l7r.L7Rule, request,
l7policy_id=l7_rule.l7policy_id)
l7_rule.id = response['id']
return l7_rule

View File

@ -18,6 +18,12 @@ import requests
from neutronclient.common import exceptions as n_exc
from openstack import exceptions as o_exc
from openstack.load_balancer.v2 import l7_policy as o_l7p
from openstack.load_balancer.v2 import l7_rule as o_l7r
from openstack.load_balancer.v2 import listener as o_lis
from openstack.load_balancer.v2 import load_balancer as o_lb
from openstack.load_balancer.v2 import member as o_mem
from openstack.load_balancer.v2 import pool as o_pool
from oslo_config import cfg
from kuryr_kubernetes.controller.drivers import lbaasv2 as d_lbaasv2
@ -307,8 +313,8 @@ class TestLBaaSv2Driver(test_base.TestCase):
m_driver._get_vip_port.return_value = {'id': mock.sentinel.port_id}
ret = cls._create_loadbalancer(m_driver, loadbalancer)
m_driver._post_lb_resource.assert_called_once_with('loadbalancers',
'loadbalancer', req)
m_driver._post_lb_resource.assert_called_once_with(o_lb.LoadBalancer,
req)
for attr in loadbalancer.obj_fields:
self.assertEqual(getattr(loadbalancer, attr),
getattr(ret, attr))
@ -335,8 +341,8 @@ class TestLBaaSv2Driver(test_base.TestCase):
m_driver._get_vip_port.return_value = {'id': mock.sentinel.port_id}
ret = cls._create_loadbalancer(m_driver, loadbalancer)
m_driver._post_lb_resource.assert_called_once_with('loadbalancers',
'loadbalancer', req)
m_driver._post_lb_resource.assert_called_once_with(o_lb.LoadBalancer,
req)
for attr in loadbalancer.obj_fields:
self.assertEqual(getattr(loadbalancer, attr),
getattr(ret, attr))
@ -363,8 +369,8 @@ class TestLBaaSv2Driver(test_base.TestCase):
m_driver._get_vip_port.return_value = {'id': mock.sentinel.port_id}
ret = cls._create_loadbalancer(m_driver, loadbalancer)
m_driver._post_lb_resource.assert_called_once_with('loadbalancers',
'loadbalancer', req)
m_driver._post_lb_resource.assert_called_once_with(o_lb.LoadBalancer,
req)
self.assertIsNone(ret)
def test_find_loadbalancer(self):
@ -453,8 +459,7 @@ class TestLBaaSv2Driver(test_base.TestCase):
m_driver._post_lb_resource.return_value = resp
ret = cls._create_listener(m_driver, listener)
m_driver._post_lb_resource.assert_called_once_with('listeners',
'listener', req)
m_driver._post_lb_resource.assert_called_once_with(o_lis.Listener, req)
for attr in listener.obj_fields:
self.assertEqual(getattr(listener, attr),
getattr(ret, attr))
@ -521,8 +526,7 @@ class TestLBaaSv2Driver(test_base.TestCase):
m_driver._post_lb_resource.return_value = resp
ret = cls._create_pool(m_driver, pool)
m_driver._post_lb_resource.assert_called_once_with('pools', 'pool',
req)
m_driver._post_lb_resource.assert_called_once_with(o_pool.Pool, req)
for attr in pool.obj_fields:
self.assertEqual(getattr(pool, attr),
getattr(ret, attr))
@ -547,8 +551,7 @@ class TestLBaaSv2Driver(test_base.TestCase):
self.assertRaises(n_exc.StateInvalidClient, cls._create_pool, m_driver,
pool)
m_driver._post_lb_resource.assert_called_once_with('pools', 'pool',
req)
m_driver._post_lb_resource.assert_called_once_with(o_pool.Pool, req)
def test_find_pool_by_listener(self):
lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
@ -612,7 +615,7 @@ class TestLBaaSv2Driver(test_base.TestCase):
ret = cls._create_member(m_driver, member)
m_driver._post_lb_resource.assert_called_once_with(
'pools/%s/members' % member.pool_id, 'member', req)
o_mem.Member, req, pool_id=member.pool_id)
for attr in member.obj_fields:
self.assertEqual(getattr(member, attr),
getattr(ret, attr))
@ -1046,8 +1049,7 @@ class TestLBaaSv2Driver(test_base.TestCase):
m_driver._post_lb_resource.return_value = resp
ret = cls._create_l7_policy(m_driver, l7_policy)
m_driver._post_lb_resource.assert_called_once_with('l7policies',
'l7policy', req)
m_driver._post_lb_resource.assert_called_once_with(o_l7p.L7Policy, req)
for attr in l7_policy.obj_fields:
self.assertEqual(getattr(l7_policy, attr),
getattr(ret, attr))
@ -1163,7 +1165,7 @@ class TestLBaaSv2Driver(test_base.TestCase):
ret = cls._create_l7_rule(m_driver, l7_rule)
m_driver._post_lb_resource.assert_called_once_with(
'l7policies/%s/rules' % l7_rule.l7policy_id, 'rule', req)
o_l7r.L7Rule, req, l7policy_id=l7_rule.l7policy_id)
for attr in l7_rule.obj_fields:
self.assertEqual(getattr(l7_rule, attr),
getattr(ret, attr))