mirror of
https://gitlab.alpinelinux.org/alpine/cloud/tiny-cloud.git
synced 2025-12-15 11:22: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
|
||||
|
||||
### 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
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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?
|
||||
|
||||
@ -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
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user