mirror of
https://gitlab.alpinelinux.org/alpine/cloud/tiny-cloud.git
synced 2026-02-04 04:22:43 +03:00
Add cloud provider "alpine" and user-data "alpine-conf"
This commit is contained in:
parent
17d0b3d07b
commit
b03030182f
7
Makefile
7
Makefile
@ -1,6 +1,6 @@
|
|||||||
PREFIX?=/
|
PREFIX?=/
|
||||||
|
|
||||||
SUBPACKAGES = core network openrc aws azure gcp oci nocloud
|
SUBPACKAGES = core network openrc aws azure gcp oci nocloud alpine
|
||||||
|
|
||||||
.PHONY: check install $(SUBPACKAGES)
|
.PHONY: check install $(SUBPACKAGES)
|
||||||
|
|
||||||
@ -56,6 +56,11 @@ nocloud:
|
|||||||
install -Dm644 -t $(PREFIX)/lib/tiny-cloud/cloud/nocloud \
|
install -Dm644 -t $(PREFIX)/lib/tiny-cloud/cloud/nocloud \
|
||||||
lib/tiny-cloud/cloud/nocloud/*
|
lib/tiny-cloud/cloud/nocloud/*
|
||||||
|
|
||||||
|
alpine:
|
||||||
|
install -Dm644 -t $(PREFIX)/lib/tiny-cloud/cloud/alpine \
|
||||||
|
lib/tiny-cloud/cloud/alpine/init
|
||||||
|
ln -s ../nocloud/imds $(PREFIX)/lib/tiny-cloud/cloud/alpine/imds
|
||||||
|
|
||||||
check: tests/Kyuafile Kyuafile
|
check: tests/Kyuafile Kyuafile
|
||||||
kyua test || (kyua report --verbose && exit 1)
|
kyua test || (kyua report --verbose && exit 1)
|
||||||
|
|
||||||
|
|||||||
2
dist/openrc/tiny-cloud
vendored
2
dist/openrc/tiny-cloud
vendored
@ -5,7 +5,7 @@ description="Tiny Cloud Bootstrap - main phase"
|
|||||||
extra_commands="complete incomplete"
|
extra_commands="complete incomplete"
|
||||||
|
|
||||||
depend() {
|
depend() {
|
||||||
need net
|
need net tiny-cloud-net
|
||||||
before sshd
|
before sshd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
14
dist/openrc/tiny-cloud-net
vendored
Executable file
14
dist/openrc/tiny-cloud-net
vendored
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
#!/sbin/openrc-run
|
||||||
|
# vim:set ts=8 noet ft=sh:
|
||||||
|
|
||||||
|
description="Tiny Cloud Bootstrap - net phase"
|
||||||
|
depend() {
|
||||||
|
need net
|
||||||
|
before *
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
ebegin "Tiny Cloud - net"
|
||||||
|
tiny-cloud net
|
||||||
|
eend $?
|
||||||
|
}
|
||||||
1
lib/tiny-cloud/cloud/alpine/imds
Symbolic link
1
lib/tiny-cloud/cloud/alpine/imds
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../nocloud/imds
|
||||||
26
lib/tiny-cloud/cloud/alpine/init
Normal file
26
lib/tiny-cloud/cloud/alpine/init
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# Tiny Cloud - Init Functions
|
||||||
|
# vim:set ts=4 et ft=sh:
|
||||||
|
|
||||||
|
INIT_ACTIONS_EARLY="$(replace_word set_default_interfaces set_network_interfaces $INIT_ACTIONS_EARLY)"
|
||||||
|
|
||||||
|
set_resolv_conf() {
|
||||||
|
# resolv.conf
|
||||||
|
local nameservers="$(imds meta-data/resolv_conf/nameservers)"
|
||||||
|
for i in $nameservers; do
|
||||||
|
local server="$(imds meta-data/resolv_conf/nameservers/$i)"
|
||||||
|
add_once "$ROOT"/etc/resolv.conf "nameserver $server"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
init__set_network_interfaces() {
|
||||||
|
local interfaces="$(imds meta-data/network-interfaces)"
|
||||||
|
mkdir -p "$ROOT"/etc/network
|
||||||
|
if [ -n "$interfaces" ]; then
|
||||||
|
printf "%s\n" "$interfaces" > "$ROOT"/etc/network/interfaces
|
||||||
|
elif ! [ -f "$ROOT"/etc/network/interfaces ]; then
|
||||||
|
init__set_default_interfaces
|
||||||
|
fi
|
||||||
|
if ! grep -q dhcp "$ROOT"/etc/network/interfaces; then
|
||||||
|
set_resolv_conf
|
||||||
|
fi
|
||||||
|
}
|
||||||
@ -29,3 +29,40 @@ log() {
|
|||||||
crit|alert|emerg) exit 1 ;;
|
crit|alert|emerg) exit 1 ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# usage: replace_word <search> <replace> <list>...
|
||||||
|
replace_word() {
|
||||||
|
local search="$1" replace="$2"
|
||||||
|
shift 2
|
||||||
|
for word in "$@"; do
|
||||||
|
if [ "$word" = "$search" ]; then
|
||||||
|
echo "$replace"
|
||||||
|
else
|
||||||
|
echo "$word"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# usage: insert_after <where> <what> <list>...
|
||||||
|
insert_after() {
|
||||||
|
local search="$1" addition="$2"
|
||||||
|
shift 2
|
||||||
|
for i in "$@"; do
|
||||||
|
echo "$i"
|
||||||
|
if [ "$i" = "$search" ]; then
|
||||||
|
echo "$addition"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# usage: add_once <file> <line-to-add>...
|
||||||
|
add_once() {
|
||||||
|
local file="$1"
|
||||||
|
shift
|
||||||
|
for line; do
|
||||||
|
if ! grep -x -F "$line" "$file" 2>/dev/null; then
|
||||||
|
mkdir -p "${file%/*}"
|
||||||
|
printf "%s\n" "$line" >> "$file"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|||||||
@ -17,14 +17,17 @@ DEFAULT_ACTIONS_EARLY="
|
|||||||
create_default_user
|
create_default_user
|
||||||
enable_sshd
|
enable_sshd
|
||||||
"
|
"
|
||||||
DEFAULT_ACTIONS_MAIN="
|
DEFAULT_ACTIONS_NET="
|
||||||
save_userdata
|
save_userdata
|
||||||
|
"
|
||||||
|
DEFAULT_ACTIONS_MAIN="
|
||||||
set_hostname
|
set_hostname
|
||||||
set_ssh_keys
|
set_ssh_keys
|
||||||
"
|
"
|
||||||
DEFAULT_ACTIONS_FINAL=""
|
DEFAULT_ACTIONS_FINAL=""
|
||||||
|
|
||||||
: "${INIT_ACTIONS_EARLY=$DEFAULT_ACTIONS_EARLY}"
|
: "${INIT_ACTIONS_EARLY=$DEFAULT_ACTIONS_EARLY}"
|
||||||
|
: "${INIT_ACTIONS_NET=$DEFAULT_ACTIONS_NET}"
|
||||||
: "${INIT_ACTIONS_MAIN=$DEFAULT_ACTIONS_MAIN}"
|
: "${INIT_ACTIONS_MAIN=$DEFAULT_ACTIONS_MAIN}"
|
||||||
: "${INIT_ACTIONS_FINAL=$DEFAULT_ACTIONS_FINAL}"
|
: "${INIT_ACTIONS_FINAL=$DEFAULT_ACTIONS_FINAL}"
|
||||||
|
|
||||||
@ -242,6 +245,10 @@ init__set_ssh_keys() {
|
|||||||
|
|
||||||
init__save_userdata() {
|
init__save_userdata() {
|
||||||
local userdata="$TINY_CLOUD_VAR/user-data"
|
local userdata="$TINY_CLOUD_VAR/user-data"
|
||||||
|
if [ -f "$userdata" ]; then
|
||||||
|
log info "user-data already saved"
|
||||||
|
return
|
||||||
|
fi
|
||||||
local tmpfile=$(mktemp "$userdata.XXXXXX")
|
local tmpfile=$(mktemp "$userdata.XXXXXX")
|
||||||
|
|
||||||
imds -e @userdata > "$tmpfile"
|
imds -e @userdata > "$tmpfile"
|
||||||
|
|||||||
116
lib/tiny-cloud/user-data/alpine-config
Normal file
116
lib/tiny-cloud/user-data/alpine-config
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
# Script UserData Functions
|
||||||
|
# vim:set ts=4 et ft=sh:
|
||||||
|
|
||||||
|
INIT_ACTIONS_MAIN="$(insert_after set_hostname \
|
||||||
|
"userdata_bootcmd userdata_ntp userdata_apk_cache userdata_apk_repositories userdata_packages" \
|
||||||
|
$INIT_ACTIONS_MAIN)"
|
||||||
|
INIT_ACTIONS_FINAL="$INIT_ACTIONS_FINAL userdata_runcmd"
|
||||||
|
|
||||||
|
init__userdata_bootcmd() {
|
||||||
|
# run bootcmd
|
||||||
|
local bootcmds="$(imds user-data/bootcmd)"
|
||||||
|
for i in $bootcmds; do
|
||||||
|
local cmd="$(imds user-data/bootcmd/"$i")"
|
||||||
|
sh -c "$cmd"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
init__userdata_ntp() {
|
||||||
|
local ntp_enabled="$(imds user-data/ntp/enabled)"
|
||||||
|
if [ "$ntp_enabled" != "yes" ] && [ "$ntp_enabled" != "true" ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
local ntp_client="$(imds user-data/ntp/ntp_client)"
|
||||||
|
local svc= pkg=
|
||||||
|
case "$ntp_client" in
|
||||||
|
busybox)
|
||||||
|
svc=ntpd
|
||||||
|
;;
|
||||||
|
chrony|"")
|
||||||
|
pkg=chrony
|
||||||
|
svc=chronyd
|
||||||
|
;;
|
||||||
|
openntpd)
|
||||||
|
pkg=openntpd
|
||||||
|
svc=openntpd
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
if [ -n "$pkg" ]; then
|
||||||
|
$MOCK apk add "$pkg"
|
||||||
|
fi
|
||||||
|
if [ -n "$svc" ]; then
|
||||||
|
$MOCK rc-update add "$svc" default
|
||||||
|
$MOCK rc-service "$svc" start
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
init__userdata_apk_cache() {
|
||||||
|
local cache="$(imds user-data/apk/cache)"
|
||||||
|
if [ -z "$cache" ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
mkdir -p "$ROOT/$cache"
|
||||||
|
# make link relative
|
||||||
|
case "$cache" in
|
||||||
|
/*) cache="../..$cache";;
|
||||||
|
esac
|
||||||
|
mkdir -p "$ROOT"/etc/apk
|
||||||
|
ln -sf "$cache" "$ROOT"/etc/apk/cache
|
||||||
|
}
|
||||||
|
|
||||||
|
init__userdata_apk_cache() {
|
||||||
|
local cache="$(imds user-data/apk/cache)"
|
||||||
|
if [ -z "$cache" ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
mkdir -p "$ROOT/$cache"
|
||||||
|
# make link relative
|
||||||
|
case "$cache" in
|
||||||
|
/*) cache="../..$cache";;
|
||||||
|
esac
|
||||||
|
mkdir -p "$ROOT"/etc/apk
|
||||||
|
ln -sf "$cache" "$ROOT"/etc/apk/cache
|
||||||
|
}
|
||||||
|
|
||||||
|
init__userdata_apk_repositories() {
|
||||||
|
local repositories="$(imds user-data/apk/repositories)"
|
||||||
|
mkdir -p "$ROOT"/etc/apk
|
||||||
|
for r in $repositories; do
|
||||||
|
local baseurl="$(imds user-data/apk/repositories/$r/base_url)"
|
||||||
|
local repos="$(imds user-data/apk/repositories/$r/repos)"
|
||||||
|
local version="$(imds user-data/apk/repositories/$r/version)"
|
||||||
|
if [ -z "$version" ]; then
|
||||||
|
local version_id=$( . "$ROOT"/etc/os-release 2>/dev/null && echo "$VERSION_ID")
|
||||||
|
case "$version_id" in
|
||||||
|
edge*|*_alpha*) version="edge";;
|
||||||
|
[0-9]*.[0-9]*.[0-9]*) version="v${version_id%.*}";;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
if [ -n "$version" ] && [ "$version" != "." ] && [ "$version" != "/" ]; then
|
||||||
|
baseurl="${baseurl%/}/$version"
|
||||||
|
fi
|
||||||
|
for repo in $repos; do
|
||||||
|
local uri="${baseurl%/}/$(imds user-data/apk/repositories/$r/repos/$repo)"
|
||||||
|
add_once "$ROOT"/etc/apk/repositories "$uri"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
init__userdata_packages() {
|
||||||
|
local packages="$(imds user-data/packages)"
|
||||||
|
local pkgs=
|
||||||
|
for i in $packages; do
|
||||||
|
pkgs="$pkgs $(imds user-data/packages/$i)"
|
||||||
|
done
|
||||||
|
if [ -n "$pkgs" ]; then
|
||||||
|
$MOCK apk add $pkgs
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
init__userdata_runcmd() {
|
||||||
|
local runcmds="$(imds user-data/runcmd)"
|
||||||
|
for i in $runcmds; do
|
||||||
|
local cmd="$(imds user-data/runcmd/$i)"
|
||||||
|
sh -c "$cmd"
|
||||||
|
done
|
||||||
|
}
|
||||||
@ -10,7 +10,7 @@ set -e
|
|||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
Usage: ${0##*/} [-h | --help] { early | main | final | --bootstrap {complete|incomplete} | --setup }
|
Usage: ${0##*/} [-h | --help] { early | net | main | final | --bootstrap {complete|incomplete} | --setup }
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ phase="$1"
|
|||||||
shift
|
shift
|
||||||
|
|
||||||
case "$phase" in
|
case "$phase" in
|
||||||
early|main|final) ;;
|
early|net|main|final) ;;
|
||||||
*) usage >&2; exit 1;;
|
*) usage >&2; exit 1;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@ -92,6 +92,7 @@ INIT_ACTIONS_FINAL="${INIT_ACTIONS_FINAL} bootstrap_complete"
|
|||||||
|
|
||||||
case "$phase" in
|
case "$phase" in
|
||||||
early) INIT_ACTIONS="$INIT_ACTIONS_EARLY";;
|
early) INIT_ACTIONS="$INIT_ACTIONS_EARLY";;
|
||||||
|
net) INIT_ACTIONS="$INIT_ACTIONS_NET";;
|
||||||
main) INIT_ACTIONS="$INIT_ACTIONS_MAIN";;
|
main) INIT_ACTIONS="$INIT_ACTIONS_MAIN";;
|
||||||
final) INIT_ACTIONS="$INIT_ACTIONS_FINAL";;
|
final) INIT_ACTIONS="$INIT_ACTIONS_FINAL";;
|
||||||
*) usage >&2; exit 1
|
*) usage >&2; exit 1
|
||||||
|
|||||||
241
tests/tiny-cloud-alpine.test
Executable file
241
tests/tiny-cloud-alpine.test
Executable file
@ -0,0 +1,241 @@
|
|||||||
|
#!/usr/bin/env atf-sh
|
||||||
|
|
||||||
|
. $(atf_get_srcdir)/test_env.sh
|
||||||
|
|
||||||
|
export PREFIX="$srcdir"
|
||||||
|
export MOCK=echo
|
||||||
|
export CLOUD=alpine
|
||||||
|
lib="$srcdir"/lib/tiny-cloud/cloud/alpine/init
|
||||||
|
|
||||||
|
init_tests \
|
||||||
|
set_network_config_network_interfaces \
|
||||||
|
set_network_config_auto \
|
||||||
|
userdata_bootcmd \
|
||||||
|
userdata_ntp \
|
||||||
|
userdata_ntp_busybox \
|
||||||
|
userdata_ntp_openntpd \
|
||||||
|
userdata_apk_cache \
|
||||||
|
userdata_apk_repositories \
|
||||||
|
userdata_apk_repositories_version \
|
||||||
|
userdata_apk_repositories_version_auto_edge \
|
||||||
|
userdata_packages \
|
||||||
|
userdata_runcmd
|
||||||
|
|
||||||
|
|
||||||
|
set_network_config_network_interfaces_body() {
|
||||||
|
fake_metadata_nocloud <<-EOF
|
||||||
|
network-interfaces: |
|
||||||
|
auto eth1
|
||||||
|
iface eth1
|
||||||
|
address 192.168.100.1
|
||||||
|
netmask 255.255.255.0
|
||||||
|
|
||||||
|
resolv_conf:
|
||||||
|
nameservers:
|
||||||
|
- 8.8.8.8
|
||||||
|
- 8.8.4.4
|
||||||
|
EOF
|
||||||
|
|
||||||
|
atf_check \
|
||||||
|
-o match:"rc-update" \
|
||||||
|
-e match:"set_network_interfaces .*DONE" \
|
||||||
|
tiny-cloud early
|
||||||
|
atf_check \
|
||||||
|
-o match:"auto eth1" \
|
||||||
|
-o match:"iface eth1" \
|
||||||
|
-o match:"address 192.168.100.1" \
|
||||||
|
cat etc/network/interfaces
|
||||||
|
|
||||||
|
atf_check \
|
||||||
|
-o match:"^nameserver 8.8.8.8$" \
|
||||||
|
-o match:"^nameserver 8.8.4.4$" \
|
||||||
|
cat etc/resolv.conf
|
||||||
|
}
|
||||||
|
|
||||||
|
set_network_config_auto_body() {
|
||||||
|
fake_metadata_nocloud <<-EOF
|
||||||
|
resolv_conf:
|
||||||
|
nameservers:
|
||||||
|
- 8.8.8.8
|
||||||
|
- 8.8.4.4
|
||||||
|
EOF
|
||||||
|
fake_interfaces eth0 eth1 eth2
|
||||||
|
echo up > sys/class/net/eth1/operstate
|
||||||
|
|
||||||
|
atf_check \
|
||||||
|
-o match:"rc-update" \
|
||||||
|
-e match:"set_network_interfaces .*DONE" \
|
||||||
|
tiny-cloud early
|
||||||
|
atf_check \
|
||||||
|
-o match:"auto eth1" \
|
||||||
|
-o match:"iface eth1" \
|
||||||
|
-o match:"use dhcp" \
|
||||||
|
cat etc/network/interfaces
|
||||||
|
# resolv.conf should be ignored with dhcp
|
||||||
|
if [ -e etc/resolv.conf ]; then
|
||||||
|
atf_fail "etc/resolv.conf should not been created with DHCP"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
userdata_bootcmd_body() {
|
||||||
|
fake_userdata_nocloud <<-EOF
|
||||||
|
#alpine-config
|
||||||
|
bootcmd:
|
||||||
|
- echo foo
|
||||||
|
- echo bar
|
||||||
|
EOF
|
||||||
|
atf_check -e ignore -o ignore tiny-cloud net
|
||||||
|
atf_check \
|
||||||
|
-e match:"userdata_bootcmd .*DONE" \
|
||||||
|
-o match:"^foo$" -o match:"^bar$" \
|
||||||
|
tiny-cloud main
|
||||||
|
}
|
||||||
|
|
||||||
|
userdata_ntp_body() {
|
||||||
|
fake_userdata_nocloud <<-EOF
|
||||||
|
#alpine-config
|
||||||
|
ntp:
|
||||||
|
enabled: true
|
||||||
|
EOF
|
||||||
|
atf_check -e ignore -o ignore tiny-cloud net
|
||||||
|
atf_check \
|
||||||
|
-e match:"userdata_ntp .*DONE" \
|
||||||
|
-o match:"apk add.*chrony" \
|
||||||
|
-o match:"rc-update .*chronyd" \
|
||||||
|
-o match:"rc-service .*chronyd" \
|
||||||
|
tiny-cloud main
|
||||||
|
}
|
||||||
|
|
||||||
|
userdata_ntp_busybox_body() {
|
||||||
|
fake_userdata_nocloud <<-EOF
|
||||||
|
#alpine-config
|
||||||
|
ntp:
|
||||||
|
enabled: true
|
||||||
|
ntp_client: busybox
|
||||||
|
EOF
|
||||||
|
atf_check -e ignore -o ignore tiny-cloud net
|
||||||
|
atf_check \
|
||||||
|
-e match:"userdata_ntp .*DONE" \
|
||||||
|
-o not-match:"apk add" \
|
||||||
|
-o match:"rc-update .*ntpd" \
|
||||||
|
-o match:"rc-service .*ntpd" \
|
||||||
|
tiny-cloud main
|
||||||
|
}
|
||||||
|
|
||||||
|
userdata_ntp_openntpd_body() {
|
||||||
|
fake_userdata_nocloud <<-EOF
|
||||||
|
#alpine-config
|
||||||
|
ntp:
|
||||||
|
enabled: true
|
||||||
|
ntp_client: openntpd
|
||||||
|
EOF
|
||||||
|
atf_check -e ignore -o ignore tiny-cloud net
|
||||||
|
atf_check \
|
||||||
|
-e match:"userdata_ntp .*DONE" \
|
||||||
|
-o match:"apk add.*openntpd" \
|
||||||
|
-o match:"rc-update .*openntpd" \
|
||||||
|
-o match:"rc-service .*openntpd" \
|
||||||
|
tiny-cloud main
|
||||||
|
}
|
||||||
|
|
||||||
|
userdata_apk_cache_body() {
|
||||||
|
fake_userdata_nocloud <<-EOF
|
||||||
|
#alpine-config
|
||||||
|
apk:
|
||||||
|
cache: /var/cache/apk
|
||||||
|
EOF
|
||||||
|
atf_check -e ignore -o ignore tiny-cloud net
|
||||||
|
atf_check \
|
||||||
|
-e match:"userdata_apk_cache .*DONE" \
|
||||||
|
-o ignore \
|
||||||
|
tiny-cloud main
|
||||||
|
atf_check -o match:"$PWD/var/cache/apk" readlink -f etc/apk/cache
|
||||||
|
}
|
||||||
|
|
||||||
|
userdata_apk_repositories_body() {
|
||||||
|
fake_userdata_nocloud <<-EOF
|
||||||
|
#alpine-config
|
||||||
|
apk:
|
||||||
|
repositories:
|
||||||
|
- base_url: /srv/packages
|
||||||
|
repos: [ "main", "community" ]
|
||||||
|
EOF
|
||||||
|
atf_check -e ignore -o ignore tiny-cloud net
|
||||||
|
atf_check \
|
||||||
|
-e match:"userdata_apk_repositories .*DONE" \
|
||||||
|
-o ignore \
|
||||||
|
tiny-cloud main
|
||||||
|
atf_check -o match:"^/srv/packages/main$" \
|
||||||
|
-o match:"^/srv/packages/community$" \
|
||||||
|
cat etc/apk/repositories
|
||||||
|
}
|
||||||
|
|
||||||
|
userdata_apk_repositories_version_body() {
|
||||||
|
fake_userdata_nocloud <<-EOF
|
||||||
|
#alpine-config
|
||||||
|
apk:
|
||||||
|
repositories:
|
||||||
|
- base_url: https://cdn.alpinelinux.org/
|
||||||
|
version: edge
|
||||||
|
repos: [ "main", "community" ]
|
||||||
|
EOF
|
||||||
|
atf_check -e ignore -o ignore tiny-cloud net
|
||||||
|
atf_check \
|
||||||
|
-e match:"userdata_apk_repositories .*DONE" \
|
||||||
|
-o ignore \
|
||||||
|
tiny-cloud main
|
||||||
|
atf_check -o match:"^https://cdn.alpinelinux.org/edge/main$" \
|
||||||
|
-o match:"^https://cdn.alpinelinux.org/edge/community$" \
|
||||||
|
cat etc/apk/repositories
|
||||||
|
}
|
||||||
|
|
||||||
|
userdata_apk_repositories_version_auto_edge_body() {
|
||||||
|
fake_userdata_nocloud <<-EOF
|
||||||
|
#alpine-config
|
||||||
|
apk:
|
||||||
|
repositories:
|
||||||
|
- base_url: https://cdn.alpinelinux.org/
|
||||||
|
repos: [ "main", "community" ]
|
||||||
|
EOF
|
||||||
|
mkdir -p etc
|
||||||
|
echo "VERSION_ID=3.18_alpha20230329" > etc/os-release
|
||||||
|
|
||||||
|
atf_check -e ignore -o ignore tiny-cloud net
|
||||||
|
atf_check \
|
||||||
|
-e match:"userdata_apk_repositories .*DONE" \
|
||||||
|
-o ignore \
|
||||||
|
tiny-cloud main
|
||||||
|
atf_check -o match:"^https://cdn.alpinelinux.org/edge/main$" \
|
||||||
|
-o match:"^https://cdn.alpinelinux.org/edge/community$" \
|
||||||
|
cat etc/apk/repositories
|
||||||
|
}
|
||||||
|
|
||||||
|
userdata_packages_body() {
|
||||||
|
fake_userdata_nocloud <<-EOF
|
||||||
|
#alpine-config
|
||||||
|
packages:
|
||||||
|
- tmux
|
||||||
|
- vim
|
||||||
|
EOF
|
||||||
|
atf_check -e ignore -o ignore tiny-cloud net
|
||||||
|
atf_check \
|
||||||
|
-e match:"userdata_packages .*DONE" \
|
||||||
|
-o match:"apk add .*tmux" \
|
||||||
|
-o match:"apk add .*vim" \
|
||||||
|
tiny-cloud main
|
||||||
|
}
|
||||||
|
|
||||||
|
userdata_runcmd_body() {
|
||||||
|
fake_userdata_nocloud <<-EOF
|
||||||
|
#alpine-config
|
||||||
|
runcmd:
|
||||||
|
- echo foo
|
||||||
|
- echo bar
|
||||||
|
EOF
|
||||||
|
# run net phase to extract the user data
|
||||||
|
atf_check -e ignore -o ignore tiny-cloud net
|
||||||
|
atf_check \
|
||||||
|
-e match:"userdata_runcmd .*DONE" \
|
||||||
|
-o match:"^foo$" -o match:"^bar$" \
|
||||||
|
tiny-cloud final
|
||||||
|
}
|
||||||
@ -9,6 +9,7 @@ PROVIDERS="alpine aws azure gcp nocloud oci"
|
|||||||
init_tests \
|
init_tests \
|
||||||
tiny_cloud_help \
|
tiny_cloud_help \
|
||||||
no_metadata_early \
|
no_metadata_early \
|
||||||
|
no_userdata_net \
|
||||||
no_userdata_main \
|
no_userdata_main \
|
||||||
no_userdata_final
|
no_userdata_final
|
||||||
|
|
||||||
@ -27,8 +28,8 @@ tiny_cloud_help_body() {
|
|||||||
no_metadata_early_body() {
|
no_metadata_early_body() {
|
||||||
fake_netcat
|
fake_netcat
|
||||||
for provider in $PROVIDERS; do
|
for provider in $PROVIDERS; do
|
||||||
# TODO: -e not-match:"UNKNOWN" \
|
|
||||||
CLOUD="$provider" atf_check \
|
CLOUD="$provider" atf_check \
|
||||||
|
-e not-match:"UNKNOWN" \
|
||||||
-e not-match:"not found" \
|
-e not-match:"not found" \
|
||||||
-e not-match:"o such file" \
|
-e not-match:"o such file" \
|
||||||
-o match:"rc-update add.*sshd" \
|
-o match:"rc-update add.*sshd" \
|
||||||
@ -36,14 +37,23 @@ no_metadata_early_body() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
no_userdata_net_body() {
|
||||||
|
fake_netcat
|
||||||
|
for provider in $PROVIDERS; do
|
||||||
|
CLOUD="$provider" atf_check \
|
||||||
|
-e not-match:"UNKNOWN" \
|
||||||
|
-e match:"save_userdata.*DONE" \
|
||||||
|
tiny-cloud net
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
no_userdata_main_body() {
|
no_userdata_main_body() {
|
||||||
fake_netcat
|
fake_netcat
|
||||||
for provider in $PROVIDERS; do
|
for provider in $PROVIDERS; do
|
||||||
# we should not set empty hostname
|
# we should not set empty hostname
|
||||||
# we should not create .ssh dir for non-existing user
|
# we should not create .ssh dir for non-existing user
|
||||||
# TODO: -e not-match:"UNKNOWN" \
|
|
||||||
CLOUD="$provider" atf_check \
|
CLOUD="$provider" atf_check \
|
||||||
-e ignore \
|
-e not-match:"UNKNOWN" \
|
||||||
-o not-match:"hostname.*-F" \
|
-o not-match:"hostname.*-F" \
|
||||||
-o not-match:"chown.*/\.ssh" \
|
-o not-match:"chown.*/\.ssh" \
|
||||||
tiny-cloud main
|
tiny-cloud main
|
||||||
@ -58,8 +68,8 @@ no_userdata_main_body() {
|
|||||||
no_userdata_final_body() {
|
no_userdata_final_body() {
|
||||||
fake_netcat
|
fake_netcat
|
||||||
for provider in $PROVIDERS; do
|
for provider in $PROVIDERS; do
|
||||||
# TODO: -e not-match:"UNKNOWN" \
|
|
||||||
CLOUD="$provider" atf_check \
|
CLOUD="$provider" atf_check \
|
||||||
|
-e not-match:"UNKNOWN" \
|
||||||
-e match:"bootstrap_complete .*" \
|
-e match:"bootstrap_complete .*" \
|
||||||
tiny-cloud final
|
tiny-cloud final
|
||||||
CLOUD="$provider" atf_check \
|
CLOUD="$provider" atf_check \
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user