Create the /images directory used by the resize functionality.

XenServer's resize uses /images as a known-path for each hypervisor.
This is a symlink to the storage repository so disks can be moved between
the /images path and the storage repository efficiently.

Change-Id: I13b39dbf5537ad45160c1af4cc10bd867b7f89c1
diff --git a/tools/xen/functions b/tools/xen/functions
index ebfd483..35c17d7 100644
--- a/tools/xen/functions
+++ b/tools/xen/functions
@@ -24,6 +24,16 @@
     fi
 }
 
+function create_directory_for_images {
+    if [ -d "/images" ]; then
+        echo "INFO: /images directory already exists, using that" >&2
+    else
+        local LOCALPATH="$(get_local_sr_path)/os-images"
+        mkdir -p $LOCALPATH
+        ln -s $LOCALPATH /images
+    fi
+}
+
 function extract_remote_zipball {
     local ZIPBALL_URL=$1
 
diff --git a/tools/xen/install_os_domU.sh b/tools/xen/install_os_domU.sh
index a744869..deaf7e5 100755
--- a/tools/xen/install_os_domU.sh
+++ b/tools/xen/install_os_domU.sh
@@ -63,6 +63,7 @@
 fi
 
 create_directory_for_kernels
+create_directory_for_images
 
 #
 # Configure Networking
diff --git a/tools/xen/test_functions.sh b/tools/xen/test_functions.sh
index 62393ca..410df5f 100755
--- a/tools/xen/test_functions.sh
+++ b/tools/xen/test_functions.sh
@@ -138,6 +138,29 @@
 EOF
 }
 
+function test_create_directory_for_images {
+    (
+        . mocks
+        mock_out get_local_sr uuid1
+        create_directory_for_images
+    )
+
+    assert_directory_exists "/var/run/sr-mount/uuid1/os-images"
+    assert_symlink "/images" "/var/run/sr-mount/uuid1/os-images"
+}
+
+function test_create_directory_for_images_existing_dir {
+    (
+        . mocks
+        given_directory_exists "/images"
+        create_directory_for_images
+    )
+
+    diff -u $LIST_OF_ACTIONS - << EOF
+[ -d /images ]
+EOF
+}
+
 function test_extract_remote_zipball {
     local RESULT=$(. mocks && extract_remote_zipball "someurl")