The cirros image was rebuilt against the 3.13.0-83 kernel, drivers e1000e, igbvf...
[packages/trusty/cirros-testvm.git] / cirros-testvm / src-cirros / src / sbin / cirros-userdata
diff --git a/cirros-testvm/src-cirros/src/sbin/cirros-userdata b/cirros-testvm/src-cirros/src/sbin/cirros-userdata
new file mode 100755 (executable)
index 0000000..9628249
--- /dev/null
@@ -0,0 +1,85 @@
+#!/bin/sh
+
+. ${CIRROS_LIB:=/lib/cirros/shlib_cirros} ||
+       { echo "failed to read ${CIRROS_LIB}" 1>&2; exit 1; }
+
+Usage() {
+       cat <<EOF
+Usage: ${0##*/} [file]
+
+   handle the user-data present in file.
+   If no file is present, retrieve 'user-data' from datasource.
+
+   if no file is given, and no datasource is found, exit silently.
+   
+   options:
+        --dry-run  : only report, do not update results
+   -v | --verbose  : be more verbose
+EOF
+}
+
+cirros_userdata() {
+       local short_opts="hv"
+       local long_opts="help,dry-run,verbose"
+       local getopt_out=""
+       getopt_out=$(getopt --name "${0##*/}" \
+               --options "${short_opts}" --long "${long_opts}" -- "$@") &&
+               eval set -- "${getopt_out}" ||
+               { bad_Usage; return; }
+
+       local dryrun=false cur="" next="" VERBOSITY="$VERBOSITY"
+
+       while [ $# -ne 0 ]; do
+               cur=${1}; next=${2};
+               case "$cur" in
+                       -h|--help) Usage ; exit 0;;
+                       -v|--verbose) VERBOSITY=$((${VERBOSITY}+1));;
+                       --dry-run) dryrun=true;;
+                       --) shift; break;;
+               esac
+               shift;
+       done
+
+       if [ $# -eq 0 ]; then
+               assert_datasource || exit 0
+               ds_has_item user-data ||
+                       { debug 1 "no userdata for datasource"; return 0; }
+               ds_get_item_path user-data || { error "failed to get user-data"; return 1; }
+               set -- "$_RET"
+       fi
+
+       local tempf="" ret="" failures=0
+       for cur in "$@"; do
+               [ -f "$@" ] || { error "$cur is not a file"; return 1; }
+               if [ -x "$cur" ]; then
+                       "$cur"
+                       ret=$?
+                       debug 1 "$cur returned $ret"
+               elif [ "$(head -c 2 "$cur" )" = "#!" ]; then
+                       $dryrun && { error "execute ${cur}"; continue; }
+                       if [ -z "$tempf" ]; then
+                               tempf=$(mktemp "${TMPDIR:-/tmp}/${0##*/}.XXXXXX") ||
+                                       { error "failed to make tempdir"; return 1; }
+                       fi
+                       cat "$cur" > "$tempf" && chmod 700 "$cur" || {
+                               error "failed to copy $cur to make executable";
+                               rm -f "$tempf";
+                               return 1;
+                       }
+                       "$cur"
+                       ret=$?
+                       debug 2 "$cur returned $ret"
+               else
+                       ret=0
+                       debug 1 "$cur was not '#!' or executable"
+               fi
+               [ $ret -eq 0 ] || failures=$(($failures+1))
+       done
+       rm -f "$tempf"
+
+       return $failures
+}
+
+cirros_userdata "$@"
+
+# vi: ts=4 noexpandtab