diff --git a/installer/x86_64/install.sh b/installer/x86_64/install.sh index 349880114d04..ce31d7ff3aec 100755 --- a/installer/x86_64/install.sh +++ b/installer/x86_64/install.sh @@ -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 diff --git a/installer/x86_64/tests/sample_machine.conf b/installer/x86_64/tests/sample_machine.conf new file mode 100644 index 000000000000..a8028cc6d8d2 --- /dev/null +++ b/installer/x86_64/tests/sample_machine.conf @@ -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 \ No newline at end of file diff --git a/installer/x86_64/tests/test_read_conf.sh b/installer/x86_64/tests/test_read_conf.sh new file mode 100644 index 000000000000..06b7fc145eab --- /dev/null +++ b/installer/x86_64/tests/test_read_conf.sh @@ -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 \ No newline at end of file