1
0
mirror of https://gitlab.alpinelinux.org/alpine/cloud/tiny-cloud.git synced 2025-12-15 11:22:43 +03:00
* 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:
Jake Buchholz Göktürk 2022-07-17 18:29:57 -07:00
parent a3e85c2e45
commit d202c072b6
4 changed files with 43 additions and 33 deletions

View File

@ -3,9 +3,9 @@
# 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
@ -21,7 +21,7 @@ unset -f \
### default variables/functions
CLOUD="${CLOUD:-unknown}"
# Common to many clouds
IMDS_ENDPOINT="169.254.169.254"
# Common to AWS and NoCloud(ish)
@ -47,8 +47,9 @@ _imds_userdata() { _imds "$IMDS_USERDATA"; }
_imds_ssh_keys() {
local key
for key in $(imds "$IMDS_SSH_KEYS"); do
imds "$IMDS_SSH_KEYS/${key%=*}/openssh-key"
for key in $(_imds "$IMDS_SSH_KEYS"); do
_imds "$IMDS_SSH_KEYS/${key%=*}/openssh-key"
echo
done | sort -u
}

View File

@ -1,6 +1,13 @@
# Tiny Cloud - common script functions
# 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() {
local facility="kern"
local stderr
@ -17,7 +24,7 @@ log() {
[ -z "$DEBUG" ] && [ "$level" = debug ] && return
shift
logger $stderr -p "$facility.$level" -t "$tag" "$@"
logger $stderr -p "$facility.$level" -t "$tag[$$]" "$@"
case "$level" in
crit|alert|emerg) exit 1 ;;
esac

View File

@ -1,12 +1,8 @@
# Tiny Cloud - Common Initialization
# vim:set ts=4 et ft=sh:
[ -f /etc/conf.d/tiny-cloud ] && source /etc/conf.d/tiny-cloud
# set defaults
CLOUD_USER=${CLOUD_USER:-alpine}
TINY_CLOUD_LOGS=${TINY_CLOUD_LOGS:-/var/log}
TINY_CLOUD_VAR=${TINY_CLOUD_VAR:-/var/lib/cloud}
source /lib/tiny-cloud/common
SKIP_INIT_ACTIONS=${SKIP_INIT_ACTIONS:-}
# is initial bootstrap already done?

View File

@ -13,7 +13,7 @@ _load_nocloud_cmdline() {
for kopt in $(cat /proc/cmdline); do
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)
v=$(echo "$kv" | cut -d= -f2- | sed -Ee s'|^file://|/|')
case "$k" in
@ -27,68 +27,74 @@ _load_nocloud_cmdline() {
for data in $NOCLOUD_FILES; do
case "$v" in
/*)
cat "$v" >> "$TINY_CLOUD_VAR/$data" || continue
cat "$v/$data" >> "$TINY_CLOUD_VAR/$data" || continue
echo >> "$TINY_CLOUD_VAR/$data"
;;
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 "WARNING: Ignoring unknown seedfrom value '$v'" >&2
*) log -s warning "Unknown NoCloud seedfrom value '$v'"
;;
esac
done
;;
*) echo "WARNING: Ignoring unknown nocloud kernel cmdline key '$k'" >&2
*) log -s warning "Unknown NoCloud kernel cmdline key '$k'"
;;
esac
done
return
done
return 1
}
_load_nocloud_volume() {
local mntdir=$(mktmemp /mnt/cidata-XXXXXX)
local mntdir=$(mktemp /mnt/cidata-XXXXXX)
local data
mkdir -p "$mntdir"
# TODO: are lables case insensitive?
mount LABEL=cidata "$mntdir" || mount LABEL=CIDATA "$mntdir" || return 1
for data in $NOCLOUD_FILES; do
cp "$mntdir/$data" "$TINY_CLOUD_VAR/$data" 2>/dev/null
done
umount "$mntdir"
if mount LABEL=cidata "$mntdir" || mount LABEL=CIDATA "$mntdir"; then
for data in $NOCLOUD_FILES; do
# lack of source results in empty target
cat "$mntdir/$data" > "$TINY_CLOUD_VAR/$data"
done
umount "$mntdir"
else
return 1
fi
rmdir "$mntdir"
}
load_nocloud() {
is_nocloud_loaded && return
# 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
echo "ERROR: Unable to load NoCloud data" >&2
if _load_nocloud_cmdline || _load_nocloud_volume; then
touch "$TINY_CLOUD_VAR/.nocloud_loaded"
else
log -s err "Unable to load NoCloud datasource"
return 1
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() {
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?
[ -f "$file" ] || return 1
# use 'file/' to get top-level keys
if [ "$1" = "$file" ]; then
if [ $(basename "$file") = "keypath" ]; then
cat "$file"
else
yx -f "$file" "$key"
yx -f "$file" $keypath
fi
}