Update the amphora driver for flavor support.
This patch updates the amphroa driver to pass the flavor dictionary over to the controller worker at load balancer creation time. This flavor dictionary is then inserted into the load balancer creation flow. Change-Id: I615937fdf9edf335fb18999f1b7c11eb6202a3d1
This commit is contained in:
parent
5e1cdac4c9
commit
aa82d51961
|
@ -20,6 +20,7 @@ from oslo_log import log as logging
|
|||
import oslo_messaging as messaging
|
||||
|
||||
from octavia.api.drivers.amphora_driver import flavor_schema
|
||||
from octavia.api.drivers import data_models as driver_dm
|
||||
from octavia.api.drivers import exceptions
|
||||
from octavia.api.drivers import provider_base as driver_base
|
||||
from octavia.api.drivers import utils as driver_utils
|
||||
|
@ -63,8 +64,13 @@ class AmphoraProviderDriver(driver_base.ProviderDriver):
|
|||
vip.port_id, loadbalancer_id)
|
||||
return driver_utils.vip_dict_to_provider_dict(vip.to_dict())
|
||||
|
||||
# TODO(johnsom) convert this to octavia_lib constant flavor
|
||||
# once octavia is transitioned to use octavia_lib
|
||||
def loadbalancer_create(self, loadbalancer):
|
||||
payload = {consts.LOAD_BALANCER_ID: loadbalancer.loadbalancer_id}
|
||||
if loadbalancer.flavor == driver_dm.Unset:
|
||||
loadbalancer.flavor = None
|
||||
payload = {consts.LOAD_BALANCER_ID: loadbalancer.loadbalancer_id,
|
||||
consts.FLAVOR: loadbalancer.flavor}
|
||||
self.client.cast({}, 'create_load_balancer', **payload)
|
||||
|
||||
def loadbalancer_delete(self, loadbalancer, cascade=False):
|
||||
|
|
|
@ -561,6 +561,9 @@ AMP_NETNS_SVC_PREFIX = 'amphora-netns'
|
|||
# Amphora Feature Compatibility
|
||||
HTTP_REUSE = 'has_http_reuse'
|
||||
|
||||
# TODO(johnsom) convert this to octavia_lib constant flavor
|
||||
# once octavia is transitioned to use octavia_lib
|
||||
FLAVOR = 'flavor'
|
||||
FLAVOR_DATA = 'flavor_data'
|
||||
|
||||
# Flavor metadata
|
||||
|
|
|
@ -30,7 +30,7 @@ class Endpoint(object):
|
|||
# 1.0 - Initial version.
|
||||
target = messaging.Target(
|
||||
namespace=constants.RPC_NAMESPACE_CONTROLLER_AGENT,
|
||||
version='1.0')
|
||||
version='1.1')
|
||||
|
||||
def __init__(self):
|
||||
self.worker = stevedore_driver.DriverManager(
|
||||
|
@ -39,9 +39,10 @@ class Endpoint(object):
|
|||
invoke_on_load=True
|
||||
).driver
|
||||
|
||||
def create_load_balancer(self, context, load_balancer_id):
|
||||
def create_load_balancer(self, context, load_balancer_id,
|
||||
flavor=None):
|
||||
LOG.info('Creating load balancer \'%s\'...', load_balancer_id)
|
||||
self.worker.create_load_balancer(load_balancer_id)
|
||||
self.worker.create_load_balancer(load_balancer_id, flavor)
|
||||
|
||||
def update_load_balancer(self, context, load_balancer_id,
|
||||
load_balancer_updates):
|
||||
|
|
|
@ -320,7 +320,7 @@ class ControllerWorker(base_taskflow.BaseTaskFlowEngine):
|
|||
wait=tenacity.wait_incrementing(
|
||||
RETRY_INITIAL_DELAY, RETRY_BACKOFF, RETRY_MAX),
|
||||
stop=tenacity.stop_after_attempt(RETRY_ATTEMPTS))
|
||||
def create_load_balancer(self, load_balancer_id):
|
||||
def create_load_balancer(self, load_balancer_id, flavor=None):
|
||||
"""Creates a load balancer by allocating Amphorae.
|
||||
|
||||
First tries to allocate an existing Amphora in READY state.
|
||||
|
@ -337,9 +337,12 @@ class ControllerWorker(base_taskflow.BaseTaskFlowEngine):
|
|||
'60 seconds.', 'load_balancer', load_balancer_id)
|
||||
raise db_exceptions.NoResultFound
|
||||
|
||||
# TODO(johnsom) convert this to octavia_lib constant flavor
|
||||
# once octavia is transitioned to use octavia_lib
|
||||
store = {constants.LOADBALANCER_ID: load_balancer_id,
|
||||
constants.BUILD_TYPE_PRIORITY:
|
||||
constants.LB_CREATE_NORMAL_PRIORITY}
|
||||
constants.LB_CREATE_NORMAL_PRIORITY,
|
||||
constants.FLAVOR: flavor}
|
||||
|
||||
topology = lb.topology
|
||||
|
||||
|
|
|
@ -59,7 +59,8 @@ class TestAmphoraDriver(base.TestCase):
|
|||
provider_lb = driver_dm.LoadBalancer(
|
||||
loadbalancer_id=self.sample_data.lb_id)
|
||||
self.amp_driver.loadbalancer_create(provider_lb)
|
||||
payload = {consts.LOAD_BALANCER_ID: self.sample_data.lb_id}
|
||||
payload = {consts.LOAD_BALANCER_ID: self.sample_data.lb_id,
|
||||
consts.FLAVOR: None}
|
||||
mock_cast.assert_called_with({}, 'create_load_balancer', **payload)
|
||||
|
||||
@mock.patch('oslo_messaging.RPCClient.cast')
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
import mock
|
||||
from oslo_config import cfg
|
||||
from oslo_config import fixture as oslo_fixture
|
||||
from oslo_utils import uuidutils
|
||||
|
||||
from octavia.controller.queue import endpoint
|
||||
from octavia.controller.worker import controller_worker
|
||||
|
@ -39,11 +40,18 @@ class TestEndpoint(base.TestCase):
|
|||
self.resource_updates = {}
|
||||
self.resource_id = 1234
|
||||
self.server_group_id = 3456
|
||||
self.flavor_id = uuidutils.generate_uuid()
|
||||
|
||||
def test_create_load_balancer(self):
|
||||
self.ep.create_load_balancer(self.context, self.resource_id,
|
||||
flavor=self.flavor_id)
|
||||
self.ep.worker.create_load_balancer.assert_called_once_with(
|
||||
self.resource_id, self.flavor_id)
|
||||
|
||||
def test_create_load_balancer_no_flavor(self):
|
||||
self.ep.create_load_balancer(self.context, self.resource_id)
|
||||
self.ep.worker.create_load_balancer.assert_called_once_with(
|
||||
self.resource_id)
|
||||
self.resource_id, None)
|
||||
|
||||
def test_update_load_balancer(self):
|
||||
self.ep.update_load_balancer(self.context, self.resource_id,
|
||||
|
|
|
@ -420,7 +420,8 @@ class TestControllerWorker(base.TestCase):
|
|||
store = {
|
||||
constants.LOADBALANCER_ID: LB_ID,
|
||||
'update_dict': {'topology': constants.TOPOLOGY_SINGLE},
|
||||
constants.BUILD_TYPE_PRIORITY: constants.LB_CREATE_NORMAL_PRIORITY
|
||||
constants.BUILD_TYPE_PRIORITY: constants.LB_CREATE_NORMAL_PRIORITY,
|
||||
constants.FLAVOR: None
|
||||
}
|
||||
lb_mock = mock.MagicMock()
|
||||
lb_mock.listeners = []
|
||||
|
@ -466,7 +467,8 @@ class TestControllerWorker(base.TestCase):
|
|||
store = {
|
||||
constants.LOADBALANCER_ID: LB_ID,
|
||||
'update_dict': {'topology': constants.TOPOLOGY_ACTIVE_STANDBY},
|
||||
constants.BUILD_TYPE_PRIORITY: constants.LB_CREATE_NORMAL_PRIORITY
|
||||
constants.BUILD_TYPE_PRIORITY: constants.LB_CREATE_NORMAL_PRIORITY,
|
||||
constants.FLAVOR: None
|
||||
}
|
||||
setattr(mock_lb_repo_get.return_value, 'topology',
|
||||
constants.TOPOLOGY_ACTIVE_STANDBY)
|
||||
|
@ -512,7 +514,8 @@ class TestControllerWorker(base.TestCase):
|
|||
store = {
|
||||
constants.LOADBALANCER_ID: LB_ID,
|
||||
'update_dict': {'topology': constants.TOPOLOGY_SINGLE},
|
||||
constants.BUILD_TYPE_PRIORITY: constants.LB_CREATE_NORMAL_PRIORITY
|
||||
constants.BUILD_TYPE_PRIORITY: constants.LB_CREATE_NORMAL_PRIORITY,
|
||||
constants.FLAVOR: None
|
||||
}
|
||||
|
||||
cw = controller_worker.ControllerWorker()
|
||||
|
@ -564,7 +567,8 @@ class TestControllerWorker(base.TestCase):
|
|||
store = {
|
||||
constants.LOADBALANCER_ID: LB_ID,
|
||||
'update_dict': {'topology': constants.TOPOLOGY_ACTIVE_STANDBY},
|
||||
constants.BUILD_TYPE_PRIORITY: constants.LB_CREATE_NORMAL_PRIORITY
|
||||
constants.BUILD_TYPE_PRIORITY: constants.LB_CREATE_NORMAL_PRIORITY,
|
||||
constants.FLAVOR: None
|
||||
}
|
||||
|
||||
cw = controller_worker.ControllerWorker()
|
||||
|
|
Loading…
Reference in New Issue