1
0
mirror of https://gitlab.alpinelinux.org/alpine/cloud/tiny-cloud.git synced 2025-12-15 11:22:43 +03:00

Configure ephemeral network if needed

Add ipv4 address from dhcp if datasource is from https and no ipv4
address is configured.
This commit is contained in:
Natanael Copa 2023-12-12 17:14:54 +01:00 committed by Jake Buchholz Göktürk
parent ac08790a9a
commit 45cc24696b
3 changed files with 58 additions and 0 deletions

View File

@ -13,6 +13,36 @@ set_resolv_conf() {
done
}
has_ipv4_address() {
$MOCK ip -4 -o addr show | awk '$2 != "lo" {print $4}' \
| grep -q -E '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+'
}
want_ephemeral_network() {
if has_ipv4_address; then
return 1
fi
for i in $(cat "$ROOT"/proc/cmdline 2>/dev/null) \
$(cat "$ROOT"/sys/class/dmi/id/product_serial 2>/dev/null); do
case "$i" in
"ds=nocloud;"*)
for kv in $(echo "${i#*;}" | tr \; ' '); do
k="${kv%%=*}"
v="${kv#*=}"
case "$k" in
s|seedfrom)
case "$v" in
http://*|https://*) return 0;;
esac
;;
esac
done
;;
esac
done
return 1
}
init__set_network_interfaces() {
local interfaces="$(imds meta-data/network-interfaces)"
mkdir -p "$ROOT"/etc/network

View File

@ -14,6 +14,7 @@
DEFAULT_ACTIONS_BOOT="
expand_root
install_hotplugs
set_ephemeral_network
set_default_interfaces
enable_sshd
"
@ -143,6 +144,22 @@ auto_detect_ethernet_interface() {
echo "$iface"
}
# may be overridded by provider
want_ephemeral_network() {
false
}
init__set_ephemeral_network() {
if ! want_ephemeral_network; then
return
fi
local iface="$(auto_detect_ethernet_interface)"
if [ -z "$iface" ]; then
return
fi
$MOCK udhcpc -i "$iface" -f
}
init__set_default_interfaces() {
if [ -f "$ROOT"/etc/network/interfaces ]; then
log -i -t "$phase" info "$ACTION: already set up"

View File

@ -10,6 +10,7 @@ export CLOUD=alpine
lib="$srcdir"/lib/tiny-cloud/cloud/alpine/init
init_tests \
set_ephemeral_network_cmdline \
set_network_config_network_interfaces \
set_network_config_auto \
userdata_user_name \
@ -30,6 +31,16 @@ init_tests \
userdata_packages \
userdata_runcmd
set_ephemeral_network_cmdline_body() {
fake_interfaces eth0 eth1 eth2
echo up > sys/class/net/eth1/operstate
mkdir -p proc
echo "ds=nocloud;h=foo;seedfrom=https://example.tld" > proc/cmdline
atf_check \
-o match:"udhcpc.*eth1" \
-e match:"set_ephemeral_network: done" \
tiny-cloud boot
}
set_network_config_network_interfaces_body() {
fake_metadata_nocloud <<-EOF