Move function get_subnet to kuryr_kubernetes.utils
Since the function _get_subnet is widely used by different components, I move it to kuryr_kubernetes.utils as a part of common utilities. Change-Id: I9a80fb55f5c02274fb50c4c92eb3514ccb42830e
This commit is contained in:
parent
776e3e1760
commit
5fa529efa4
|
@ -13,45 +13,11 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from oslo_cache import core as cache
|
||||
from oslo_config import cfg
|
||||
|
||||
from kuryr_kubernetes import clients
|
||||
from kuryr_kubernetes import config
|
||||
from kuryr_kubernetes.controller.drivers import base
|
||||
from kuryr_kubernetes import os_vif_util
|
||||
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
||||
subnet_caching_opts = [
|
||||
cfg.BoolOpt('caching', default=True),
|
||||
cfg.IntOpt('cache_time', default=3600),
|
||||
]
|
||||
|
||||
CONF.register_opts(subnet_caching_opts, "subnet_caching")
|
||||
|
||||
cache.configure(CONF)
|
||||
subnet_cache_region = cache.create_region()
|
||||
MEMOIZE = cache.get_memoization_decorator(
|
||||
CONF, subnet_cache_region, "subnet_caching")
|
||||
|
||||
cache.configure_cache_region(CONF, subnet_cache_region)
|
||||
|
||||
|
||||
@MEMOIZE
|
||||
def _get_subnet(subnet_id):
|
||||
neutron = clients.get_neutron_client()
|
||||
|
||||
n_subnet = neutron.show_subnet(subnet_id).get('subnet')
|
||||
network_id = n_subnet['network_id']
|
||||
n_network = neutron.show_network(network_id).get('network')
|
||||
|
||||
subnet = os_vif_util.neutron_to_osvif_subnet(n_subnet)
|
||||
network = os_vif_util.neutron_to_osvif_network(n_network)
|
||||
network.subnets.objects.append(subnet)
|
||||
|
||||
return network
|
||||
from kuryr_kubernetes import utils
|
||||
|
||||
|
||||
class DefaultPodSubnetDriver(base.PodSubnetsDriver):
|
||||
|
@ -68,7 +34,7 @@ class DefaultPodSubnetDriver(base.PodSubnetsDriver):
|
|||
raise cfg.RequiredOptError('pod_subnet',
|
||||
cfg.OptGroup('neutron_defaults'))
|
||||
|
||||
return {subnet_id: _get_subnet(subnet_id)}
|
||||
return {subnet_id: utils.get_subnet(subnet_id)}
|
||||
|
||||
|
||||
class DefaultServiceSubnetDriver(base.ServiceSubnetsDriver):
|
||||
|
@ -85,4 +51,4 @@ class DefaultServiceSubnetDriver(base.ServiceSubnetsDriver):
|
|||
raise cfg.RequiredOptError('service_subnet',
|
||||
cfg.OptGroup('neutron_defaults'))
|
||||
|
||||
return {subnet_id: _get_subnet(subnet_id)}
|
||||
return {subnet_id: utils.get_subnet(subnet_id)}
|
||||
|
|
|
@ -18,8 +18,8 @@ from oslo_serialization import jsonutils
|
|||
from kuryr_kubernetes import clients
|
||||
from kuryr_kubernetes import constants
|
||||
from kuryr_kubernetes.controller.drivers import base
|
||||
from kuryr_kubernetes.controller.drivers import default_subnet
|
||||
from kuryr_kubernetes import exceptions
|
||||
from kuryr_kubernetes import utils
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
@ -65,7 +65,7 @@ class NPWGMultiVIFDriver(base.MultiVIFDriver):
|
|||
config = jsonutils.loads(nad_obj['metadata']['annotations']
|
||||
['openstack.org/kuryr-config'])
|
||||
subnet_id = config[constants.K8S_ANNOTATION_NPWG_CRD_SUBNET_ID]
|
||||
subnet = {subnet_id: default_subnet._get_subnet(subnet_id)}
|
||||
subnet = {subnet_id: utils.get_subnet(subnet_id)}
|
||||
if constants.K8S_ANNOTATION_NPWG_CRD_DRIVER_TYPE not in config:
|
||||
vif_drv = self._drv_vif_pool
|
||||
else:
|
||||
|
|
|
@ -20,6 +20,7 @@ from kuryr_kubernetes import clients
|
|||
from kuryr_kubernetes import constants
|
||||
from kuryr_kubernetes.controller.drivers import default_subnet
|
||||
from kuryr_kubernetes import exceptions
|
||||
from kuryr_kubernetes import utils
|
||||
|
||||
from neutronclient.common import exceptions as n_exc
|
||||
|
||||
|
@ -44,7 +45,7 @@ class NamespacePodSubnetDriver(default_subnet.DefaultPodSubnetDriver):
|
|||
pod_namespace = pod['metadata']['namespace']
|
||||
subnet_id = self._get_namespace_subnet(pod_namespace)
|
||||
|
||||
return {subnet_id: default_subnet._get_subnet(subnet_id)}
|
||||
return {subnet_id: utils.get_subnet(subnet_id)}
|
||||
|
||||
def _get_namespace_subnet(self, namespace):
|
||||
kubernetes = clients.get_kubernetes_client()
|
||||
|
|
|
@ -31,7 +31,6 @@ from kuryr_kubernetes import clients
|
|||
from kuryr_kubernetes import config
|
||||
from kuryr_kubernetes import constants
|
||||
from kuryr_kubernetes.controller.drivers import base
|
||||
from kuryr_kubernetes.controller.drivers import default_subnet
|
||||
from kuryr_kubernetes.controller.drivers import utils as c_utils
|
||||
from kuryr_kubernetes.controller.managers import pool
|
||||
from kuryr_kubernetes import exceptions
|
||||
|
@ -375,7 +374,7 @@ class NeutronVIFPool(BaseVIFPool):
|
|||
for port in available_ports:
|
||||
subnet_id = port['fixed_ips'][0]['subnet_id']
|
||||
subnet = {
|
||||
subnet_id: default_subnet._get_subnet(subnet_id)}
|
||||
subnet_id: utils.get_subnet(subnet_id)}
|
||||
vif_plugin = self._drv_vif._get_vif_plugin(port)
|
||||
vif = ovu.neutron_to_osvif_vif(vif_plugin, port, subnet)
|
||||
net_obj = subnet[subnet_id]
|
||||
|
@ -592,7 +591,7 @@ class NestedVIFPool(BaseVIFPool):
|
|||
subnet_id = port['fixed_ips'][0]['subnet_id']
|
||||
if not subnets.get(subnet_id):
|
||||
subnets[subnet_id] = {subnet_id:
|
||||
default_subnet._get_subnet(
|
||||
utils.get_subnet(
|
||||
subnet_id)}
|
||||
return parent_ports, subports, subnets
|
||||
|
||||
|
|
|
@ -19,13 +19,11 @@ from oslo_config import cfg
|
|||
|
||||
from kuryr_kubernetes.controller.drivers import default_subnet
|
||||
from kuryr_kubernetes.tests import base as test_base
|
||||
from kuryr_kubernetes.tests.unit import kuryr_fixtures as k_fix
|
||||
|
||||
|
||||
class TestDefaultPodSubnetDriver(test_base.TestCase):
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers'
|
||||
'.default_subnet._get_subnet')
|
||||
@mock.patch('kuryr_kubernetes.utils.get_subnet')
|
||||
@mock.patch('kuryr_kubernetes.config.CONF')
|
||||
def test_get_subnets(self, m_cfg, m_get_subnet):
|
||||
subnet_id = mock.sentinel.subnet_id
|
||||
|
@ -41,8 +39,7 @@ class TestDefaultPodSubnetDriver(test_base.TestCase):
|
|||
self.assertEqual({subnet_id: subnet}, subnets)
|
||||
m_get_subnet.assert_called_once_with(subnet_id)
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers'
|
||||
'.default_subnet._get_subnet')
|
||||
@mock.patch('kuryr_kubernetes.utils.get_subnet')
|
||||
def test_get_subnets_not_set(self, m_get_subnet):
|
||||
pod = mock.sentinel.pod
|
||||
project_id = mock.sentinel.project_id
|
||||
|
@ -55,8 +52,7 @@ class TestDefaultPodSubnetDriver(test_base.TestCase):
|
|||
|
||||
class TestDefaultServiceSubnetDriver(test_base.TestCase):
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers'
|
||||
'.default_subnet._get_subnet')
|
||||
@mock.patch('kuryr_kubernetes.utils.get_subnet')
|
||||
@mock.patch('kuryr_kubernetes.config.CONF')
|
||||
def test_get_subnets(self, m_cfg, m_get_subnet):
|
||||
subnet_id = mock.sentinel.subnet_id
|
||||
|
@ -72,8 +68,7 @@ class TestDefaultServiceSubnetDriver(test_base.TestCase):
|
|||
self.assertEqual({subnet_id: subnet}, subnets)
|
||||
m_get_subnet.assert_called_once_with(subnet_id)
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers'
|
||||
'.default_subnet._get_subnet')
|
||||
@mock.patch('kuryr_kubernetes.utils.get_subnet')
|
||||
def test_get_subnets_not_set(self, m_get_subnet):
|
||||
service = mock.sentinel.service
|
||||
project_id = mock.sentinel.project_id
|
||||
|
@ -81,34 +76,3 @@ class TestDefaultServiceSubnetDriver(test_base.TestCase):
|
|||
self.assertRaises(cfg.RequiredOptError, driver.get_subnets,
|
||||
service, project_id)
|
||||
m_get_subnet.assert_not_called()
|
||||
|
||||
|
||||
class TestGetSubnet(test_base.TestCase):
|
||||
|
||||
@mock.patch('kuryr_kubernetes.os_vif_util.neutron_to_osvif_network')
|
||||
@mock.patch('kuryr_kubernetes.os_vif_util.neutron_to_osvif_subnet')
|
||||
def test_get_subnet(self, m_osv_subnet, m_osv_network):
|
||||
neutron = self.useFixture(k_fix.MockNeutronClient()).client
|
||||
|
||||
subnet = mock.MagicMock()
|
||||
network = mock.MagicMock()
|
||||
subnet_id = mock.sentinel.subnet_id
|
||||
network_id = mock.sentinel.network_id
|
||||
|
||||
neutron_subnet = {'network_id': network_id}
|
||||
neutron_network = mock.sentinel.neutron_network
|
||||
|
||||
neutron.show_subnet.return_value = {'subnet': neutron_subnet}
|
||||
neutron.show_network.return_value = {'network': neutron_network}
|
||||
|
||||
m_osv_subnet.return_value = subnet
|
||||
m_osv_network.return_value = network
|
||||
|
||||
ret = default_subnet._get_subnet(subnet_id)
|
||||
|
||||
self.assertEqual(network, ret)
|
||||
neutron.show_subnet.assert_called_once_with(subnet_id)
|
||||
neutron.show_network.assert_called_once_with(network_id)
|
||||
m_osv_subnet.assert_called_once_with(neutron_subnet)
|
||||
m_osv_network.assert_called_once_with(neutron_network)
|
||||
network.subnets.objects.append.assert_called_once_with(subnet)
|
||||
|
|
|
@ -135,8 +135,7 @@ class TestNPWGMultiVIFDriver(test_base.TestCase):
|
|||
driver_alias='multi_pool')
|
||||
m_set_vifs_driver.assert_called_once()
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers'
|
||||
'.default_subnet._get_subnet')
|
||||
@mock.patch('kuryr_kubernetes.utils.get_subnet')
|
||||
@mock.patch('kuryr_kubernetes.clients.get_kubernetes_client')
|
||||
def test_request_additional_vifs(self, m_get_client, m_get_subnet):
|
||||
vifs = [mock.sentinel.vif_a, mock.sentinel.vif_b, mock.sentinel.vif_c]
|
||||
|
|
|
@ -65,8 +65,7 @@ def get_namespace_obj():
|
|||
|
||||
class TestNamespacePodSubnetDriver(test_base.TestCase):
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers'
|
||||
'.default_subnet._get_subnet')
|
||||
@mock.patch('kuryr_kubernetes.utils.get_subnet')
|
||||
def test_get_subnets(self, m_get_subnet):
|
||||
project_id = mock.sentinel.project_id
|
||||
pod = get_pod_obj()
|
||||
|
@ -86,8 +85,7 @@ class TestNamespacePodSubnetDriver(test_base.TestCase):
|
|||
m_driver._get_namespace_subnet.assert_called_once_with(pod_namespace)
|
||||
m_get_subnet.assert_called_once_with(subnet_id)
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers'
|
||||
'.default_subnet._get_subnet')
|
||||
@mock.patch('kuryr_kubernetes.utils.get_subnet')
|
||||
def test_get_subnets_namespace_not_ready(self, m_get_subnet):
|
||||
project_id = mock.sentinel.project_id
|
||||
pod = get_pod_obj()
|
||||
|
|
|
@ -612,8 +612,7 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
neutron.delete_port.assert_not_called()
|
||||
|
||||
@mock.patch('kuryr_kubernetes.os_vif_util.neutron_to_osvif_vif')
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.default_subnet.'
|
||||
'_get_subnet')
|
||||
@mock.patch('kuryr_kubernetes.utils.get_subnet')
|
||||
def test__recover_precreated_ports(self, m_get_subnet, m_to_osvif):
|
||||
cls = vif_pool.NeutronVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
@ -659,8 +658,7 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
self.assertEqual(m_driver._available_ports_pools[pool_key], [port_id])
|
||||
|
||||
@mock.patch('kuryr_kubernetes.os_vif_util.neutron_to_osvif_vif')
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.default_subnet.'
|
||||
'_get_subnet')
|
||||
@mock.patch('kuryr_kubernetes.utils.get_subnet')
|
||||
def test__recover_precreated_ports_empty(self, m_get_subnet, m_to_osvif):
|
||||
cls = vif_pool.NeutronVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
@ -1071,8 +1069,7 @@ class NestedVIFPool(test_base.TestCase):
|
|||
self.assertEqual(ip_address, cls._get_parent_port_ip(m_driver,
|
||||
port_id))
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.default_subnet.'
|
||||
'_get_subnet')
|
||||
@mock.patch('kuryr_kubernetes.utils.get_subnet')
|
||||
def test__get_trunk_info(self, m_get_subnet):
|
||||
cls = vif_pool.NestedVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
|
|
@ -17,6 +17,7 @@ import os
|
|||
from oslo_config import cfg
|
||||
|
||||
from kuryr_kubernetes.tests import base as test_base
|
||||
from kuryr_kubernetes.tests.unit import kuryr_fixtures as k_fix
|
||||
from kuryr_kubernetes import utils
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
@ -68,3 +69,31 @@ class TestUtils(test_base.TestCase):
|
|||
m_get.assert_called_once_with(
|
||||
'http://localhost:%d' % CONF.kubernetes.controller_ha_elector_port)
|
||||
self.assertIsNone(res)
|
||||
|
||||
@mock.patch('kuryr_kubernetes.os_vif_util.neutron_to_osvif_network')
|
||||
@mock.patch('kuryr_kubernetes.os_vif_util.neutron_to_osvif_subnet')
|
||||
def test_get_subnet(self, m_osv_subnet, m_osv_network):
|
||||
neutron = self.useFixture(k_fix.MockNeutronClient()).client
|
||||
|
||||
subnet = mock.MagicMock()
|
||||
network = mock.MagicMock()
|
||||
subnet_id = mock.sentinel.subnet_id
|
||||
network_id = mock.sentinel.network_id
|
||||
|
||||
neutron_subnet = {'network_id': network_id}
|
||||
neutron_network = mock.sentinel.neutron_network
|
||||
|
||||
neutron.show_subnet.return_value = {'subnet': neutron_subnet}
|
||||
neutron.show_network.return_value = {'network': neutron_network}
|
||||
|
||||
m_osv_subnet.return_value = subnet
|
||||
m_osv_network.return_value = network
|
||||
|
||||
ret = utils.get_subnet(subnet_id)
|
||||
|
||||
self.assertEqual(network, ret)
|
||||
neutron.show_subnet.assert_called_once_with(subnet_id)
|
||||
neutron.show_network.assert_called_once_with(network_id)
|
||||
m_osv_subnet.assert_called_once_with(neutron_subnet)
|
||||
m_osv_network.assert_called_once_with(neutron_network)
|
||||
network.subnets.objects.append.assert_called_once_with(subnet)
|
||||
|
|
|
@ -17,10 +17,14 @@ import time
|
|||
|
||||
import requests
|
||||
|
||||
from oslo_cache import core as cache
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log
|
||||
from oslo_serialization import jsonutils
|
||||
|
||||
from kuryr_kubernetes import clients
|
||||
from kuryr_kubernetes import os_vif_util
|
||||
|
||||
CONF = cfg.CONF
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
@ -33,6 +37,22 @@ VALID_MULTI_POD_POOLS_OPTS = {'noop': ['neutron-vif',
|
|||
DEFAULT_TIMEOUT = 180
|
||||
DEFAULT_INTERVAL = 3
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
||||
subnet_caching_opts = [
|
||||
cfg.BoolOpt('caching', default=True),
|
||||
cfg.IntOpt('cache_time', default=3600),
|
||||
]
|
||||
|
||||
CONF.register_opts(subnet_caching_opts, "subnet_caching")
|
||||
|
||||
cache.configure(CONF)
|
||||
subnet_cache_region = cache.create_region()
|
||||
MEMOIZE = cache.get_memoization_decorator(
|
||||
CONF, subnet_cache_region, "subnet_caching")
|
||||
|
||||
cache.configure_cache_region(CONF, subnet_cache_region)
|
||||
|
||||
|
||||
def utf8_json_decoder(byte_data):
|
||||
"""Deserializes the bytes into UTF-8 encoded JSON.
|
||||
|
@ -122,3 +142,18 @@ def get_leader_name():
|
|||
# NOTE(dulek): Assuming there's no leader when we can't contact leader
|
||||
# elector container.
|
||||
return None
|
||||
|
||||
|
||||
@MEMOIZE
|
||||
def get_subnet(subnet_id):
|
||||
neutron = clients.get_neutron_client()
|
||||
|
||||
n_subnet = neutron.show_subnet(subnet_id).get('subnet')
|
||||
network_id = n_subnet['network_id']
|
||||
n_network = neutron.show_network(network_id).get('network')
|
||||
|
||||
subnet = os_vif_util.neutron_to_osvif_subnet(n_subnet)
|
||||
network = os_vif_util.neutron_to_osvif_network(n_network)
|
||||
network.subnets.objects.append(subnet)
|
||||
|
||||
return network
|
||||
|
|
Loading…
Reference in New Issue