[installer] Fix variable inside machine.conf caused install.sh error (#6600)
Encounter error when install SONiC image if there are some onie_discovery variables assigned with multiple values inside machine.conf - How I did it Replace original ". /machine.conf" method and add another function to do the same thing. - How to verify it Add a item inside /host/machine.conf like onie_disco_ntpsrv=10.254.141.10 10.254.141.131 Do sonic_installer install to check if any error occurs
This commit is contained in:
parent
62a599a5b3
commit
cb70c662df
@ -20,6 +20,26 @@ _trap_push() {
|
||||
}
|
||||
_trap_push true
|
||||
|
||||
read_conf_file() {
|
||||
local conf_file=$1
|
||||
while IFS='=' read -r var value || [ -n "$var" ]
|
||||
do
|
||||
# remove newline character
|
||||
var=$(echo $var | tr -d '\r\n')
|
||||
value=$(echo $value | tr -d '\r\n')
|
||||
# remove comment string
|
||||
var=${var%#*}
|
||||
value=${value%#*}
|
||||
# skip blank line
|
||||
[ -z "$var" ] && continue
|
||||
# remove double quote in the beginning
|
||||
tmp_val=${value#\"}
|
||||
# remove double quote in the end
|
||||
value=${tmp_val%\"}
|
||||
eval "$var=\"$value\""
|
||||
done < "$conf_file"
|
||||
}
|
||||
|
||||
# Main
|
||||
set -e
|
||||
cd $(dirname $0)
|
||||
@ -37,7 +57,7 @@ else
|
||||
fi
|
||||
|
||||
if [ -r ./machine.conf ]; then
|
||||
. ./machine.conf
|
||||
read_conf_file "./machine.conf"
|
||||
fi
|
||||
|
||||
if [ -r ./onie-image.conf ]; then
|
||||
@ -54,9 +74,9 @@ fi
|
||||
|
||||
# get running machine from conf file
|
||||
if [ -r /etc/machine.conf ]; then
|
||||
. /etc/machine.conf
|
||||
read_conf_file "/etc/machine.conf"
|
||||
elif [ -r /host/machine.conf ]; then
|
||||
. /host/machine.conf
|
||||
read_conf_file "/host/machine.conf"
|
||||
elif [ "$install_env" != "build" ]; then
|
||||
echo "cannot find machine.conf"
|
||||
exit 1
|
||||
|
16
installer/x86_64/tests/sample_machine.conf
Normal file
16
installer/x86_64/tests/sample_machine.conf
Normal file
@ -0,0 +1,16 @@
|
||||
# sample_machine.conf for onie
|
||||
# A space in front of comment line
|
||||
# One blank line below
|
||||
|
||||
onie_machine_rev=0
|
||||
onie_arch=x86_64# some comment after declaration
|
||||
# no value declaration
|
||||
onie_config_version=
|
||||
onie_build_date="2021-02-03T01:50+0800"
|
||||
onie_partition_type=gpt
|
||||
onie_disco_ntpsrv=192.168.0.1 192.168.0.2
|
||||
onie_firmware=auto
|
||||
# another blank line below
|
||||
|
||||
onie_skip_ethmgmt_macs=no
|
||||
onie_grub_image_name=grubx64.efi
|
61
installer/x86_64/tests/test_read_conf.sh
Normal file
61
installer/x86_64/tests/test_read_conf.sh
Normal file
@ -0,0 +1,61 @@
|
||||
#!/bin/sh
|
||||
# This is a standalone test file to test read_conf_file function for
|
||||
# some types of machine.conf file.
|
||||
# The read_conf_file function is copy from the install.sh
|
||||
|
||||
MACHINE_CONF="sample_machine.conf"
|
||||
|
||||
read_conf_file() {
|
||||
local conf_file=$1
|
||||
while IFS='=' read -r var value || [ -n "$var" ]
|
||||
do
|
||||
# remove newline character
|
||||
var=$(echo $var | tr -d '\r\n')
|
||||
value=$(echo $value | tr -d '\r\n')
|
||||
# remove comment string
|
||||
var=${var%#*}
|
||||
value=${value%#*}
|
||||
# skip blank line
|
||||
[ -z "$var" ] && continue
|
||||
# remove double quote in the beginning
|
||||
tmp_val=${value#\"}
|
||||
# remove double quote in the end
|
||||
value=${tmp_val%\"}
|
||||
eval "$var=\"$value\""
|
||||
done < "$conf_file"
|
||||
}
|
||||
|
||||
TEST_CONF() {
|
||||
input_value=$1
|
||||
exp_value=$2
|
||||
if [ "$input_value" != "$exp_value" ]; then
|
||||
echo "[ERR] Expect value($exp_value) is not equal to input value($input_value)"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# define the expected variable value
|
||||
exp_onie_machine_rev="0"
|
||||
exp_onie_arch="x86_64"
|
||||
exp_onie_build_date="2021-02-03T01:50+0800"
|
||||
exp_onie_partition_type="gpt"
|
||||
exp_onie_disco_ntpsrv="192.168.0.1 192.168.0.2"
|
||||
exp_onie_firmware="auto"
|
||||
exp_onie_skip_ethmgmt_macs="no"
|
||||
exp_onie_grub_image_name="grubx64.efi"
|
||||
|
||||
# read the sample conf file
|
||||
read_conf_file $MACHINE_CONF
|
||||
|
||||
# check each variable and its expected value
|
||||
TEST_CONF "$onie_machine_rev" "$exp_onie_machine_rev"
|
||||
TEST_CONF "$onie_arch" "$exp_onie_arch"
|
||||
TEST_CONF "$onie_build_date" "$exp_onie_build_date"
|
||||
TEST_CONF "$onie_partition_type" "$exp_onie_partition_type"
|
||||
TEST_CONF "$onie_disco_ntpsrv" "$exp_onie_disco_ntpsrv"
|
||||
TEST_CONF "$onie_firmware" "$exp_onie_firmware"
|
||||
TEST_CONF "$onie_skip_ethmgmt_macs" "$exp_onie_skip_ethmgmt_macs"
|
||||
TEST_CONF "$onie_grub_image_name" "$exp_onie_grub_image_name"
|
||||
|
||||
echo "PASS!!"
|
||||
exit 0
|
Loading…
Reference in New Issue
Block a user