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:
parent
ac08790a9a
commit
45cc24696b
@ -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
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user