mirror of
https://gitlab.alpinelinux.org/alpine/cloud/tiny-cloud.git
synced 2025-12-16 11:52:43 +03:00
imds
* source /lib/tiny-cloud/common for config & defaults * _imds_ssh_keys calls _imds instead of imds /lib/tiny-cloud/common * load config, set defaults * add PID to log() tag /lib/tiny-cloud/init-common * source /lib/tiny-cloud/common for config/defaults nocloud/imds * many datasource loading fixes * fix _imds keypath & file dump
This commit is contained in:
parent
a3e85c2e45
commit
d202c072b6
11
bin/imds
11
bin/imds
@ -3,9 +3,9 @@
|
|||||||
|
|
||||||
# Tiny Cloud - Instance MetaData Service client
|
# Tiny Cloud - Instance MetaData Service client
|
||||||
|
|
||||||
### configuration
|
### configuration, common functions
|
||||||
|
|
||||||
[ -f /etc/conf.d/tiny-cloud ] && source /etc/conf.d/tiny-cloud
|
source /lib/tiny-cloud/common
|
||||||
|
|
||||||
### cloud-specific variables/functions
|
### cloud-specific variables/functions
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ unset -f \
|
|||||||
|
|
||||||
### default variables/functions
|
### default variables/functions
|
||||||
|
|
||||||
CLOUD="${CLOUD:-unknown}"
|
# Common to many clouds
|
||||||
IMDS_ENDPOINT="169.254.169.254"
|
IMDS_ENDPOINT="169.254.169.254"
|
||||||
|
|
||||||
# Common to AWS and NoCloud(ish)
|
# Common to AWS and NoCloud(ish)
|
||||||
@ -47,8 +47,9 @@ _imds_userdata() { _imds "$IMDS_USERDATA"; }
|
|||||||
|
|
||||||
_imds_ssh_keys() {
|
_imds_ssh_keys() {
|
||||||
local key
|
local key
|
||||||
for key in $(imds "$IMDS_SSH_KEYS"); do
|
for key in $(_imds "$IMDS_SSH_KEYS"); do
|
||||||
imds "$IMDS_SSH_KEYS/${key%=*}/openssh-key"
|
_imds "$IMDS_SSH_KEYS/${key%=*}/openssh-key"
|
||||||
|
echo
|
||||||
done | sort -u
|
done | sort -u
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,13 @@
|
|||||||
# Tiny Cloud - common script functions
|
# Tiny Cloud - common script functions
|
||||||
# vim: ts=4 et ft=sh:
|
# vim: ts=4 et ft=sh:
|
||||||
|
|
||||||
|
# set defaults
|
||||||
|
[ -f /etc/conf.d/tiny-cloud ] && source /etc/conf.d/tiny-cloud
|
||||||
|
CLOUD="${CLOUD:-unknown}"
|
||||||
|
CLOUD_USER=${CLOUD_USER:-alpine}
|
||||||
|
TINY_CLOUD_LOGS=${TINY_CLOUD_LOGS:-/var/log}
|
||||||
|
TINY_CLOUD_VAR=${TINY_CLOUD_VAR:-/var/lib/cloud}
|
||||||
|
|
||||||
log() {
|
log() {
|
||||||
local facility="kern"
|
local facility="kern"
|
||||||
local stderr
|
local stderr
|
||||||
@ -17,7 +24,7 @@ log() {
|
|||||||
[ -z "$DEBUG" ] && [ "$level" = debug ] && return
|
[ -z "$DEBUG" ] && [ "$level" = debug ] && return
|
||||||
shift
|
shift
|
||||||
|
|
||||||
logger $stderr -p "$facility.$level" -t "$tag" "$@"
|
logger $stderr -p "$facility.$level" -t "$tag[$$]" "$@"
|
||||||
case "$level" in
|
case "$level" in
|
||||||
crit|alert|emerg) exit 1 ;;
|
crit|alert|emerg) exit 1 ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
@ -1,12 +1,8 @@
|
|||||||
# Tiny Cloud - Common Initialization
|
# Tiny Cloud - Common Initialization
|
||||||
# vim:set ts=4 et ft=sh:
|
# vim:set ts=4 et ft=sh:
|
||||||
|
|
||||||
[ -f /etc/conf.d/tiny-cloud ] && source /etc/conf.d/tiny-cloud
|
|
||||||
|
|
||||||
# set defaults
|
# set defaults
|
||||||
CLOUD_USER=${CLOUD_USER:-alpine}
|
source /lib/tiny-cloud/common
|
||||||
TINY_CLOUD_LOGS=${TINY_CLOUD_LOGS:-/var/log}
|
|
||||||
TINY_CLOUD_VAR=${TINY_CLOUD_VAR:-/var/lib/cloud}
|
|
||||||
SKIP_INIT_ACTIONS=${SKIP_INIT_ACTIONS:-}
|
SKIP_INIT_ACTIONS=${SKIP_INIT_ACTIONS:-}
|
||||||
|
|
||||||
# is initial bootstrap already done?
|
# is initial bootstrap already done?
|
||||||
|
|||||||
@ -13,7 +13,7 @@ _load_nocloud_cmdline() {
|
|||||||
|
|
||||||
for kopt in $(cat /proc/cmdline); do
|
for kopt in $(cat /proc/cmdline); do
|
||||||
echo "$kopt" | grep -qE '(^|=)ds=nocloud(-net)?(;|$)' || continue
|
echo "$kopt" | grep -qE '(^|=)ds=nocloud(-net)?(;|$)' || continue
|
||||||
for kv in $(echo "$kopt" | cut -d\; -f2-); do
|
for kv in $(echo "$kopt" | sed -Ee 's/.*ds=nocloud(-net)?(;|$)//' | tr \; ' '); do
|
||||||
k=$(echo "$kv" | cut -d= -f1)
|
k=$(echo "$kv" | cut -d= -f1)
|
||||||
v=$(echo "$kv" | cut -d= -f2- | sed -Ee s'|^file://|/|')
|
v=$(echo "$kv" | cut -d= -f2- | sed -Ee s'|^file://|/|')
|
||||||
case "$k" in
|
case "$k" in
|
||||||
@ -27,68 +27,74 @@ _load_nocloud_cmdline() {
|
|||||||
for data in $NOCLOUD_FILES; do
|
for data in $NOCLOUD_FILES; do
|
||||||
case "$v" in
|
case "$v" in
|
||||||
/*)
|
/*)
|
||||||
cat "$v" >> "$TINY_CLOUD_VAR/$data" || continue
|
cat "$v/$data" >> "$TINY_CLOUD_VAR/$data" || continue
|
||||||
echo >> "$TINY_CLOUD_VAR/$data"
|
echo >> "$TINY_CLOUD_VAR/$data"
|
||||||
;;
|
;;
|
||||||
http://*|https://*)
|
http://*|https://*)
|
||||||
wget -qO - "$v" >> "$TINY_CLOUD_VAR/$data" || continue
|
wget -qO - "$v/$data" >> "$TINY_CLOUD_VAR/$data" || continue
|
||||||
echo >> "$TINY_CLOUD_VAR/$data"
|
echo >> "$TINY_CLOUD_VAR/$data"
|
||||||
;;
|
;;
|
||||||
*) echo "WARNING: Ignoring unknown seedfrom value '$v'" >&2
|
*) log -s warning "Unknown NoCloud seedfrom value '$v'"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
*) echo "WARNING: Ignoring unknown nocloud kernel cmdline key '$k'" >&2
|
*) log -s warning "Unknown NoCloud kernel cmdline key '$k'"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
return
|
return
|
||||||
done
|
done
|
||||||
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
_load_nocloud_volume() {
|
_load_nocloud_volume() {
|
||||||
local mntdir=$(mktmemp /mnt/cidata-XXXXXX)
|
local mntdir=$(mktemp /mnt/cidata-XXXXXX)
|
||||||
local data
|
local data
|
||||||
|
|
||||||
mkdir -p "$mntdir"
|
mkdir -p "$mntdir"
|
||||||
# TODO: are lables case insensitive?
|
# TODO: are lables case insensitive?
|
||||||
mount LABEL=cidata "$mntdir" || mount LABEL=CIDATA "$mntdir" || return 1
|
if mount LABEL=cidata "$mntdir" || mount LABEL=CIDATA "$mntdir"; then
|
||||||
for data in $NOCLOUD_FILES; do
|
for data in $NOCLOUD_FILES; do
|
||||||
cp "$mntdir/$data" "$TINY_CLOUD_VAR/$data" 2>/dev/null
|
# lack of source results in empty target
|
||||||
|
cat "$mntdir/$data" > "$TINY_CLOUD_VAR/$data"
|
||||||
done
|
done
|
||||||
umount "$mntdir"
|
umount "$mntdir"
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
rmdir "$mntdir"
|
rmdir "$mntdir"
|
||||||
}
|
}
|
||||||
|
|
||||||
load_nocloud() {
|
load_nocloud() {
|
||||||
is_nocloud_loaded && return
|
|
||||||
|
|
||||||
# start with a clean slate
|
# start with a clean slate
|
||||||
rm -f $NOCLOUD_FILES
|
(cd "$TINY_CLOUD_VAR" && rm -f $NOCLOUD_FILES)
|
||||||
|
|
||||||
if ! _load_nocloud_cmdline || _load_nocloud_volume; then
|
if _load_nocloud_cmdline || _load_nocloud_volume; then
|
||||||
echo "ERROR: Unable to load NoCloud data" >&2
|
touch "$TINY_CLOUD_VAR/.nocloud_loaded"
|
||||||
|
else
|
||||||
|
log -s err "Unable to load NoCloud datasource"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
# at the very minimum, we expect something in meta-data
|
|
||||||
|
|
||||||
touch "$TINY_CLOUD_VAR/.nocloud_loaded"
|
# minimally, we expect some content in meta-data
|
||||||
|
[ -s "$TINY_CLOUD_VAR/meta-data" ] ||
|
||||||
|
log -s warning "NoCloud 'meta-data' is empty"
|
||||||
}
|
}
|
||||||
|
|
||||||
_imds() {
|
_imds() {
|
||||||
local file="$TINY_CLOUD_VAR"/$(echo "$1" | cut -d/ -f1)
|
local file="$TINY_CLOUD_VAR"/$(echo "$1" | cut -d/ -f1)
|
||||||
local key=$(echo "$1" | cut -d/ -f2-)
|
local keypath=$(echo "$1" | cut -d/ -f2- | tr / ' ')
|
||||||
|
|
||||||
is_nocloud_loaded || load_nocloud || return 1
|
is_nocloud_loaded || load_nocloud
|
||||||
|
|
||||||
# does file exist?
|
# does file exist?
|
||||||
[ -f "$file" ] || return 1
|
[ -f "$file" ] || return 1
|
||||||
|
|
||||||
# use 'file/' to get top-level keys
|
# use 'file/' to get top-level keys
|
||||||
if [ "$1" = "$file" ]; then
|
if [ $(basename "$file") = "keypath" ]; then
|
||||||
cat "$file"
|
cat "$file"
|
||||||
else
|
else
|
||||||
yx -f "$file" "$key"
|
yx -f "$file" $keypath
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user