X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=cirros-testvm%2Fsrc-cirros%2Fsrc%2Flib%2Fcirros%2Fds%2Fec2;fp=cirros-testvm%2Fsrc-cirros%2Fsrc%2Flib%2Fcirros%2Fds%2Fec2;h=0f9efe2ae850d938fb7f948286498b8c7810d36c;hb=b0a0f15dfaa205161a7fcb20cf1b8cd4948c2ef3;hp=0000000000000000000000000000000000000000;hpb=c6ac3cd55ee2da956195eee393b0882105dfad4e;p=packages%2Ftrusty%2Fcirros-testvm.git diff --git a/cirros-testvm/src-cirros/src/lib/cirros/ds/ec2 b/cirros-testvm/src-cirros/src/lib/cirros/ds/ec2 new file mode 100755 index 0000000..0f9efe2 --- /dev/null +++ b/cirros-testvm/src-cirros/src/lib/cirros/ds/ec2 @@ -0,0 +1,134 @@ +#!/bin/sh + +VERBOSITY=1 +TEMP_D="" +CONFIG=/etc/cirros-init/ds-ec2 +MDURL="http://169.254.169.254/2009-04-04" +NAME="${0##*/}" + +. ${CIRROS_SHLIB:=/lib/cirros/shlib} || + { echo "failed to read ${CIRROS_SHLIB}" 1>&2; exit 1; } + +error() { echo "$@" 1>&2; } +fail() { [ $# -eq 0 ] || error "$@"; exit 1; } + +Usage() { + cat </dev/null); then + [ "${iid#i-}" != "${iid}" ] && break + debug 1 "failed $i/${max}: up ${uptime}. iid had '${iid}'" + else + debug 1 "failed $i/${max}: up ${uptime}. request failed" + fi + sleep $SLEEP_TIME + done + + if [ -n "${iid}" ]; then + debug 1 "successful after ${i}/${max} tries: up ${uptime}. iid=${iid}" + else + error "failed to read iid from metadata. tried ${max}"; + return 0 + fi + + local keys="" key="" + keys="public-keys instance-id ami-launch-index instance-type local-ipv4 + public-ipv4 hostname local-hostname user-data + block-device-mappings public-hostname availability-zone" + mkdir -p "${out_d}/data" + for key in $keys; do + mdget "--${key}" > "${out_d}/data/${key}" || + debug 1 "warning: no ec2 metadata for $key" + done + + local fix="" t="" f="" + for fix in ami-launch-index:launch-index; do + f="${fix%:*}" + t="${fix#*:}" + [ -f "${out_d}/data/$f" -a ! -f "${out_d}/data/$t" ] || continue + ln -sf "$f" "${out_d}/data/$t" || + fail "failed to link $f to ${out_d}/data/t" + done + + echo 0 > "$out_d/result" + return +} + +apply() { + # ec2 datasource does nothing for apply + local mode="$1" data_d="$2" + return 0 +} + +short_opts="hv" +long_opts="help,verbose" +getopt_out=$(getopt --name "${0##*/}" \ + --options "${short_opts}" --long "${long_opts}" -- "$@") && + eval set -- "${getopt_out}" || + bad_Usage + +output="" + +while [ $# -ne 0 ]; do + cur=${1}; next=${2}; + case "$cur" in + -h|--help) Usage ; exit 0;; + -v|--verbose) VERBOSITY=$((${VERBOSITY}+1));; + --) shift; break;; + esac + shift; +done + +[ $# -eq 2 ] || bad_Usage "must provide mode and data dir" +mode="$1" +out_d="$2" + +[ "$mode" = "net" -o "$mode" = "apply-net" ] || { + debug 2 "only supported in mode 'net' or 'apply-net'"; + exit 0; +} + +[ ! -e "$CONFIG" ] || . "$CONFIG" || + fail "failed to read $CONFIG" + +if [ "$mode" = "net" ]; then + search_local "$out_d" +elif [ "$mode" = "apply-net" ]; then + apply "$mode" "$out_d" +else + fail "error, unexpected input" +fi + +exit +# vi: ts=4 noexpandtab