Merge branch 'stable-2.9' into stable-2.10
[ganeti-local] / lib / query.py
index 1c2759b..fa0027f 100644 (file)
@@ -1722,6 +1722,24 @@ def _GetInstNicBridge(ctx, index, _):
     return _FS_UNAVAIL
 
 
+def _GetInstNicVLan(ctx, index, _):
+  """Get a NIC's VLAN.
+
+  @type ctx: L{InstanceQueryData}
+  @type index: int
+  @param index: NIC index
+
+  """
+  assert len(ctx.inst_nicparams) >= index
+
+  nicparams = ctx.inst_nicparams[index]
+
+  if nicparams[constants.NIC_MODE] == constants.NIC_MODE_OVS:
+    return nicparams[constants.NIC_VLAN]
+  else:
+    return _FS_UNAVAIL
+
+
 def _GetInstAllNicNetworkNames(ctx, inst):
   """Get all network names for an instance.
 
@@ -1766,6 +1784,29 @@ def _GetInstAllNicBridges(ctx, inst):
   return result
 
 
+def _GetInstAllNicVlans(ctx, inst):
+  """Get all network VLANs of an instance.
+
+  @type ctx: L{InstanceQueryData}
+  @type inst: L{objects.Instance}
+  @param inst: Instance object
+
+  """
+  assert len(ctx.inst_nicparams) == len(inst.nics)
+
+  result = []
+
+  for nicp in ctx.inst_nicparams:
+    if nicp[constants.NIC_MODE] == constants.NIC_MODE_OVS:
+      result.append(nicp[constants.NIC_VLAN])
+    else:
+      result.append(None)
+
+  assert len(result) == len(inst.nics)
+
+  return result
+
+
 def _GetInstNicParam(name):
   """Build function for retrieving a NIC parameter.
 
@@ -1825,6 +1866,9 @@ def _GetInstanceNetworkFields():
                 "List containing each network interface's link"), IQ_CONFIG, 0,
      lambda ctx, inst: [nicp[constants.NIC_LINK]
                         for nicp in ctx.inst_nicparams]),
+    (_MakeField("nic.vlans", "NIC_VLANs", QFT_OTHER,
+                "List containing each network interface's VLAN"),
+     IQ_CONFIG, 0, _GetInstAllNicVlans),
     (_MakeField("nic.bridges", "NIC_bridges", QFT_OTHER,
                 "List containing each network interface's bridge"),
      IQ_CONFIG, 0, _GetInstAllNicBridges),
@@ -1861,6 +1905,9 @@ def _GetInstanceNetworkFields():
       (_MakeField("nic.bridge/%s" % i, "NicBridge/%s" % i, QFT_TEXT,
                   "Bridge of %s network interface" % numtext),
        IQ_CONFIG, 0, _GetInstNic(i, _GetInstNicBridge)),
+      (_MakeField("nic.vlan/%s" % i, "NicVLAN/%s" % i, QFT_TEXT,
+                  "VLAN of %s network interface" % numtext),
+       IQ_CONFIG, 0, _GetInstNic(i, _GetInstNicVLan)),
       (_MakeField("nic.network/%s" % i, "NicNetwork/%s" % i, QFT_TEXT,
                   "Network of %s network interface" % numtext),
        IQ_CONFIG, 0, _GetInstNic(i, _GetInstNicNetwork)),