Move vifs to 'status' in the KuryrPort CRD.
I newly added CRD, KuryrPort, we noticed, that vifs key, which is now under 'spec' object, is rather a thing which could be represented as the CRD status. In this patch we propose to move vifs data under the status key. Depends-On: I2cb66e25534e44b79f660b10498086aa88ad805c Change-Id: I71385799775f9f9cc928e4d39a0fd443c98b53c6
This commit is contained in:
parent
31770d7ada
commit
1aa6753d80
|
@ -24,12 +24,16 @@ spec:
|
|||
required:
|
||||
- podUid
|
||||
- podNodeName
|
||||
- vifs
|
||||
properties:
|
||||
podUid:
|
||||
type: string
|
||||
podNodeName:
|
||||
type: string
|
||||
status:
|
||||
type: object
|
||||
required:
|
||||
- vifs
|
||||
properties:
|
||||
vifs:
|
||||
type: object
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
|
|
|
@ -163,7 +163,7 @@ class DpdkDriver(health.HealthHandler, b_base.BaseBindingDriver):
|
|||
vifs = {k: {'default': v['default'],
|
||||
'vif': objects.base.VersionedObject
|
||||
.obj_from_primitive(v['vif'])}
|
||||
for k, v in kp['spec']['vifs'].items()}
|
||||
for k, v in kp['status']['vifs'].items()}
|
||||
except (KeyError, AttributeError):
|
||||
LOG.exception(f"No vifs found on KuryrPort: {kp}")
|
||||
raise
|
||||
|
@ -177,12 +177,12 @@ class DpdkDriver(health.HealthHandler, b_base.BaseBindingDriver):
|
|||
kp_link):
|
||||
k8s = clients.get_kubernetes_client()
|
||||
if vifs:
|
||||
spec = {k: {'default': v['default'],
|
||||
'vif': v['vif'].obj_to_primitive()}
|
||||
for k, v in vifs.items()}
|
||||
vif_dict = {k: {'default': v['default'],
|
||||
'vif': v['vif'].obj_to_primitive()}
|
||||
for k, v in vifs.items()}
|
||||
|
||||
LOG.info("Setting VIFs in KuryrPort %r", spec)
|
||||
k8s.patch_crd('spec', kp_link, {'vifs': spec})
|
||||
LOG.info("Setting VIFs in KuryrPort %r", vif_dict)
|
||||
k8s.patch_crd('status', kp_link, {'vifs': vif_dict})
|
||||
|
||||
if not labels:
|
||||
LOG.info("Removing Label annotation: %r", labels)
|
||||
|
|
|
@ -23,7 +23,6 @@ from kuryr_kubernetes import constants as k_const
|
|||
from kuryr_kubernetes import exceptions as k_exc
|
||||
from kuryr_kubernetes.handlers import dispatch as k_dis
|
||||
from kuryr_kubernetes.handlers import k8s_base
|
||||
from kuryr_kubernetes import utils
|
||||
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
@ -70,7 +69,9 @@ class CNIHandlerBase(k8s_base.ResourceEventHandler, metaclass=abc.ABCMeta):
|
|||
except k_exc.K8sClientException:
|
||||
return {}
|
||||
|
||||
vifs_dict = utils.get_vifs_from_crd(kuryrport_crd)
|
||||
vifs_dict = {k: obj_vif.base.VersionedObject
|
||||
.obj_from_primitive(v['vif'])
|
||||
for k, v in kuryrport_crd['status']['vifs'].items()}
|
||||
LOG.debug("Got vifs: %r", vifs_dict)
|
||||
|
||||
return vifs_dict
|
||||
|
|
|
@ -74,13 +74,13 @@ def get_vifs(pod):
|
|||
kp = get_kuryrport(pod)
|
||||
try:
|
||||
return {k: objects.base.VersionedObject.obj_from_primitive(v['vif'])
|
||||
for k, v in kp['spec']['vifs'].items()}
|
||||
for k, v in kp['status']['vifs'].items()}
|
||||
except (KeyError, AttributeError, TypeError):
|
||||
return {}
|
||||
|
||||
|
||||
def is_host_network(pod):
|
||||
return pod['spec'].get('hostNetwork', False)
|
||||
return pod['status'].get('hostNetwork', False)
|
||||
|
||||
|
||||
def get_pods(selector, namespace=None):
|
||||
|
@ -277,7 +277,7 @@ def create_security_group_rule_body(
|
|||
def get_pod_ip(pod):
|
||||
try:
|
||||
kp = get_kuryrport(pod)
|
||||
vif = [x['vif'] for x in kp['spec']['vifs'].values()
|
||||
vif = [x['vif'] for x in kp['status']['vifs'].values()
|
||||
if x['default']][0]
|
||||
except (KeyError, TypeError, IndexError):
|
||||
return None
|
||||
|
|
|
@ -58,7 +58,7 @@ class KuryrPortHandler(k8s_base.ResourceEventHandler):
|
|||
self.k8s = clients.get_kubernetes_client()
|
||||
|
||||
def on_present(self, kuryrport_crd):
|
||||
if not kuryrport_crd['spec']['vifs']:
|
||||
if not kuryrport_crd['status']['vifs']:
|
||||
# Get vifs
|
||||
if not self.get_vifs(kuryrport_crd):
|
||||
# Ignore this event, according to one of the cases logged in
|
||||
|
@ -68,7 +68,7 @@ class KuryrPortHandler(k8s_base.ResourceEventHandler):
|
|||
vifs = {ifname: {'default': data['default'],
|
||||
'vif': objects.base.VersionedObject
|
||||
.obj_from_primitive(data['vif'])}
|
||||
for ifname, data in kuryrport_crd['spec']['vifs'].items()}
|
||||
for ifname, data in kuryrport_crd['status']['vifs'].items()}
|
||||
|
||||
if all([v['vif'].active for v in vifs.values()]):
|
||||
return
|
||||
|
@ -167,7 +167,7 @@ class KuryrPortHandler(k8s_base.ResourceEventHandler):
|
|||
# properly released.
|
||||
security_groups = []
|
||||
|
||||
for data in kuryrport_crd['spec']['vifs'].values():
|
||||
for data in kuryrport_crd['status']['vifs'].values():
|
||||
vif = objects.base.VersionedObject.obj_from_primitive(data['vif'])
|
||||
self._drv_vif_pool.release_vif(pod, vif, project_id,
|
||||
security_groups)
|
||||
|
@ -243,14 +243,14 @@ class KuryrPortHandler(k8s_base.ResourceEventHandler):
|
|||
|
||||
def _update_kuryrport_crd(self, kuryrport_crd, vifs):
|
||||
LOG.debug('Updatting CRD %s', kuryrport_crd["metadata"]["name"])
|
||||
spec = {}
|
||||
vif_dict = {}
|
||||
for ifname, data in vifs.items():
|
||||
data['vif'].obj_reset_changes(recursive=True)
|
||||
spec[ifname] = {'default': data['default'],
|
||||
'vif': data['vif'].obj_to_primitive()}
|
||||
vif_dict[ifname] = {'default': data['default'],
|
||||
'vif': data['vif'].obj_to_primitive()}
|
||||
|
||||
self.k8s.patch_crd('spec', kuryrport_crd['metadata']['selfLink'],
|
||||
{'vifs': spec})
|
||||
self.k8s.patch_crd('status', kuryrport_crd['metadata']['selfLink'],
|
||||
{'vifs': vif_dict})
|
||||
|
||||
def _is_network_policy_enabled(self):
|
||||
enabled_handlers = oslo_cfg.CONF.kubernetes.enabled_handlers
|
||||
|
|
|
@ -113,7 +113,7 @@ class PodLabelHandler(k8s_base.ResourceEventHandler):
|
|||
def _has_vifs(self, pod):
|
||||
try:
|
||||
kp = driver_utils.get_vifs(pod)
|
||||
vifs = kp['spec']['vifs']
|
||||
vifs = kp['status']['vifs']
|
||||
LOG.debug("Pod have associated KuryrPort with vifs: %s", vifs)
|
||||
except KeyError:
|
||||
return False
|
||||
|
|
|
@ -173,7 +173,9 @@ class VIFHandler(k8s_base.ResourceEventHandler):
|
|||
},
|
||||
'spec': {
|
||||
'podUid': pod['metadata']['uid'],
|
||||
'podNodeName': pod['spec']['nodeName'],
|
||||
'podNodeName': pod['spec']['nodeName']
|
||||
},
|
||||
'status': {
|
||||
'vifs': vifs
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,9 +63,9 @@ class TestKuryrPortHandler(test_base.TestCase):
|
|||
},
|
||||
'spec': {
|
||||
'podUid': 'deadbeef',
|
||||
'podNodeName': self._host,
|
||||
'vifs': {}
|
||||
}
|
||||
'podNodeName': self._host
|
||||
},
|
||||
'status': {'vifs': {}}
|
||||
}
|
||||
self._vif1 = os_obj.vif.VIFBase()
|
||||
self._vif2 = os_obj.vif.VIFBase()
|
||||
|
@ -130,7 +130,7 @@ class TestKuryrPortHandler(test_base.TestCase):
|
|||
update_crd, get_project):
|
||||
ged.return_value = [mock.MagicMock]
|
||||
kp = kuryrport.KuryrPortHandler()
|
||||
self._kp['spec']['vifs'] = self._vifs_primitive
|
||||
self._kp['status']['vifs'] = self._vifs_primitive
|
||||
get_project.return_value = self._project_id
|
||||
|
||||
with mock.patch.object(kp, 'k8s') as k8s:
|
||||
|
@ -152,7 +152,7 @@ class TestKuryrPortHandler(test_base.TestCase):
|
|||
kp = kuryrport.KuryrPortHandler()
|
||||
self._vif1.active = True
|
||||
self._vif2.active = True
|
||||
self._kp['spec']['vifs'] = {
|
||||
self._kp['status']['vifs'] = {
|
||||
'eth0': {'default': True,
|
||||
'vif': self._vif1.obj_to_primitive()},
|
||||
'eth1': {'default': False,
|
||||
|
@ -171,7 +171,7 @@ class TestKuryrPortHandler(test_base.TestCase):
|
|||
update_crd):
|
||||
ged.return_value = [self._driver]
|
||||
kp = kuryrport.KuryrPortHandler()
|
||||
self._kp['spec']['vifs'] = self._vifs_primitive
|
||||
self._kp['status']['vifs'] = self._vifs_primitive
|
||||
activate_vif.side_effect = os_exc.ResourceNotFound()
|
||||
|
||||
kp.on_present(self._kp)
|
||||
|
@ -187,7 +187,7 @@ class TestKuryrPortHandler(test_base.TestCase):
|
|||
def test_on_present_pod_not_found(self, ged, get_k8s_client, activate_vif):
|
||||
ged.return_value = [self._driver]
|
||||
kp = kuryrport.KuryrPortHandler()
|
||||
self._kp['spec']['vifs'] = self._vifs_primitive
|
||||
self._kp['status']['vifs'] = self._vifs_primitive
|
||||
|
||||
with mock.patch.object(kp, 'k8s') as k8s:
|
||||
k8s.get.side_effect = k_exc.K8sResourceNotFound(self._pod)
|
||||
|
@ -215,7 +215,7 @@ class TestKuryrPortHandler(test_base.TestCase):
|
|||
get_sg, release_vif):
|
||||
ged.return_value = [self._driver]
|
||||
kp = kuryrport.KuryrPortHandler()
|
||||
self._kp['spec']['vifs'] = self._vifs_primitive
|
||||
self._kp['status']['vifs'] = self._vifs_primitive
|
||||
update_crd.side_effect = k_exc.K8sResourceNotFound(self._kp)
|
||||
get_project.return_value = self._project_id
|
||||
get_sg.return_value = self._security_groups
|
||||
|
@ -246,7 +246,7 @@ class TestKuryrPortHandler(test_base.TestCase):
|
|||
get_sg, release_vif):
|
||||
ged.return_value = [self._driver]
|
||||
kp = kuryrport.KuryrPortHandler()
|
||||
self._kp['spec']['vifs'] = self._vifs_primitive
|
||||
self._kp['status']['vifs'] = self._vifs_primitive
|
||||
update_crd.side_effect = k_exc.K8sClientException()
|
||||
get_project.return_value = self._project_id
|
||||
get_sg.return_value = self._security_groups
|
||||
|
@ -273,7 +273,7 @@ class TestKuryrPortHandler(test_base.TestCase):
|
|||
kp = kuryrport.KuryrPortHandler()
|
||||
self._vif2.plugin = constants.KURYR_VIF_TYPE_SRIOV
|
||||
self._vif2.active = True
|
||||
self._kp['spec']['vifs'] = {
|
||||
self._kp['status']['vifs'] = {
|
||||
'eth0': {'default': True,
|
||||
'vif': self._vif2.obj_to_primitive()},
|
||||
'eth1': {'default': False,
|
||||
|
@ -313,7 +313,7 @@ class TestKuryrPortHandler(test_base.TestCase):
|
|||
get_services, get_project):
|
||||
ged.return_value = [self._driver]
|
||||
kp = kuryrport.KuryrPortHandler()
|
||||
self._kp['spec']['vifs'] = self._vifs_primitive
|
||||
self._kp['status']['vifs'] = self._vifs_primitive
|
||||
|
||||
with mock.patch.object(kp, 'k8s') as k8s:
|
||||
k8s.get.return_value = self._pod
|
||||
|
@ -333,7 +333,7 @@ class TestKuryrPortHandler(test_base.TestCase):
|
|||
def test_on_finalize_exception_on_pod(self, ged, k8s):
|
||||
ged.return_value = [self._driver]
|
||||
kp = kuryrport.KuryrPortHandler()
|
||||
self._kp['spec']['vifs'] = self._vifs_primitive
|
||||
self._kp['status']['vifs'] = self._vifs_primitive
|
||||
|
||||
with mock.patch.object(kp, 'k8s') as k8s:
|
||||
k8s.get.side_effect = k_exc.K8sResourceNotFound(self._pod)
|
||||
|
@ -353,7 +353,7 @@ class TestKuryrPortHandler(test_base.TestCase):
|
|||
is_host_network):
|
||||
ged.return_value = [self._driver]
|
||||
kp = kuryrport.KuryrPortHandler()
|
||||
self._kp['spec']['vifs'] = self._vifs_primitive
|
||||
self._kp['status']['vifs'] = self._vifs_primitive
|
||||
is_host_network.return_value = False
|
||||
_pod = dict(self._pod)
|
||||
del _pod['spec']['nodeName']
|
||||
|
@ -394,7 +394,7 @@ class TestKuryrPortHandler(test_base.TestCase):
|
|||
get_sg, release_vif):
|
||||
ged.return_value = [self._driver]
|
||||
kp = kuryrport.KuryrPortHandler()
|
||||
self._kp['spec']['vifs'] = self._vifs_primitive
|
||||
self._kp['status']['vifs'] = self._vifs_primitive
|
||||
is_host_network.return_value = False
|
||||
get_project.return_value = self._project_id
|
||||
delete_sg_rules.side_effect = k_exc.ResourceNotReady(self._pod)
|
||||
|
@ -447,7 +447,7 @@ class TestKuryrPortHandler(test_base.TestCase):
|
|||
self.addCleanup(CONF.clear_override, 'enforce_sg_rules',
|
||||
group='octavia_defaults')
|
||||
kp = kuryrport.KuryrPortHandler()
|
||||
self._kp['spec']['vifs'] = self._vifs_primitive
|
||||
self._kp['status']['vifs'] = self._vifs_primitive
|
||||
is_host_network.return_value = False
|
||||
get_project.return_value = self._project_id
|
||||
selector = mock.sentinel.selector
|
||||
|
@ -686,10 +686,10 @@ class TestKuryrPortHandler(test_base.TestCase):
|
|||
vif2 = self._vif2.obj_to_primitive()
|
||||
|
||||
kp.k8s.patch_crd.assert_called_once_with(
|
||||
'spec', self._kp_link, {'vifs': {'eth0': {'default': True,
|
||||
'vif': vif1},
|
||||
'eth1': {'default': False,
|
||||
'vif': vif2}}})
|
||||
'status', self._kp_link, {'vifs': {'eth0': {'default': True,
|
||||
'vif': vif1},
|
||||
'eth1': {'default': False,
|
||||
'vif': vif2}}})
|
||||
|
||||
@mock.patch('kuryr_kubernetes.clients.get_kubernetes_client')
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.base.MultiVIFDriver.'
|
||||
|
|
|
@ -65,8 +65,8 @@ class TestVIFHandler(test_base.TestCase):
|
|||
'namespace': self._pod_namespace,
|
||||
'labels': mock.ANY},
|
||||
'spec': {'podUid': self._pod_uid,
|
||||
'podNodeName': 'hostname',
|
||||
'vifs': {}}}
|
||||
'podNodeName': 'hostname'},
|
||||
'status': {'vifs': {}}}
|
||||
|
||||
self._handler = mock.MagicMock(spec=h_vif.VIFHandler)
|
||||
self._handler._drv_project = mock.Mock(spec=drivers.PodProjectDriver)
|
||||
|
|
|
@ -252,15 +252,6 @@ def extract_pod_annotation(annotation):
|
|||
return obj
|
||||
|
||||
|
||||
def get_vifs_from_crd(crd):
|
||||
result = {}
|
||||
for ifname in crd['spec']['vifs']:
|
||||
result[ifname] = (objects.base.VersionedObject
|
||||
.obj_from_primitive(crd['spec']['vifs']
|
||||
[ifname]['vif']))
|
||||
return result
|
||||
|
||||
|
||||
def has_limit(quota):
|
||||
NO_LIMIT = -1
|
||||
return quota['limit'] != NO_LIMIT
|
||||
|
|
Loading…
Reference in New Issue