#!/usr/bin/env bash # 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. METADATA_FILE="metadata.ini" IMAGE_PATH=${3:-"/usr/share/cloudstack-management/templates/systemvm/"} TEMPLATE_VERSION=$(awk -F "=" '/version/ {print $2}' ${IMAGE_PATH}${METADATA_FILE} | xargs) TEMPLATE_PATH="/usr/share/cloudstack-management/templates/systemvm/" VERSION="${TEMPLATE_VERSION%.*}" PREFIX=${4:-"systemvmtemplate-$VERSION"} CLEANUP=${2:-1} TEMP_IMAGE_PATH="/tmp/sysvm_convert/" initial_setup() { mkdir -p $TEMP_IMAGE_PATH cp -r $IMAGE_PATH/* $TEMP_IMAGE_PATH cd $TEMP_IMAGE_PATH if [ ! -f ${TEMP_IMAGE_PATH}${PREFIX}-kvm.qcow2 ]; then bzip2 -dc $PREFIX-kvm.qcow2.bz2 > $PREFIX-kvm.qcow2 fi } export_vmware() { initial_setup # Export for KVM virt-sparsify $PREFIX-kvm.qcow2 --compress -o compat=0.10 $PREFIX-kvm-temp.qcow2 # Export for VMware qemu-img convert -f qcow2 -O vmdk -o adapter_type=lsilogic,subformat=streamOptimized,compat6 $PREFIX-kvm-temp.qcow2 $PREFIX-vmware.vmdk size=$(stat --printf="%s" $PREFIX-vmware.vmdk) cat < $PREFIX-vmware.ovf Virtual disk information A virtual machine $PREFIX-vmware The kind of installed guest operating system Virtual hardware requirements Virtual Hardware Family 0 $PREFIX-vmware vmx-11 hertz * 10^6 Number of Virtual CPUs 1 virtual CPU(s) 1 3 1 byte * 2^20 Memory Size 256MB of memory 2 4 256 0 SCSI Controller scsiController0 3 lsilogic 6 0 IDE Controller ideController0 4 5 0 false cdrom0 5 4 15 0 disk0 ovf:/disk/vmdisk1 6 3 17 false video 7 24 false vmci 8 vmware.vmci 1 A human-readable annotation $PREFIX-vmware EOF cat < $PREFIX-vmware.mf SHA1($PREFIX-vmware.ovf)= $(sha1sum $PREFIX-vmware.ovf|awk '{print $1}') SHA1($PREFIX-vmware.vmdk)= $(sha1sum $PREFIX-vmware.vmdk |awk '{print $1}') EOF tar -cvf $PREFIX-vmware.ova $PREFIX-vmware.ovf $PREFIX-vmware.mf $PREFIX-vmware.vmdk checksum=$(md5sum $PREFIX-vmware.ova | awk '{print $1}') sed -i '/^\['"vmware"']/,/^\[/{s/^checksum[[:space:]]*=.*/checksum = '"$checksum"'/}' ./$METADATA_FILE rm -rf *.mf *.ovf *.vmdk sudo cp $TEMP_IMAGE_PATH/$PREFIX-vmware.ova $TEMP_IMAGE_PATH/metadata.ini $IMAGE_PATH cleanup } export_xen() { # Export for XenServer/XCP-ng initial_setup qemu-img convert -f qcow2 -O vpc $PREFIX-kvm.qcow2 $PREFIX-xen.vhd bzip2 $PREFIX-xen.vhd checksum=$(md5sum $PREFIX-xen.vhd.bz2 | awk '{print $1}') sed -i '/^\['"xenserver"']/,/^\[/{s/^checksum[[:space:]]*=.*/checksum = '"$checksum"'/}' $METADATA_FILE rm -rf $PREFIX-xen.vhd sudo cp $TEMP_IMAGE_PATH/$PREFIX-xen* $TEMP_IMAGE_PATH/metadata.ini $IMAGE_PATH cleanup } cleanup() { cd /var/cloudstack/management/ if [ $CLEANUP == 1 ]; then cd /var/cloudstack/management/ rm -rf $TEMP_IMAGE_PATH fi } if [ "$#" -lt 1 ] ; then echo "Usage: $0 [cleanup: 0/1; default: 1] [imagepath: default:/usr/share/cloudstack-management/templates/systemvm/] [templateprefix: default:systemvmtemplate-$VERSION]" >&2 exit 1 fi if [ $1 == "vmware" ]; then echo "exporting vmware template" export_vmware elif [ $1 == "xenserver" ]; then echo "exporting xenserver template" export_xen else echo "Conversion of template to $1's compatible format not supported " fi