This patch extends the NIC related checks of the LUInstanceCreate and LUInstanceSetParams logical units to include the MacVTap connection mode too.
Signed-off-by: Dimitris Bliablias <db...@skroutz.gr> --- lib/cmdlib/instance_create.py | 14 ++++++++++++-- lib/cmdlib/instance_set_params.py | 10 +++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/lib/cmdlib/instance_create.py b/lib/cmdlib/instance_create.py index 4b2c6ee..f8f1917 100644 --- a/lib/cmdlib/instance_create.py +++ b/lib/cmdlib/instance_create.py @@ -73,7 +73,8 @@ from ganeti.cmdlib.instance_utils import \ CheckHostnameSane, CheckOpportunisticLocking, \ ComputeFullBeParams, ComputeNics, GetClusterDomainSecret, \ CheckInstanceExistence, CreateInstanceAllocRequest, BuildInstanceHookEnv, \ - NICListToTuple, CheckNicsBridgesExist, CheckCompressionTool + NICListToTuple, CheckNicsBridgesExist, CheckCompressionTool, \ + ComputeMacvtapModeNicParam import ganeti.masterd.instance @@ -720,7 +721,7 @@ class LUInstanceCreate(LogicalUnit): node_names.append(self.op.snode) self.LogInfo("Nodes of instance %s: %s", name, node_names) - def CheckPrereq(self): # pylint: disable=R0914 + def CheckPrereq(self): # pylint: disable=R0914,R0915 """Check prerequisites. """ @@ -875,6 +876,15 @@ class LUInstanceCreate(LogicalUnit): if nic.mac in (constants.VALUE_AUTO, constants.VALUE_GENERATE): nic.mac = self.cfg.GenerateMAC(nic.network, self.proc.GetECId()) + #### macvtap_mode validation + # In case of a NIC in MacVTap connection mode, we validate and properly + # compute the macvtap_mode nicparam. + mode = nic.nicparams.get(constants.INIC_MODE, None) + if mode == constants.NIC_MODE_MACVTAP: + macvtap_mode = nic.nicparams.get(constants.NIC_MACVTAP_MODE, "") + nic.nicparams[constants.NIC_MACVTAP_MODE] = \ + ComputeMacvtapModeNicParam(macvtap_mode) + #### allocator run if self.op.iallocator is not None: diff --git a/lib/cmdlib/instance_set_params.py b/lib/cmdlib/instance_set_params.py index 486c14e..eb2a4c8 100644 --- a/lib/cmdlib/instance_set_params.py +++ b/lib/cmdlib/instance_set_params.py @@ -64,7 +64,7 @@ from ganeti.cmdlib.instance_utils import BuildInstanceHookEnvByObject, \ NICToTuple, CheckNodeNotDrained, CopyLockList, \ ReleaseLocks, CheckNodeVmCapable, CheckTargetNodeIPolicy, \ GetInstanceInfoText, RemoveDisks, CheckNodeFreeMemory, \ - UpdateMetadata, CheckForConflictingIp, \ + UpdateMetadata, CheckForConflictingIp, ComputeMacvtapModeNicParam, \ PrepareContainerMods, ComputeInstanceCommunicationNIC, \ ApplyContainerMods, ComputeIPolicyInstanceSpecViolation, \ CheckNodesPhysicalCPUs @@ -526,6 +526,14 @@ class LUInstanceSetParams(LogicalUnit): else: new_params = GetUpdatedParams(old_params, update_params_dict) + # In case of a modification of a NIC in MacVTap connection mode, + # check and properly compute the macvtap_mode nicparam. + mode = new_params.get(constants.NIC_MODE, None) + if mode == constants.NIC_MODE_MACVTAP: + req_macvtap_mode = update_params_dict.get(constants.NIC_MACVTAP_MODE, "") + new_params[constants.NIC_MACVTAP_MODE] = \ + ComputeMacvtapModeNicParam(req_macvtap_mode) + utils.ForceDictType(new_params, constants.NICS_PARAMETER_TYPES) new_filled_params = cluster.SimpleFillNIC(new_params) -- 2.1.4