| #!/bin/sh | |
| # Licensed to the Apache Software Foundation (ASF) under one | |
| # or more contributor license agreements. See the NOTICE file | |
| # distributed with this work for additional information | |
| # regarding copyright ownership. The ASF licenses this file | |
| # to you 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. | |
| 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 | |
| } | |
| VERSION_RE="\([[:digit:]]\{1,3\}\.\)\{2\}[[:digit:]]\{1,3\}" | |
| 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 INSTALLATION_UUID from here: | |
| . /etc/xensource-inventory | |
| product_version=$(xe host-list params=software-version uuid="$INSTALLATION_UUID" | \ | |
| sed -n -e 's/product_version: \('${VERSION_RE}'\).*/\1/' \ | |
| -e 's/^.*\('${VERSION_RE}'\)/\1/p') | |
| if [ $? -ne 0 ]; then | |
| echo "Failed to get product version" | |
| exit 1 | |
| fi | |
| 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 | |