Difference between revisions of "XAPI fake presence of PV drivers"

From Xen
m (Removed superfluous <nowiki></nowiki> tag pairs.)
Line 19: Line 19:
 
The following script takes the VM's uuid and writes the magic xenstore keys to fake the presence of up-to-date PV drivers. It must be run on the same host as the VM.
 
The following script takes the VM's uuid and writes the magic xenstore keys to fake the presence of up-to-date PV drivers. It must be run on the same host as the VM.
  
<pre><nowiki>
+
<pre>
 
#!/bin/sh
 
#!/bin/sh
  
Line 73: Line 73:
 
     ;;
 
     ;;
 
esac
 
esac
</nowiki></pre>
+
</pre>
  
 
[[Category:XCP]]
 
[[Category:XCP]]
 
[[Category:Developers]]
 
[[Category:Developers]]
 
[[Category:Design Document]]
 
[[Category:Design Document]]

Revision as of 01:44, 30 November 2011


Faking the presence of the PV drivers

xapi currently insists that PV drivers are present before allowing the operations:

  • suspend/resume
  • migrate
  • clean reboot/shutdown
  • disk, nic hotplug/unplug

The vast majority of testing is performed with PV drivers and it is recommended that PV drivers are always installed.

However, at the xen-level, plain HVM guests without PV drivers can still be suspend/resumed and migrated, although with reduced performance (e.g. in the case of migrate: longer VM downtime). To make this work it is necessary to "fake" the presence of the PV tools in order to bypass the check in xapi. In future we'll have to create a nicer way of doing this.

The following script takes the VM's uuid and writes the magic xenstore keys to fake the presence of up-to-date PV drivers. It must be run on the same host as the VM.

#!/bin/sh

set -e

usage() {
  echo "$0 <VM uuid>"
  echo " -- fakes the presence of PV tools in <VM uuid>"
  echo " -- NB the VM must be either paused or running on localhost"
}
 
fake(){
  local uuid=$1
  domid=$(xe vm-list uuid=${uuid} params=dom-id --minimal)
  xenstore-write /local/domain/${domid}/attr/PVAddons/MajorVersion ${major} \
	         /local/domain/${domid}/attr/PVAddons/MinorVersion ${minor} \
                 /local/domain/${domid}/attr/PVAddons/MicroVersion ${micro} \
                 /local/domain/${domid}/data/updated 1
}

uuid=$(xe vm-list uuid=$1 params=uuid --minimal)
if [ $? -ne 0 ]; then
  echo "Argument should be a VM uuid"
  usage
  exit 1
fi

# use the PRODUCT_VERSION from here:
. /etc/xensource-inventory

major=$(echo ${PRODUCT_VERSION} | cut -f 1 -d .)
minor=$(echo ${PRODUCT_VERSION} | cut -f 2 -d .)
micro=$(echo ${PRODUCT_VERSION} | cut -f 3 -d .)

# Check the VM is running on this host
resident_on=$(xe vm-list uuid=${uuid} params=resident-on --minimal)
if [ "${resident_on}" != "${INSTALLATION_UUID}" ]; then
  echo "VM must be resident on this host"
  exit 2
fi

power_state=$(xe vm-list uuid=${uuid} params=power-state --minimal)
case "${power_state}" in
  running)
    fake $uuid
    ;;
  paused)
    fake $uuid
    ;;
  *)
    echo "VM must be either running or paused"
    exit 3
    ;;
esac