+# By default, the "vm-id" external id in the Interface table is the
+# same as "xs-vm-uuid". This may be overridden by defining a
+# "nicira-vm-id" key in the "other_config" field of the VM
+# record of XAPI.
+def get_vm_id(if_name, xs_vm_uuid):
+ if not if_name.startswith("vif") and not if_name.startswith("tap"):
+ # Treat whatever was passed into 'xs_vm_uuid' as a default
+ # value for non-VIFs.
+ return xs_vm_uuid
+
+ if not init_session():
+ vlog.warn("Failed to get vm id for interface id %s because"
+ " XAPI session could not be initialized" % if_name)
+ return xs_vm_uuid
+
+ try:
+ vm = session.xenapi.VM.get_by_uuid(xs_vm_uuid)
+ rec = session.xenapi.VM.get_record(vm)
+ return rec['other_config'].get('nicira-vm-id', xs_vm_uuid)
+ except XenAPI.Failure:
+ vlog.warn("Could not find XAPI entry for VIF %s" % if_name)
+ return xs_vm_uuid
+
+