Remove the ARCH field from the image name
[snf-image] / snf-image-host / create
index 83dbf4c..9c063ac 100755 (executable)
@@ -1,33 +1,21 @@
 #!/bin/bash
 
-# Copyright 2011 GRNET S.A. All rights reserved.
+# Copyright (C) 2011 GRNET S.A. 
 #
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
 #
-#   1. Redistributions of source code must retain the above copyright
-#      notice, this list of conditions and the following disclaimer.
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
 #
-#  2. Redistributions in binary form must reproduce the above copyright
-#     notice, this list of conditions and the following disclaimer in the
-#     documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-#
-# The views and conclusions contained in the software and documentation are
-# those of the authors and should not be interpreted as representing official
-# policies, either expressed or implied, of GRNET S.A.
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
 
 set -e
 set -o pipefail
@@ -36,15 +24,14 @@ set -o pipefail
 
 ganeti_os_main
 
-case "$IMAGE_TYPE" in
-    extdump)
-       image_file="$IMAGE_DIR/$IMAGE_NAME-$ARCH.extdump";;
-    ntfsdump)
-        image_file="$IMAGE_DIR/$IMAGE_NAME-$ARCH.ntfsdump";;
-    *)
-        log_error "Unknown image type: \`$IMAGE_TYPE'.";
-        exit 1
-esac
+if [ "$IMAGE_TYPE" = custom ]; then
+    image_file=/dev/null
+    image_size=\
+        $($CURL -sI "$IMAGE_NAME" | grep ^Content-Length: | cut -d" " -f2)
+else
+    image_file="$IMAGE_DIR/$IMAGE_NAME.$IMAGE_TYPE"
+    image_size="$(stat -L -c %s "$image_file")"
+fi
 
 if [ ! -e "$image_file" ]; then
     log_error "Image file \`$image_file' does not exit."
@@ -53,8 +40,7 @@ fi
 
 monitor="" #Empty if progress monitor support is disabled
 if [ "$progress_monitor_support" = "yes" ]; then
-    image_size="$(stat -L -c %s "$image_file")"
-    monitor="$(printf "%q" "$PROGRESS_MONITOR") \
+    monitor="$PROGRESS_MONITOR \
         -i $(printf "%q" "$INSTANCE_NAME") -r $image_size"
 fi
 
@@ -62,22 +48,42 @@ fi
 # This is needed for file disks.
 if [ ! -b "$blockdev" ]; then
     original_blockdev="$blockdev"
-    blockdev=$("$LOSETUP" -sf "$blockdev")
-    add_cleanup "$LOSETUP" -d "$blockdev"
+    blockdev=$($LOSETUP -sf "$blockdev")
+    add_cleanup $LOSETUP -d "$blockdev"
 fi
 
-format_disk0 "$blockdev" "$IMAGE_TYPE"
-
-filesystem_dev=$(map_disk0 "$blockdev")
-add_cleanup unmap_disk0 "$blockdev"
-
-root_dev="${filesystem_dev}-1"
+case "$IMAGE_TYPE" in
+    ntfsdump|extdump)
+        # Create partitions
+        format_disk0 "$blockdev" "$IMAGE_TYPE"
+
+        # Install a new MBR
+        $INSTALL_MBR -p 1 -i n "$blockdev"
+
+        target="$(map_disk0 "$blockdev")-1" #the root device
+        add_cleanup unmap_disk0 "$blockdev"
+        snf_export_PROPERTY_ROOT_PARTITION=1
+        if [ "$IMAGE_TYPE" = "ntfsdump" ]; then
+            snf_export_PROPERTY_OSFAMILY="windows"
+        else
+            snf_export_PROPERTY_OSFAMILY="linux"
+        fi
+        ;;
+    diskdump|custom)
+        target="$blockdev"
+        ;;
+esac
 
-# dd the dump to its new home :-)
-# Deploying an image file on a target block device is a streaming
-# copy operation. Enable the direct I/O flag on the output fd to 
-# avoid polluting the host cache with useless data.
-$monitor dd bs=4M if="$image_file" of="$root_dev" oflag=direct
+if [ "$IMAGE_TYPE" = "custom" ]; then
+    "$CURL" "$IMAGE_NAME" 2>/dev/null |\
+        $monitor dd bs=4M of="$target" oflag=direct
+else
+    # dd the dump to its new home :-)
+    # Deploying an image file on a target block device is a streaming copy
+    # operation. Enable the direct I/O flag on the output fd to avoid polluting
+    # the host cache with useless data.
+    $monitor dd bs=4M if="$image_file" of="$target" oflag=direct
+fi
 
 # Create a floppy image
 floppy=$(mktemp --tmpdir floppy.XXXXXX)
@@ -87,6 +93,9 @@ snf_export_DEV=/dev/vda
 snf_export_TYPE="$IMG_FORMAT"
 snf_export_PASSWORD="$IMG_PASSWD"
 snf_export_HOSTNAME="$instance"
+if [ -n "$IMG_PROPERTIES" ]; then
+    snf_export_PROPERTIES="$IMG_PROPERTIES"
+fi
 if [ -n "$IMG_PERSONALITY" ]; then
     snf_export_PERSONALITY="$IMG_PERSONALITY"
 fi
@@ -102,14 +111,16 @@ add_cleanup rm "$snapshot"
 
 "$QEMU_IMG" create -f qcow2 -b "$HELPER_IMG" "$snapshot"
 
-"$TIMELIMIT" -t "$HELPER_SOFT_TIMEOUT" -T "$HELPER_HARD_TIMEOUT" \
+echo "$(date +%Y:%m:%d-%H:%M:%S.%N) Starting helper VM..."
+$TIMELIMIT -t "$HELPER_SOFT_TIMEOUT" -T "$HELPER_HARD_TIMEOUT" \
     kvm -runas "$HELPER_USER" -drive file="$snapshot" \
-    -drive file="$root_dev",format=raw,if=virtio,cache=none \
+    -drive file="$blockdev",format=raw,if=virtio,cache=none \
     -boot c -serial stdio -serial file:"$result_file" \
     -fda "$floppy" -vga none -nographic -parallel none -monitor null \
     -kernel "$HELPER_KERNEL" -initrd "$HELPER_INITRD" \
     -append "quiet ro root=/dev/sda1 console=ttyS0,9600n8 snf_image_activate_helper" \
     2>&1 | sed 's|^|HELPER: |g'
+echo "$(date +%Y:%m:%d-%H:%M:%S.%N) Helper VM finished."
 
 if [ $? -ne 0 ]; then
     if [ $? -gt 128 ];  then
@@ -126,9 +137,6 @@ if [ "x$result" != "xSUCCESS" ]; then
     exit 1
 fi
 
-# Install a new MBR
-"$INSTALL_MBR" -p 1 -i n "$blockdev"
-
 # Execute cleanups
 cleanup
 trap - EXIT