Add sysinv query for host's mgmt_ip and hostname based on bootif mac
The newly introduced unauthenticated 'mgmt_ip' API in sysinv, as referenced by the 'depends-on' link below, has been added to initiate a query for the current host's management IP and hostname. This information is needed by the kickstart to create a static 'ifcfg-<mgmt interface>' file so that the management interface is automatically setup on the first boot following a fresh install. The significance of this step lies in enabling a pre-configuration of IPsec on the management network before host configuration takes place. This update also - creates a dhcp ifcfg-pxeboot file to automatically update the management interface with a pxeboot dhcp address. - creates an initial /etc/resolv.conf file with the active controller's floating ip and the pxecontroller ip addresses which are also needed by the IPSec setup pre-configuration following the first reboot after node install. Additionally, this update involves a refinement in terminology. The variable previously named 'mgmt_dev' has been aptly renamed 'boot_dev' to more accurately reflect the nomenclature of the interface in use. Test Plan: PASS: Verify AIO DX install of IPV4 and IPV6 with and without vlans PASS: Verify IPV4 worker node install PASS: Verify management interface 'ifcfg-<mgmt-if>' file is created - cases: with and without vlan PASS: Verify pxeboot interface 'ifcfg-pxeboot' is created (ipv4 only) PASS: Verify kickstart fails the install if it receives badly formatted sysinv mgmt_ip query or None. PASS: Verify resolve.conf updated with nameserver <floating ip> PASS: Verify resolve.conf updated with nameserver <pxecontroller ip> PASS: Verify kickstart logging Depends-On: https://review.opendev.org/c/starlingx/config/+/901981 Story: 2010940 Task: 49162 Change-Id: I429522305fcff66e5c78195f4bf3c5b82826c1d8 Signed-off-by: Eric MacDonald <eric.macdonald@windriver.com>
This commit is contained in:
parent
5a3a5ce8ea
commit
19346c232a
|
@ -2537,15 +2537,78 @@ ilog "************************************"
|
||||||
# Obtain the boot interface from the PXE boot
|
# Obtain the boot interface from the PXE boot
|
||||||
BOOTIF=$(cat /proc/cmdline |xargs -n1 echo |grep BOOTIF=)
|
BOOTIF=$(cat /proc/cmdline |xargs -n1 echo |grep BOOTIF=)
|
||||||
BOOTIF=${BOOTIF#BOOTIF=}
|
BOOTIF=${BOOTIF#BOOTIF=}
|
||||||
mgmt_dev=lo
|
boot_dev=lo
|
||||||
mgmt_vlan=0
|
mgmt_vlan=0
|
||||||
if [ -n "$BOOTIF" ] ; then
|
|
||||||
BOOTIF=$(echo $BOOTIF | sed -r -e 's/.*(..-..-..-..-..-..)$/\1/' -e 's/-/:/g')
|
# host_info is fetched from system inventory by curl using
|
||||||
ndev=`ip link show |grep -B 1 $BOOTIF |head -1 |awk '{print $2}' |sed -e 's/://'`
|
# the sysinv public api with the boot interface mac address.
|
||||||
if [ -n "$ndev" ] ; then
|
# curl -sf http://pxecontroller:6385/v1/ihosts/<mac>/mgmt_ip
|
||||||
|
#
|
||||||
|
# System inventory returns the following quoted string containing
|
||||||
|
# the hostname, management ip and netmask (prefix) that matches the
|
||||||
|
# supplied mac address.
|
||||||
|
#
|
||||||
|
# "<hostname> <mgmt ip>/<netmask>"
|
||||||
|
#
|
||||||
|
# This information is used to create a management network interface
|
||||||
|
# setup file for /etc/network/interfaces.d/ifcfg_<mgmt> so that IPSec
|
||||||
|
# can be configured early in the first reboot following the install.
|
||||||
|
# Specifically before config / puppet manifests are run.
|
||||||
|
host_info=""
|
||||||
|
|
||||||
|
# The management ip and netmask are extracted from ${host_info}
|
||||||
|
mgmt_ip=""
|
||||||
|
mgmt_nm=0
|
||||||
|
mgmt_gw=0
|
||||||
|
|
||||||
|
if [ -n "${BOOTIF}" ] ; then
|
||||||
|
# convert xx-xx-xx-xx-xx-xx to xx:xx:xx:xx:xx:xx
|
||||||
|
BOOTIF=$(echo ${BOOTIF} | sed -r -e 's/.*(..-..-..-..-..-..)$/\1/' -e 's/-/:/g')
|
||||||
|
if is_system_node_install -eq 0 ; then
|
||||||
|
get_mgmt_ip_cmd="curl -sf http://pxecontroller:6385/v1/ihosts/${BOOTIF}/mgmt_ip"
|
||||||
|
host_info=`${get_mgmt_ip_cmd}`
|
||||||
|
rc=$?
|
||||||
|
if [ ${rc} -ne 0 ] ; then
|
||||||
|
elog "Failed command: ${get_mgmt_ip_cmd}"
|
||||||
|
report_failure_with_msg "Unable to fetch management network IP from System Inventory REST API. Aborting installation. rc:${rc}"
|
||||||
|
elif [[ ${#host_info} -lt 8 ]] ; then
|
||||||
|
report_failure_with_msg "Host Info fetched from System Inventory REST API is invalid : [${host_info}]. Aborting installation."
|
||||||
|
else
|
||||||
|
# remove unwanted string quotes
|
||||||
|
ilog "Host Info: ${host_info}"
|
||||||
|
mgmt_nm=$(echo "${host_info}" | grep -o '"netmask": "[^"]*' | cut -d'"' -f4)
|
||||||
|
mgmt_ip=$(echo "${host_info}" | grep -o '"address": "[^"]*' | cut -d'"' -f4)
|
||||||
|
ilog "... mgmt_ip=${mgmt_ip} and mgmt_nm=${mgmt_nm}"
|
||||||
|
if [ -z "${mgmt_ip}" -o "${mgmt_ip}" == "None" -o -z "${mgmt_nm}" -o "${mgmt_nm}" = "None" ] ; then
|
||||||
|
report_failure_with_msg "Unable to parse management ip and netmask from sysinv queried mgmt_ip info : value:${host_info}. Aborting Installation."
|
||||||
|
else
|
||||||
|
mgmt_gw=$(echo "${mgmt_ip}" | awk -F'.' -v OFS='.' '{$NF=1}1')
|
||||||
|
ilog "... mgmt_gw=${mgmt_gw}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
hostname=$(echo "${host_info}" | grep -o '"hostname": "[^"]*' | cut -d'"' -f4)
|
||||||
|
if [ -z "${hostname}" -o "${hostname}" == "None" ] ; then
|
||||||
|
report_failure_with_msg "Unable to parse hostname from sysinv queried mgmt_ip info: value:${host_info}. Aborting Installation."
|
||||||
|
else
|
||||||
|
ilog "adding ${hostname} to ${IMAGE_ROOTFS}/etc/hostname"
|
||||||
|
echo "${hostname}" > ${IMAGE_ROOTFS}/etc/hostname
|
||||||
|
fi
|
||||||
|
|
||||||
|
floating=$(echo "${host_info}" | grep -o '"floating": "[^"]*' | cut -d'"' -f4)
|
||||||
|
if [ -z "${floating}" -o "${floating}" == "None" ] ; then
|
||||||
|
report_failure_with_msg "Unable to parse floating ip from sysinv queried mgmt_ip info: value:${host_info}. Aborting Installation."
|
||||||
|
else
|
||||||
|
ilog "adding nameserver ${floating} to ${IMAGE_ROOTFS}/etc/resolv.conf"
|
||||||
|
echo "nameserver ${floating}" >> ${IMAGE_ROOTFS}/etc/resolv.conf
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
ndev=`ip link show |grep -B 1 ${BOOTIF} |head -1 |awk '{print $2}' |sed -e 's/://'`
|
||||||
|
if [ -n "${ndev}" ] ; then
|
||||||
# convert to predictive name
|
# convert to predictive name
|
||||||
mgmt_dev=$(get_iface_from_ethname $ndev)
|
boot_dev=$(get_iface_from_ethname ${ndev})
|
||||||
if [ "${mgmt_dev}" == "" ] ; then
|
if [ "${boot_dev}" == "" ] ; then
|
||||||
report_failure_with_msg "failed to get predictive altname from ${ndev}"
|
report_failure_with_msg "failed to get predictive altname from ${ndev}"
|
||||||
fi
|
fi
|
||||||
# get vlan info for system node installs
|
# get vlan info for system node installs
|
||||||
|
@ -2557,19 +2620,19 @@ if [ -n "$BOOTIF" ] ; then
|
||||||
if [ ${rc} -ne 0 ] ; then
|
if [ ${rc} -ne 0 ] ; then
|
||||||
report_failure_with_msg "Unable to communicate with System Inventory REST API. Aborting installation. rc:${rc}"
|
report_failure_with_msg "Unable to communicate with System Inventory REST API. Aborting installation. rc:${rc}"
|
||||||
fi
|
fi
|
||||||
ilog "Management Interface: ${ndev} -> ${mgmt_dev} -> vlan${mgmt_vlan}"
|
ilog "Pxeboot Interface: ${ndev} -> ${boot_dev} -> vlan${mgmt_vlan}"
|
||||||
else
|
else
|
||||||
ilog "Management Interface: ${ndev} -> ${mgmt_dev}"
|
ilog "Pxeboot Interface: ${ndev} -> ${boot_dev}"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
report_failure_with_msg "Unable to determine mgmt interface from BOOTIF=$BOOTIF."
|
report_failure_with_msg "Unable to determine boot interface from BOOTIF=$BOOTIF."
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
wlog "BOOTIF is not set. Unable to determine mgmt interface."
|
wlog "BOOTIF is not set. Unable to determine boot interface."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ilog "mgmt_dev : $mgmt_dev"
|
ilog "boot_dev : ${boot_dev}"
|
||||||
ilog "mgmt_vlan: $mgmt_vlan"
|
ilog "mgmt_vlan: ${mgmt_vlan}"
|
||||||
|
|
||||||
if [ ! -e "${IMAGE_ROOTFS}/etc/network/interfaces" ] ; then
|
if [ ! -e "${IMAGE_ROOTFS}/etc/network/interfaces" ] ; then
|
||||||
cat << EOF >> ${IMAGE_ROOTFS}/etc/network/interfaces
|
cat << EOF >> ${IMAGE_ROOTFS}/etc/network/interfaces
|
||||||
|
@ -2585,64 +2648,120 @@ fi
|
||||||
|
|
||||||
ilog "Setup network scripts"
|
ilog "Setup network scripts"
|
||||||
|
|
||||||
if [ $mgmt_vlan -eq 0 ] ; then
|
# Create the default ipv4 pxeboot network interface setup file
|
||||||
|
if [[ ${boot_dev} != "lo" && is_system_node_install -eq 0 ]] ; then
|
||||||
|
|
||||||
|
# create a pxeboot network setup script based on the pxeboot assigned ip
|
||||||
|
pxeboot_ip=$(ip -o -4 addr show ${boot_dev} | awk '{print $4}' | cut -d/ -f1)
|
||||||
|
ifcfg_file="${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-pxeboot"
|
||||||
|
ilog "dhcp leased pxeboot_ip is ${pxeboot_ip}"
|
||||||
|
ilog "Creating dhcp pxeboot ${ifcfg_file}"
|
||||||
|
cat << EOF > ${ifcfg_file}
|
||||||
|
auto ${boot_dev}:2
|
||||||
|
iface ${boot_dev}:2 inet dhcp
|
||||||
|
post-up echo 0 > /proc/sys/net/ipv6/conf/${boot_dev}/autoconf; echo 0 > /proc/sys/net/ipv6/conf/${boot_dev}/accept_ra; echo 0 > /proc/sys/net/ipv6/conf/${boot_dev}/accept_redirects
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# add the pxecontroller ip address to /etc/resolv.conf
|
||||||
|
output=$(nslookup pxecontroller | grep "Name:" -C 1 | grep Address)
|
||||||
|
if [ -z "${output}" ] ; then
|
||||||
|
wlog "nslookup pxecontroller did not yield an ip address"
|
||||||
|
else
|
||||||
|
pxeboot_gw=$(echo "${output}" | awk '{print $2}')
|
||||||
|
ilog "adding nameserver ${pxeboot_gw} to ${IMAGE_ROOTFS}/etc/resolv.conf"
|
||||||
|
echo "nameserver ${pxeboot_gw}" >> ${IMAGE_ROOTFS}/etc/resolv.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if this is a vlan setup
|
||||||
|
if [ ${mgmt_vlan} -eq 0 ] ; then
|
||||||
|
|
||||||
|
# Not vlan path
|
||||||
|
|
||||||
# Persist the boot device to the platform configuration. This will get
|
# Persist the boot device to the platform configuration. This will get
|
||||||
# overwritten later if the management_interface is on a bonded interface.
|
# overwritten later if the management_interface is on a bonded interface.
|
||||||
update_platform_conf "management_interface=$mgmt_dev"
|
update_platform_conf "management_interface=${boot_dev}"
|
||||||
|
|
||||||
# Build networking scripts
|
# Build networking scripts
|
||||||
cat << EOF > ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-lo
|
cat << EOF > ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-lo
|
||||||
auto lo
|
auto lo
|
||||||
iface lo inet loopback
|
iface lo inet loopback
|
||||||
EOF
|
EOF
|
||||||
|
if [[ ${boot_dev} != "lo" && is_system_node_install -eq 0 ]] ; then
|
||||||
if [ $mgmt_dev != "lo" ]; then
|
# setup the management interface with the sysinv supplied static address
|
||||||
ilog "Creating ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-$mgmt_dev"
|
if [ -n "${host_info}" ] ; then
|
||||||
cat << EOF > ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-$mgmt_dev
|
ifcfg_file="${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-${boot_dev}"
|
||||||
auto $mgmt_dev
|
ilog "Creating static mgmt ${ifcfg_file}"
|
||||||
iface $mgmt_dev inet dhcp
|
cat << EOF > ${ifcfg_file}
|
||||||
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
|
auto ${boot_dev}
|
||||||
|
iface ${boot_dev} inet static
|
||||||
|
address ${mgmt_ip}
|
||||||
|
netmask ${mgmt_nm}
|
||||||
|
gateway ${mgmt_gw}
|
||||||
|
post-up echo 0 > /proc/sys/net/ipv6/conf/${boot_dev}/autoconf; echo 0 > /proc/sys/net/ipv6/conf/${boot_dev}/accept_ra; echo 0 > /proc/sys/net/ipv6/conf/${boot_dev}/accept_redirects
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
# Is a pxeboot but not a system node install - likely controller-0
|
||||||
|
# Setup boot interface with DHCP so we can log into the server following the install.
|
||||||
|
# This will get changed during ansible bootstrap
|
||||||
|
ifcfg_file=${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-${boot_dev}
|
||||||
|
ilog "Creating dhcp mgmt ${ifcfg_file}"
|
||||||
|
cat << EOF > ${ifcfg_file}
|
||||||
|
auto ${boot_dev}
|
||||||
|
iface ${boot_dev} inet dhcp
|
||||||
|
post-up echo 0 > /proc/sys/net/ipv6/conf/${boot_dev}/autoconf; echo 0 > /proc/sys/net/ipv6/conf/${boot_dev}/accept_ra; echo 0 > /proc/sys/net/ipv6/conf/${boot_dev}/accept_redirects
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
else # vlan
|
else # vlan
|
||||||
ilog "Configuring vlan: mgmt_iface=vlan$mgmt_vlan"
|
ilog "Configuring vlan: boot_iface=vlan${mgmt_vlan}"
|
||||||
|
|
||||||
# Check whether to use inet or inet6
|
# Check whether to use inet or inet6
|
||||||
ipv6_addr=$(dig +short AAAA controller.internal)
|
ipv6_addr=$(dig +short AAAA controller.internal)
|
||||||
if [[ -n "$ipv6_addr" ]]
|
if [[ -n "${ipv6_addr}" ]]
|
||||||
then
|
then
|
||||||
mgmt_address_family=inet6
|
boot_address_family=inet6
|
||||||
ipv6init=yes
|
ipv6init=yes
|
||||||
dhcpv6c=yes
|
dhcpv6c=yes
|
||||||
else
|
else
|
||||||
mgmt_address_family=inet
|
boot_address_family=inet
|
||||||
ipv6init=no
|
ipv6init=no
|
||||||
dhcpv6c=no
|
dhcpv6c=no
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Persist the boot device to the platform configuration. This will get
|
# Persist the boot device to the platform configuration. This will get
|
||||||
# overwritten later if the management_interface is on a bonded interface.
|
# overwritten later if the management_interface is on a bonded interface.
|
||||||
update_platform_conf "management_interface=vlan$mgmt_vlan"
|
update_platform_conf "management_interface=vlan${mgmt_vlan}"
|
||||||
|
|
||||||
# Build networking scripts
|
# Build networking scripts
|
||||||
cat << EOF > ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-lo
|
cat << EOF > ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-lo
|
||||||
auto lo
|
auto lo
|
||||||
iface lo $mgmt_address_family loopback
|
iface lo ${boot_address_family} loopback
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat << EOF > ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-$mgmt_dev
|
ifcfg_file="${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-${boot_dev}"
|
||||||
auto $mgmt_dev
|
ilog "Creating manual mgmt ${ifcfg_file}"
|
||||||
iface $mgmt_dev $mgmt_address_family manual
|
cat << EOF > ${ifcfg_file}
|
||||||
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
|
auto ${boot_dev}
|
||||||
|
iface ${boot_dev} ${boot_address_family} manual
|
||||||
|
address ${mgmt_ip}
|
||||||
|
netmask ${mgmt_nm}
|
||||||
|
gateway ${mgmt_gw}
|
||||||
|
post-up echo 0 > /proc/sys/net/ipv6/conf/${boot_dev}/autoconf; echo 0 > /proc/sys/net/ipv6/conf/${boot_dev}/accept_ra; echo 0 > /proc/sys/net/ipv6/conf/${boot_dev}/accept_redirects
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat << EOF > ${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-vlan$mgmt_vlan
|
ifcfg_file="${IMAGE_ROOTFS}/etc/network/interfaces.d/ifcfg-vlan${mgmt_vlan}"
|
||||||
auto vlan$mgmt_vlan
|
ilog "Creating static mgmt vlan ${ifcfg_file}"
|
||||||
iface vlan$mgmt_vlan $mgmt_address_family dhcp
|
cat << EOF > ${ifcfg_file}
|
||||||
vlan-raw-device $mgmt_dev
|
auto vlan${mgmt_vlan}
|
||||||
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
|
iface vlan${mgmt_vlan} ${boot_address_family} static
|
||||||
|
address ${mgmt_ip}
|
||||||
|
netmask ${mgmt_nm}
|
||||||
|
gateway ${mgmt_gw}
|
||||||
|
vlan-raw-device ${boot_dev}
|
||||||
|
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
|
EOF
|
||||||
|
|
||||||
# Reject DHCPOFFER from DHCP server that doesn't send
|
# Reject DHCPOFFER from DHCP server that doesn't send
|
||||||
|
@ -2653,24 +2772,24 @@ EOF
|
||||||
echo "send dhcp6.client-id = concat(00:03:00, hardware);" >>/etc/dhcp/dhclient.conf
|
echo "send dhcp6.client-id = concat(00:03:00, hardware);" >>/etc/dhcp/dhclient.conf
|
||||||
echo "send dhcp-client-identifier = concat(00:03:00, hardware);" >>/etc/dhcp/dhclient.conf
|
echo "send dhcp-client-identifier = concat(00:03:00, hardware);" >>/etc/dhcp/dhclient.conf
|
||||||
|
|
||||||
# Bring up the mgmt vlan so that a dhcp lease is acquired and an address is
|
# Bring up the boot vlan so that a dhcp lease is acquired and an address is
|
||||||
# setup prior to the post-install reboot. This is so that the timing of the IP
|
# setup prior to the post-install reboot. This is so that the timing of the IP
|
||||||
# address allocation is similar to how normal/non-pxe installation works.
|
# address allocation is similar to how normal/non-pxe installation works.
|
||||||
mgmt_iface=vlan$mgmt_vlan
|
boot_iface=vlan${mgmt_vlan}
|
||||||
ilog "mgmt_iface=vlan$mgmt_vlan"
|
ilog "boot_iface=vlan${mgmt_vlan}"
|
||||||
ilog "mgmt_address_family: $mgmt_address_family"
|
ilog "boot_address_family: ${boot_address_family}"
|
||||||
|
|
||||||
dhclient_family=$([[ $mgmt_address_family == "inet" ]] && echo -4 || echo -6)
|
dhclient_family=$([[ ${boot_address_family} == "inet" ]] && echo -4 || echo -6)
|
||||||
ilog "dhclient_family: $dhclient_family"
|
ilog "dhclient_family: ${dhclient_family}"
|
||||||
ilog "ip link add link $mgmt_dev name $mgmt_iface type vlan id $mgmt_vlan"
|
ilog "ip link add link ${boot_dev} name ${boot_iface} type vlan id ${mgmt_vlan}"
|
||||||
|
|
||||||
ip link add link $mgmt_dev name $mgmt_iface type vlan id $mgmt_vlan
|
ip link add link ${boot_dev} name ${boot_iface} type vlan id ${mgmt_vlan}
|
||||||
|
|
||||||
ilog "ip link set up dev $mgmt_iface"
|
ilog "ip link set up dev ${boot_iface}"
|
||||||
ip link set up dev $mgmt_iface
|
ip link set up dev ${boot_iface}
|
||||||
|
|
||||||
timeout_value=60
|
timeout_value=60
|
||||||
dhclient_request="/usr/sbin/dhclient $dhclient_family $mgmt_iface"
|
dhclient_request="/usr/sbin/dhclient $dhclient_family $boot_iface"
|
||||||
ilog "timeout ${timeout_value} ${dhclient_request}"
|
ilog "timeout ${timeout_value} ${dhclient_request}"
|
||||||
timeout ${timeout_value} ${dhclient_request}
|
timeout ${timeout_value} ${dhclient_request}
|
||||||
rc=${?}
|
rc=${?}
|
||||||
|
|
Loading…
Reference in New Issue