Files
kuryr-kubernetes/kuryr_kubernetes/objects/vif.py
Danil Golov 5206717f08 Provide a proper way to choose VF in CNI
This commit fixes incorrect way for choosing VF in
SR-IOV binding driver.

Previously sriov-device-plugin has choosen device
by it's own way while CNI choosed first available VF.
This entities did not know anything about each other's
choice.

Now SR-IOV binding driver gets a list of used by
kubelet devices with help of Pod Resources Client, then
chooses device from this list which is not used by pod
yet and passes an appropriate VF into container's
network namespace.

Also this commit contains tools for cluster upgrade.

Change-Id: I5b24981f715966369b05b8ab157f8bfe02afc2d4
Closes-Bug: 1826865
Signed-off-by: Danil Golov <d.golov@samsung.com>
2019-08-27 18:03:46 +03:00

86 lines
2.6 KiB
Python

# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from oslo_versionedobjects import base as obj_base
from oslo_versionedobjects import fields as obj_fields
from os_vif.objects import vif as obj_osvif
from kuryr_kubernetes import constants
from kuryr_kubernetes.objects import base
from kuryr_kubernetes.objects import fields
@obj_base.VersionedObjectRegistry.register
class PodState(base.KuryrK8sObjectBase):
VERSION = '1.0'
# FIXME(dulek): I know it's an ugly hack, but turns out you cannot
# serialize-deserialize objects containing objects from
# different namespaces, so we need 'os_vif' namespace here.
OBJ_PROJECT_NAMESPACE = 'os_vif'
fields = {
'default_vif': obj_fields.ObjectField(obj_osvif.VIFBase.__name__,
subclasses=True, nullable=False),
'additional_vifs': fields.DictOfVIFsField(default={}),
}
@property
def vifs(self):
d = {
constants.DEFAULT_IFNAME: self.default_vif,
}
d.update(self.additional_vifs)
return d
@obj_base.VersionedObjectRegistry.register
class VIFVlanNested(obj_osvif.VIFBase):
# This is OVO based vlan vif.
VERSION = '1.0'
fields = {
# Name of the device to create
'vif_name': obj_fields.StringField(),
# vlan ID allocated to this vif
'vlan_id': obj_fields.IntegerField()
}
@obj_base.VersionedObjectRegistry.register
class VIFMacvlanNested(obj_osvif.VIFBase):
# This is OVO based macvlan vif.
VERSION = '1.0'
fields = {
# Name of the device to create
'vif_name': obj_fields.StringField(),
}
@obj_base.VersionedObjectRegistry.register
class VIFSriov(obj_osvif.VIFDirect):
# This is OVO based SRIOV vif.
# Version 1.0: Initial version
# Version 1.1: Added pod_name field and pod_link field.
VERSION = '1.1'
fields = {
# physnet of the VIF
'physnet': obj_fields.StringField(),
'pod_name': obj_fields.StringField(),
'pod_link': obj_fields.StringField(),
}