Merge "Add ostree_repo pull and setup networking for bootstrap"

This commit is contained in:
Zuul 2022-08-10 16:09:52 +00:00 committed by Gerrit Code Review
commit cd0c3171b5

View File

@ -538,6 +538,119 @@ function get_std_controller_provisioning_sizes()
} }
#########################################################################
# Name : setup_ip_addr
# Purpose : Setup IP addressing for two cases:
# 1) initial boot and 2) persistent across reboot
# Parameter: operation: one of 'initial' or 'persistent'
# Return : Nothing
#########################################################################
function setup_ip_addr()
{
local operation=\$1
ilog "Setting Network address: \$operation"
# Pull out the ip= line from /proc/cmdline:
local ipstring
for arg in \$(cat /proc/cmdline); do
case "\$arg" in
ip=*)
ipstring=\${arg:3}
ilog "Using ip=\$ipstring"
break
;;
esac
done
local ip_version=
local ipadd=
local gw=
local prefixlen=
local bootif=
local ipver=
local route_options=
local metric=
local dns=
# Now we have a string like:
# <client-ip>,,<gw-ip>,<prefixlen>,<hostname>,<device>,off,<dns0-ip>,<dns1-ip>
# 1 2 3 4 5 6 7 8 9
# identify if ipv4 or ipv6, and get the ip address
#
# 10.10.10.22,,10.10.10.1,23,subcloud2,enp2s1,none (for ipv4)
# [2620:10a:a001:d41::212],,,64,subcloud3,ens1f0.401,none (for ipv6)
ipadd=\$(echo \$ipstring | awk -F',' '{print \$1}' | tr -d '\[\]')
gw=\$(echo \$ipstring | awk -F',' '{print \$3}')
prefixlen=\$(echo \$ipstring | awk -F',' '{print \$4}')
hostname=\$(echo \$ipstring | awk -F',' '{print \$5}')
bootif=\$(echo \$ipstring | awk -F',' '{print \$6}')
# Do not setup DNS for now - we use IP addresses during boot:
# dns=\$(echo \$ipstring | awk -F',' '{print \$8}')
case "\$ipstring" in
*'['*)
# if has [ ] then it is ipv6:
ip_version="ipv6"
ipver="-6"
metric="metric 1"
;;
*)
ip_version="ipv4"
route_options="via \$gw"
;;
esac
ilog "Using IP values: ip_version:\$ip_version ip:\$ipadd /\$prefixlen, gw:\$gw"
if [ "\$operation" = "initial" ]; then
if [ "\$ip_version" = "ipv4" ]; then
echo ip \${ipver} address add \${ipadd}/\${prefixlen} dev \${bootif}
ip \${ipver} address add \${ipadd}/\${prefixlen} dev \${bootif}
else
echo ip \${ipver} address add \${ipadd} dev \${bootif}
ip \${ipver} address add \${ipadd} dev \${bootif}
fi
sleep 15
echo ip \${ipver} link set dev \${bootif} up
ip \${ipver} link set dev \${bootif} up
echo ip \${ipver} route add default \${route_options} dev \${bootif} \${metric}
ip \${ipver} route add default \${route_options} dev \${bootif} \${metric}
ilog "ip addr:"
ip addr show
ilog "ip route:"
ip \${ipver} route show
# get the nameserver
local dns="none"
for e in \${dns}; do
echo "nameserver \${e}" > /etc/resolv.conf
done
elif [ "\$operation" = "persistent" ]; then
ilog "Creating /etc/network/interfaces.d/ifcfg-\$bootif"
if [ "\$ip_version" == "ipv4" ]; then
cat <<FUNC_EOF > /etc/network/interfaces.d/ifcfg-\$bootif
auto \$bootif
iface \$bootif inet static
address \$ipadd
netmask 255.255.255.0
gateway \$gw
mtu 1500
FUNC_EOF
else
cat <<FUNC_EOF > /etc/network/interfaces.d/ifcfg-\$bootif
auto \$bootif
iface \$bootif inet6 static
address \$ipadd
netmask \$prefixlen
FUNC_EOF
fi
ilog "Contents of /etc/network/interfaces.d/ifcfg-\$bootif"
cat "/etc/network/interfaces.d/ifcfg-\$bootif"
fi
}
########################################################################## ##########################################################################
# Global Kickstart Constants # # Global Kickstart Constants #
########################################################################## ##########################################################################
@ -706,26 +819,6 @@ function check_execs()
return ${missing_exec} return ${missing_exec}
} }
# TODO: Remove this function. LAT should be setting the IP address.
#
function set_nw_add_ipv4()
{
ilog "Setting Network IPV4 address"
set -- `cat /proc/cmdline`
ipstring=$(echo $* | xargs -n 1 | awk '/ip/ {print}' | awk -F'=' '{print $2}')
ipadd=$(echo ${ipstring} | awk -F':' '{print $1}')
gw=$(echo ${ipstring} | awk -F':' '{print $3}')
bootif=$(echo ${ipstring} | awk -F':' '{print $6}')
dlog "IPSTRING IS ${ipstring}"
dlog "IP=${ipadd} gw=${gw} bootif=${bootif}"
ip address add ${ipadd}/24 dev ${bootif}
ip link set dev ${bootif} up
ip route add default via ${gw} dev ${bootif}
echo "nameserver 128.244.144.130" > /etc/resolv.conf
ip route show
sleep 15
}
# Log Traits # Log Traits
[ "${controller}" = true ] && ilog "Controller Function" [ "${controller}" = true ] && ilog "Controller Function"
[ "${storage}" = true ] && ilog "Storage Function" [ "${storage}" = true ] && ilog "Storage Function"
@ -761,7 +854,6 @@ HOOK_LABEL="pre-part"
##################################################### #####################################################
# From pre_disk_setup_common.cfg # From pre_disk_setup_common.cfg
##################################################### #####################################################
set_nw_add_ipv4
if [ -n "$INSTDEV" ] ; then if [ -n "$INSTDEV" ] ; then
instdev_by_path=$(get_by_path $INSTDEV) instdev_by_path=$(get_by_path $INSTDEV)
@ -1387,6 +1479,20 @@ pvscan --cache 2>/dev/null
true true
%end %end
#####################################################################
%pre-part --interpreter=/bin/bash
HOOK_LABEL="pre-part"
. /tmp/lat/ks_functions.sh
ilog "****************************************************"
ilog "**** Pre-part - provision IP address (initial) **"
ilog "****************************************************"
setup_ip_addr initial
true
%end
########################################################################### ###########################################################################
%post --interpreter=/bin/bash %post --interpreter=/bin/bash
@ -1521,6 +1627,14 @@ true
%post --interpreter=/bin/bash %post --interpreter=/bin/bash
HOOK_LABEL="post" HOOK_LABEL="post"
. /tmp/lat/ks_functions.sh . /tmp/lat/ks_functions.sh
ilog "****************************************************"
ilog "*** Post - Persistent Interface Setup ***"
ilog "****************************************************"
ilog "Setting up /etc/network/interfaces"
setup_ip_addr persistent
ilog "****************************************************" ilog "****************************************************"
ilog "*** Post - Set Kernel Args ****" ilog "*** Post - Set Kernel Args ****"
ilog "****************************************************" ilog "****************************************************"
@ -1766,162 +1880,41 @@ true
########################################################################### ###########################################################################
%post --interpreter=/bin/bash %post --interpreter=/bin/bash --nochroot
HOOK_LABEL="post" HOOK_LABEL="post_nochroot"
. /tmp/lat/ks_functions.sh . /tmp/lat/ks_functions.sh
ilog "****************************************************"
ilog "*** Post - Interface Setup ***"
ilog "****************************************************"
########################################################### ###########################################################
# From post_pxeboot_controller # From post_miniboot_controller.cfg
# From post_net_common.cfg
########################################################### ###########################################################
# TODO: Not needed on a USB install. ilog "Local Install Check"
# TODO: Need to adjust fault handling or condition on USB install.
# Obtain the boot interface from the PXE boot # TODO: this is a second pull, which should be avoided.
BOOTIF=$(cat /proc/cmdline |xargs -n1 echo |grep BOOTIF=) # Remove this second pull and look at a single solution
BOOTIF=${BOOTIF#BOOTIF=} # where the archive is stored first and then installed.
mgmt_dev=lo #
mgmt_vlan=0 if [ "${controller}" = true ] ; then
if [ -n "$BOOTIF" ] ; then # Note: this is updated by the build:
BOOTIF=$(echo $BOOTIF | sed -r -e 's/.*(..-..-..-..-..-..)$/\1/' -e 's/-/:/g') sw_release="xxxPLATFORM_RELEASExxx"
ndev=`ip link show |grep -B 1 $BOOTIF |head -1 |awk '{print $2}' |sed -e 's/://'` feed="${IMAGE_ROOTFS}/var/www/pages/feed/rel-${sw_release}"
if [ -n "$ndev" ] ; then repo="${feed}/ostree_repo"
# convert to predictive name if [ ! -d "$repo" ]; then
mgmt_dev=$(get_iface_from_ethname $ndev) mkdir -p "${repo}"
if [ "${mgmt_dev}" == "" ] ; then
elog "failed to get predictive altname from ${ndev}"
mgmt_dev=${ndev}
# get vlan info for system node installs ilog "Initializing ostree repo at: $repo"
system_node=$(is_system_node_install) # get the remote installation details
if [ "${system_node}" = true ] ; then ostree --repo=${repo} init --mode=archive
# Retrieve the management VLAN from sysinv if it exists
ilog "Querying system inventory for management vlan id" if [ "${insturl}" = "file://NOT_SET" ] ; then
mgmt_vlan=`curl -sf http://pxecontroller:6385/v1/isystems/mgmtvlan` ostree --repo=${repo} remote add ${instbr} file:///instboot/ostree_repo
if [ ${?} -ne 0 ] ; then
# TODO: uncomment to force install failure for product
# report_failure_with_msg "Unable to communicate with System Inventory REST API. Aborting installation."
wlog "ERROR: Unable to communicate with System Inventory REST API."
fi
fi
else else
ilog "Management Interface: ${ndev} -> ${mgmt_dev}" ostree --repo=${repo} remote add ${instbr} ${insturl}
fi
else
elog "ERROR:POST: Unable to determine mgmt interface from BOOTIF=$BOOTIF."
# TODO: MAKE Default - Should not get here without BOOTIF set ; LAT guarantees that.
# report_failure_with_msg "Unable to determine mgmt interface from BOOTIF=$BOOTIF."
fi
else
elog "ERROR:POST: BOOTIF is not set. Unable to determine mgmt interface."
# TODO: MAKE Default - Should not get here without BOOTIF set ; LAT guarantees that.
fi fi
if [ ! -e "/etc/network/interfaces" ] ; then ilog "Populating: ostree --repo=${repo} pull --mirror ${instbr}:${instbr}"
cat << EOF >> /etc/network/interfaces ostree --repo=${repo} pull --mirror ${instbr}:${instbr}
# This file describes the network interfaces available on the system
# and how to activate them. For more information , see interfaces(5)
source /etc/network/interfaces.d/*
EOF
fi fi
if [ ! -d "/etc/network/interfaces.d" ] ; then
mkdir -p -m 0775 /etc/network/interfaces.d
fi
# Build networking scripts, starting with the localhost interface
cat << EOF >> /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
EOF
if [ $mgmt_dev != "lo" ]; then
cat << EOF >> /etc/network/interfaces
# management network interface
allow-hotplug $mgmt_dev
auto $mgmt_dev
iface $mgmt_dev inet dhcp
EOF
fi
ilog "Setup network scripts"
if [ $mgmt_vlan -eq 0 ] ; then
# 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=$mgmt_dev"
# Build networking scripts
cat << EOF > /etc/network/interfaces.d/ifcfg-lo
auto lo
iface lo inet static
address 127.0.0.1
netmask 255.0.0.0
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
cat << EOF > /etc/network/interfaces.d/ifcfg-$mgmt_dev
auto $mgmt_dev
iface $mgmt_dev inet manual
pre-up sleep 20
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
else
# Check whether to use inet or inet6
ipv6_addr=$(dig +short AAAA controller)
if [[ -n "$ipv6_addr" ]]
then
mgmt_address_family=inet6
ipv6init=yes
dhcpv6c=yes
dhclientargs=-1
else
mgmt_address_family=inet
ipv6init=no
dhcpv6c=no
dhclientargs=
fi
# 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 > /etc/network/interfaces.d/ifcfg-lo
auto lo
iface lo $mgmt_address_family static
address 127.0.0.1
netmask 255.0.0.0
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
cat << EOF > /etc/network/interfaces.d/ifcfg-$mgmt_dev
auto $mgmt_dev
iface $mgmt_dev $mgmt_address_family manual
pre-up sleep 20
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
cat << EOF > /etc/network/interfaces.d/ifcfg-vlan$mgmt_vlan
auto vlan$mgmt_vlan
iface vlan$mgmt_vlan $mgmt_address_family dhcp
vlan-raw-device $mgmt_dev
pre-up sleep 20
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
true true
@ -1945,12 +1938,15 @@ ilog "Add install uuid to feed and platform.conf"
if [ -e "${LAT_DIR}/INSTALL_UUID" ]; then if [ -e "${LAT_DIR}/INSTALL_UUID" ]; then
INSTALL_UUID=$(< "${LAT_DIR}/INSTALL_UUID") INSTALL_UUID=$(< "${LAT_DIR}/INSTALL_UUID")
else else
INSTALL_UUID=`uuidgen` INSTALL_UUID=$(uuidgen)
echo "${INSTALL_UUID}" > ${LAT_DIR}/INSTALL_UUID echo "${INSTALL_UUID}" > ${LAT_DIR}/INSTALL_UUID
fi fi
[ ! -d "/var/www/pages/feed/rel-22.06" ] && mkdir -p -m 0755 /var/www/pages/feed/rel-22.06 # Note: this is updated by the build:
echo ${INSTALL_UUID} > /var/www/pages/feed/rel-22.06/install_uuid sw_release="xxxPLATFORM_RELEASExxx"
www_release_dir="/var/www/pages/feed/rel-${sw_release}"
[ -d "$www_release_dir" ] || mkdir -p -m 0755 "$www_release_dir"
echo "${INSTALL_UUID}" > "${www_release_dir}/install_uuid"
update_platform_conf "INSTALL_UUID=${INSTALL_UUID}" update_platform_conf "INSTALL_UUID=${INSTALL_UUID}"
true true