mirror of
https://gitlab.alpinelinux.org/alpine/cloud/tiny-cloud.git
synced 2025-12-16 03:42:44 +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
|
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() {
|
init__set_network_interfaces() {
|
||||||
local interfaces="$(imds meta-data/network-interfaces)"
|
local interfaces="$(imds meta-data/network-interfaces)"
|
||||||
mkdir -p "$ROOT"/etc/network
|
mkdir -p "$ROOT"/etc/network
|
||||||
|
|||||||
@ -14,6 +14,7 @@
|
|||||||
DEFAULT_ACTIONS_BOOT="
|
DEFAULT_ACTIONS_BOOT="
|
||||||
expand_root
|
expand_root
|
||||||
install_hotplugs
|
install_hotplugs
|
||||||
|
set_ephemeral_network
|
||||||
set_default_interfaces
|
set_default_interfaces
|
||||||
enable_sshd
|
enable_sshd
|
||||||
"
|
"
|
||||||
@ -143,6 +144,22 @@ auto_detect_ethernet_interface() {
|
|||||||
echo "$iface"
|
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() {
|
init__set_default_interfaces() {
|
||||||
if [ -f "$ROOT"/etc/network/interfaces ]; then
|
if [ -f "$ROOT"/etc/network/interfaces ]; then
|
||||||
log -i -t "$phase" info "$ACTION: already set up"
|
log -i -t "$phase" info "$ACTION: already set up"
|
||||||
|
|||||||
@ -10,6 +10,7 @@ export CLOUD=alpine
|
|||||||
lib="$srcdir"/lib/tiny-cloud/cloud/alpine/init
|
lib="$srcdir"/lib/tiny-cloud/cloud/alpine/init
|
||||||
|
|
||||||
init_tests \
|
init_tests \
|
||||||
|
set_ephemeral_network_cmdline \
|
||||||
set_network_config_network_interfaces \
|
set_network_config_network_interfaces \
|
||||||
set_network_config_auto \
|
set_network_config_auto \
|
||||||
userdata_user_name \
|
userdata_user_name \
|
||||||
@ -30,6 +31,16 @@ init_tests \
|
|||||||
userdata_packages \
|
userdata_packages \
|
||||||
userdata_runcmd
|
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() {
|
set_network_config_network_interfaces_body() {
|
||||||
fake_metadata_nocloud <<-EOF
|
fake_metadata_nocloud <<-EOF
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user