Support bootstrap_vlan subcloud install value

Add Debian support for the bootstrap_vlan install parameter
in the subcloud install values file. For use in redfish installs.

The vlan interface is configured during the initial boot,
prior to the initial ostree pull. We also configure the
interfaces in /etc/network/interfaces.d for the post-ostree
reboot.

Story: 2010118
Task: 46538

Test Plan:

PASS:
- Install and provision subcloud with bootstrap_vlan value
  configured via subcloud install values - IPv6 hardware
    - Verify that subcloud installs, bootstraps, and is
      properly unlocked
- Tested in libvirt only: IPv4 configuration, including
  bootstrap_vlan value in IPv4 format. This test
  ensured that configuration is properly applied.
- Install and provision subcloud without bootstrap_vlan
  (regression case)
- Failure mode: verify that bootstrap fails if invalid
  vlan is configured

Signed-off-by: Kyle MacLeod <kyle.macleod@windriver.com>
Change-Id: If7e400359ad36cfb6835a8aff0f2ebd7d8e1817d
This commit is contained in:
Kyle MacLeod 2022-10-11 22:22:36 -04:00
parent 03e953d8df
commit 29d4047d14

View File

@ -751,6 +751,27 @@ function parse_miniboot_network_params()
;;
esac
# Parse the vlan= line from /proc/cmdline (if it exists):
local vlan=
for arg in \$(cat /proc/cmdline); do
case "\${arg}" in
vlan=*)
vlan=\${arg:5}
ilog "Parsing vlan=\${vlan}"
break
;;
esac
done
if [ -n "\${vlan}" ]; then
# Parameter format: "bootstrap_interface.bootstrap_vlan:bootstrap_interface"
dlog "Parsing vlan from \${vlan}"
vlan=\${vlan#*.} # remove prefix 'bootstrap_interface.'
vlan=\${vlan%:*} # remove suffix ':bootstrap_interface'
BOOTPARAM_VLAN=\${vlan}
BOOTPARAM_IFNAME=\${BOOTPARAM_IFNAME%.*} # remove suffix '.bootstrap_vlan'
fi
logmsg="Using IP values: ip:\$BOOTPARAM_IP_ADDR, family: \$BOOTPARAM_MGMT_ADDRESS_FAMILY"
if [ "\$BOOTPARAM_VLAN" -ne 0 ]; then
logmsg="\$logmsg vlan: \$BOOTPARAM_VLAN, "
@ -1168,7 +1189,12 @@ part_type_first_str="First sector"
part_type_end_str="Last sector"
part_type_flags_str="Attribute flags"
if [ "$(curl -sf http://pxecontroller:6385/v1/upgrade/$(hostname)/in_upgrade 2>/dev/null)" = "true" ]; then
# The /v1/upgrade/${hostname}/in_upgrade endpoint accepts any textual data
# as hostname and returns system-wide upgrade state
hostname="hostname"
if [ "$(curl -sf http://pxecontroller:6385/v1/upgrade/${hostname}/in_upgrade 2>/dev/null)" = "true" ]; then
# In an upgrade, only wipe the disk with the rootfs and boot partition
wlog "In upgrade, wiping only ${INSTDEV}"
@ -1451,9 +1477,9 @@ export INSTW=0
ilog "Setting up initial IP address for ostree pull"
parse_miniboot_network_params
mgmt_dev=$BOOTPARAM_IFNAME
mgmt_vlan=0 # TODO next commit
mgmt_address_family=$BOOTPARAM_MGMT_ADDRESS_FAMILY
mgmt_dev=${BOOTPARAM_IFNAME}
mgmt_vlan=${BOOTPARAM_VLAN}
mgmt_address_family=${BOOTPARAM_MGMT_ADDRESS_FAMILY}
if [ $mgmt_vlan -eq 0 ] ; then
@ -1475,6 +1501,37 @@ if [ $mgmt_vlan -eq 0 ] ; then
ip addr show
ilog "ip route:"
ip ${BOOTPARAM_IP_VER} route show
else
mgmt_iface=vlan${mgmt_vlan}
ilog "mgmt_dev=${mgmt_dev}"
ilog "mgmt_iface=vlan${mgmt_vlan}"
ilog "mgmt_address_family: ${mgmt_address_family}"
ilog "ip ${BOOTPARAM_IP_VER} link add link ${mgmt_dev} name $mgmt_iface type vlan id ${mgmt_vlan}"
ip ${BOOTPARAM_IP_VER} link add link ${mgmt_dev} name $mgmt_iface type vlan id ${mgmt_vlan}
if [ "${mgmt_address_family}" = "inet" ]; then
ilog "ip ${BOOTPARAM_IP_VER} address add ${BOOTPARAM_IP_ADDR}/${BOOTPARAM_PREFIX_LEN} dev ${mgmt_iface}"
ip ${BOOTPARAM_IP_VER} address add ${BOOTPARAM_IP_ADDR}/${BOOTPARAM_PREFIX_LEN} dev ${mgmt_iface}
else
ilog "ip ${BOOTPARAM_IP_VER} address add ${BOOTPARAM_IP_ADDR} dev ${mgmt_iface}"
ip ${BOOTPARAM_IP_VER} address add ${BOOTPARAM_IP_ADDR} dev ${mgmt_iface}
fi
ilog "ip ${BOOTPARAM_IP_VER} link set up dev ${mgmt_dev}"
ip ${BOOTPARAM_IP_VER} link set up dev ${mgmt_dev}
sleep 15
ilog "ip ${BOOTPARAM_IP_VER} link set up dev ${mgmt_iface}"
ip ${BOOTPARAM_IP_VER} link set up dev ${mgmt_iface}
ilog "Wait 10s to settle interface..."
sleep 10
ilog "ip ${BOOTPARAM_IP_VER} route add default ${BOOTPARAM_ROUTE_OPTIONS} dev ${mgmt_dev} ${BOOTPARAM_METRIC}"
ip ${BOOTPARAM_IP_VER} route add default ${BOOTPARAM_ROUTE_OPTIONS} dev ${mgmt_dev} ${BOOTPARAM_METRIC}
ilog "ip ${BOOTPARAM_IP_VER} addr:"
ip ${BOOTPARAM_IP_VER} addr show
ilog "ip ${BOOTPARAM_IP_VER} route:"
ip ${BOOTPARAM_IP_VER} route show
fi
# get the nameserver
local dns="none"
@ -2317,11 +2374,12 @@ ilog "************************************"
ilog "Creating network definitions in /etc/network/interfaces.d"
parse_miniboot_network_params
mgmt_dev=$BOOTPARAM_IFNAME
mgmt_vlan=0 # TODO next commit
mgmt_address_family=$BOOTPARAM_MGMT_ADDRESS_FAMILY
mgmt_dev=${BOOTPARAM_IFNAME}
mgmt_vlan=${BOOTPARAM_VLAN}
mgmt_address_family=${BOOTPARAM_MGMT_ADDRESS_FAMILY}
ilog "mgmt_dev: $mgmt_dev, mgmt_vlan: $mgmt_vlan, mgmt_address_family: $mgmt_address_family"
ilog "mgmt_dev : ${mgmt_dev}"
ilog "mgmt_vlan: ${mgmt_vlan}"
if [ ! -e "${IMAGE_ROOTFS}/etc/network/interfaces" ] ; then
cat << EOF >> ${IMAGE_ROOTFS}/etc/network/interfaces
@ -2351,7 +2409,7 @@ EOF
if [ $mgmt_dev != "lo" ]; then
ilog "Creating ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-$mgmt_dev"
if [ "$BOOTPARAM_MGMT_ADDRESS_FAMILY" == "inet" ]; then
if [ "${mgmt_address_family}" == "inet" ]; then
cat << EOF > ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-$mgmt_dev
auto $mgmt_dev
iface $mgmt_dev inet static
@ -2359,18 +2417,73 @@ iface $mgmt_dev inet static
gateway $BOOTPARAM_GW
mtu 1500
EOF
else # ipv6
else # inet6
cat << EOF > ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-$mgmt_dev
auto $mgmt_dev
iface $mgmt_dev inet6 static
address $BOOTPARAM_IP_ADDR/$BOOTPARAM_PREFIX_LEN
mtu 1500
post-up echo 0 > /proc/sys/net/ipv6/conf/lo/autoconf; echo 0 > /proc/sys/net/ipv6/conf/lo/accept_ra; echo 0 > /proc/sys/net/ipv6/conf/lo/accept_redirects
post-up echo 0 > /proc/sys/net/ipv6/conf/lo/autoconf; echo 0 > /proc/sys/net/ipv6/conf/lo/accept_ra; echo 0 > /proc/sys/net/ipv6/conf/lo/accept_redirects
EOF
fi
fi
ilog "Contents of ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-$mgmt_dev:"
ilog "$(cat "${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-$mgmt_dev")"
else # vlan
ilog "Configuring vlan: mgmt_iface=vlan${mgmt_vlan}"
# Persist the boot device to the platform configuration. This will get
# overwritten later if the management_interface is on a bonded interface.
update_platform_conf "management_interface=vlan${mgmt_vlan}"
# Build networking scripts
cat << EOF > ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-lo
auto lo
iface lo ${mgmt_address_family} loopback
EOF
if [ "${mgmt_address_family}" == "inet" ]; then
cat << EOF > ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-$mgmt_dev
auto ${mgmt_dev}
iface ${mgmt_dev} inet manual
post-up echo 0 > /proc/sys/net/ipv4/conf/${mgmt_dev}/autoconf; echo 0 > /proc/sys/net/ipv4/conf/${mgmt_dev}/accept_ra; echo 0 > /proc/sys/net/ipv4/conf/${mgmt_dev}/accept_redirects
EOF
cat << EOF > ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-vlan${mgmt_vlan}
auto vlan${mgmt_vlan}
iface vlan${mgmt_vlan} inet static
vlan-raw-device ${mgmt_dev}
address ${BOOTPARAM_IP_ADDR}/${BOOTPARAM_PREFIX_LEN}
gateway ${BOOTPARAM_GW}
mtu 1500
post-up echo 0 > /proc/sys/net/ipv4/conf/vlan${mgmt_vlan}/autoconf; echo 0 > /proc/sys/net/ipv4/conf/vlan${mgmt_vlan}/accept_ra; echo 0 > /proc/sys/net/ipv4/conf/vlan${mgmt_vlan}/accept_redirects
EOF
else # inet6
cat << EOF > ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-${mgmt_dev}
auto ${mgmt_dev}
iface ${mgmt_dev} inet6 manual
post-up echo 0 > /proc/sys/net/ipv6/conf/${mgmt_dev}/autoconf; echo 0 > /proc/sys/net/ipv6/conf/${mgmt_dev}/accept_ra; echo 0 > /proc/sys/net/ipv6/conf/${mgmt_dev}/accept_redirects
EOF
cat << EOF > ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-vlan${mgmt_vlan}
auto vlan${mgmt_vlan}
iface vlan${mgmt_vlan} inet6 static
vlan-raw-device ${mgmt_dev}
address ${BOOTPARAM_IP_ADDR}/${BOOTPARAM_PREFIX_LEN}
mtu 1500
post-up echo 0 > /proc/sys/net/ipv6/conf/vlan${mgmt_vlan}/autoconf; echo 0 > /proc/sys/net/ipv6/conf/vlan${mgmt_vlan}/accept_ra; echo 0 > /proc/sys/net/ipv6/conf/vlan${mgmt_vlan}/accept_redirects
EOF
fi
fi
ilog "Contents of ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-lo:"
ilog "$(cat "${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-lo")"
ilog "Contents of ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-${mgmt_dev}:"
ilog "$(cat "${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-${mgmt_dev}")"
if [ -f "${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-vlan${mgmt_vlan}" ]; then
ilog "Contents of ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-vlan${mgmt_vlan}:"
ilog "$(cat "${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-vlan${mgmt_vlan}")"
fi
true