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 / lib / cirros / shlib_cirros
diff --git a/cirros-testvm/src-cirros/src/lib/cirros/shlib_cirros b/cirros-testvm/src-cirros/src/lib/cirros/shlib_cirros
new file mode 100644 (file)
index 0000000..126a75e
--- /dev/null
@@ -0,0 +1,126 @@
+#!/bin/sh
+
+assert_datasource() {
+       [ -n "${_DATASOURCE_NAME}" ] && return
+       [ -d "${RESULTS_D}" ] && [ -r "${RESULTS_D}/dsname" ] ||
+               { debug 2 "no datasource found"; return 1; }
+
+       local dsname="" dsmode=""
+       { read dsname < "${RESULTS_D}/dsname"; } >/dev/null 2>&1 ||
+               { debug 1 "failed to read dsname"; return 1; }
+
+       [ -n "$dsname" ] ||
+               { debug 1 "empty datasource name"; return 1; }
+
+       { read dsmode < "${RESULTS_D}/dsmode"; } >/dev/null 2>&1 ||
+               { debug 1 "failed to read dsmode"; return 1; }
+
+       _DATASOURCE_NAME="$dsname"
+       _DATASOURCE_MODE="$dsmode"
+       _RET="${dsname}"
+}
+
+ds_list_items() {
+       set +f;
+       local found=0 start="$PWD" items=""
+       cd "${RESULTS_D}/data" || return 1
+       for item in *; do
+               [ -f "$item" ] || continue
+               items="${items}${CR}${item}"
+               found=$(($found+1))
+       done
+       items=${items#${CR}}
+       [ -n "$items" ] || debug 2 "empty items in $RESULTS_D/data"
+       set -f
+       cd "$start" || { debug 2 "failed to cd back to $start"; return 1; }
+       [ -n "$items" ] && _RET="$items"
+}
+
+ds_get_item_path() {
+       assert_datasource || return
+       local field="$1"
+       local fpath="${RESULTS_D}/data/$field"
+       if [ ! -f "$fpath" ]; then
+               debug 2 "field $field not available for ds '$_DATASOURCE_NAME'";
+               return 2;
+       fi
+       [ -r "$fpath" ] || { debug 2 "cannot read $field. need root?"; return 1; }
+       _RET="$fpath"
+       return
+}
+
+ds_has_item() {
+       [ -f "${RESULTS_D}/data/$1" ]
+}
+
+ds_get_item() {
+       ds_get_item_path "$1" || return
+       local fpath="$_RET"
+       # file exists and is readable due to above, if read fails, it is due to EOF.
+       read _RET < "$fpath" || :
+}
+
+ds_cat_item() {
+       ds_get_item_path "$1" && cat "$_RET"
+}
+
+cirros_version() {
+       [ -r /etc/cirros/version ] ||
+               { _RET="unreleased"; return 0; }
+       { read _RET < /etc/cirros/version; } >/dev/null 2>&1
+}
+
+cirros_version_available() {
+       local na="0.0" af="$DATA_D/cirros_available"
+       local url="http://download.cirros-cloud.net/version/released"
+       [ -d "$DATA_D" ] || mkdir -p "$DATA_D"
+
+       [ "$1" = "-f" ] && { rm -f "$af"; shift; }
+       local block="${1:-0}"
+
+       if [ ! -f "$af" ]; then
+               local max=$block
+               [ "$max" = "0" ] && max=20
+
+               local agent="cirros/$CIRROS_VERSION ($(uname -m))"
+               local curlcmd="curl --location --silent --fail --max-time $max"
+
+               echo "$na" > "$af"
+               if [ "${block}" != "0" ]; then
+                       local out=""
+                       out=$($curlcmd --user-agent "$agent" "$url") && echo "$out" > "$af"
+               else
+                       sh -c "out=\$($curlcmd --user-agent '$agent' '$url') &&
+                               echo \"\${out}\" > '$af'" &
+               fi
+       fi
+       { read _RET < "$af"; } >/dev/null 2>&1
+       [ -n "$_RET" ] || _RET="$na"
+       return
+}
+
+. ${CIRROS_SHLIB:=/lib/cirros/shlib} ||
+       { error "failed to read ${CIRROS_SHLIB}" 1>&2; exit 1; }
+
+INTERNAL=false
+VERBOSITY=1
+CONFIG=/etc/cirros-init/config
+DATA_D=/var/lib/cirros/data
+STATE_D=/var/lib/cirros/sem
+BOOT_STATE_D=/run/cirros/sem
+DS_D=/lib/cirros/ds
+RESULTS_D=/run/cirros/datasource
+
+cirros_version
+CIRROS_VERSION="$_RET"
+
+[ ! -r "$CONFIG" ] || . "$CONFIG" ||
+       fail "failed to read $CONFIG"
+
+# remove any trailing /
+STATE_D=${STATE_D%/}
+BOOT_STATE_D=${BOOT_STATE_D%/}
+DS_D=${DS_D%/}
+RESULTS_D=${RESULTS_D%/}
+
+# vi: ts=4 noexpandtab syntax=sh