Revert "Allow multi-line config items in meta-section of local.conf"
This reverts commit 6ff21acf4c
.
This commit has broken config options with colons in them.
The following is a sample configuration that no longer works:
[[post-config|/etc/neutron/plugins/ml2/ml2_conf.ini]]
[restproxy]
server_ssl=False
servers=10.211.1.9:80
server_ssl=False
With the above config and the code present that this reverts,
the 'servers' option will come out blank.
Change-Id: I328852d2d941605051a1bf5eaf0f7674191f8c48
This commit is contained in:
@@ -119,33 +119,6 @@ function ini_has_option {
|
|||||||
[ -n "$line" ]
|
[ -n "$line" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
# Add another config line for a multi-line option.
|
|
||||||
# It's normally called after iniset of the same option and assumes
|
|
||||||
# that the section already exists.
|
|
||||||
#
|
|
||||||
# Note that iniset_multiline requires all the 'lines' to be supplied
|
|
||||||
# in the argument list. Doing that will cause incorrect configuration
|
|
||||||
# if spaces are used in the config values.
|
|
||||||
#
|
|
||||||
# iniadd_literal config-file section option value
|
|
||||||
function iniadd_literal {
|
|
||||||
local xtrace=$(set +o | grep xtrace)
|
|
||||||
set +o xtrace
|
|
||||||
local file=$1
|
|
||||||
local section=$2
|
|
||||||
local option=$3
|
|
||||||
local value=$4
|
|
||||||
|
|
||||||
[[ -z $section || -z $option ]] && return
|
|
||||||
|
|
||||||
# Add it
|
|
||||||
sed -i -e "/^\[$section\]/ a\\
|
|
||||||
$option = $value
|
|
||||||
" "$file"
|
|
||||||
|
|
||||||
$xtrace
|
|
||||||
}
|
|
||||||
|
|
||||||
# Set an option in an INI file
|
# Set an option in an INI file
|
||||||
# iniset config-file section option value
|
# iniset config-file section option value
|
||||||
function iniset {
|
function iniset {
|
||||||
|
48
lib/config
48
lib/config
@@ -86,11 +86,7 @@ function merge_config_file {
|
|||||||
# having to do nasty quoting games
|
# having to do nasty quoting games
|
||||||
get_meta_section $file $matchgroup $configfile | \
|
get_meta_section $file $matchgroup $configfile | \
|
||||||
$CONFIG_AWK_CMD -v configfile=$configfile '
|
$CONFIG_AWK_CMD -v configfile=$configfile '
|
||||||
BEGIN {
|
BEGIN { section = "" }
|
||||||
section = ""
|
|
||||||
last_section = ""
|
|
||||||
section_count = 0
|
|
||||||
}
|
|
||||||
/^\[.+\]/ {
|
/^\[.+\]/ {
|
||||||
gsub("[][]", "", $1);
|
gsub("[][]", "", $1);
|
||||||
section=$1
|
section=$1
|
||||||
@@ -110,48 +106,10 @@ function merge_config_file {
|
|||||||
# need to strip leading & trailing whitespace from value
|
# need to strip leading & trailing whitespace from value
|
||||||
sub(/^[ \t]*/, "", value)
|
sub(/^[ \t]*/, "", value)
|
||||||
sub(/[ \t]*$/, "", value)
|
sub(/[ \t]*$/, "", value)
|
||||||
|
print "iniset " configfile " " section " " attr " \x27" value "\x27"
|
||||||
# cfg_attr_count: number of config lines per [section, attr]
|
|
||||||
# cfg_attr: two dimensional array to keep all the config lines per [section, attr]
|
|
||||||
# cfg_section: keep the section names in the same order as they appear in local.conf
|
|
||||||
# cfg_sec_attr_name: keep the attr names in the same order as they appear in local.conf
|
|
||||||
if (! (section, attr) in cfg_attr_count) {
|
|
||||||
if (section != last_section) {
|
|
||||||
cfg_section[section_count++] = section
|
|
||||||
last_section = section
|
|
||||||
}
|
|
||||||
attr_count = cfg_sec_attr_count[section_count - 1]++
|
|
||||||
cfg_sec_attr_name[section_count - 1][attr_count] = attr
|
|
||||||
|
|
||||||
cfg_attr[section, attr][0] = value
|
|
||||||
cfg_attr_count[section, attr] = 1
|
|
||||||
} else {
|
|
||||||
lno = cfg_attr_count[section, attr]++
|
|
||||||
cfg_attr[section, attr][lno] = value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
END {
|
|
||||||
# Process each section in order
|
|
||||||
for (sno = 0; sno < section_count; sno++) {
|
|
||||||
section = cfg_section[sno]
|
|
||||||
# The ini routines simply append a config item immediately
|
|
||||||
# after the section header. To keep the same order as defined
|
|
||||||
# in local.conf, invoke the ini routines in the reverse order
|
|
||||||
for (attr_no = cfg_sec_attr_count[sno] - 1; attr_no >=0; attr_no--) {
|
|
||||||
attr = cfg_sec_attr_name[sno][attr_no]
|
|
||||||
if (cfg_attr_count[section, attr] == 1)
|
|
||||||
print "iniset " configfile " " section " " attr " \x27" cfg_attr[section, attr][0] "\x27"
|
|
||||||
else {
|
|
||||||
# For multiline, invoke the ini routines in the reverse order
|
|
||||||
count = cfg_attr_count[section, attr]
|
|
||||||
print "iniset " configfile " " section " " attr " \x27" cfg_attr[section, attr][count - 1] "\x27"
|
|
||||||
for (l = count -2; l >= 0; l--)
|
|
||||||
print "iniadd_literal " configfile " " section " " attr " \x27" cfg_attr[section, attr][l] "\x27"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
' | while read a; do eval "$a"; done
|
' | while read a; do eval "$a"; done
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -104,27 +104,6 @@ drivers = driver=python.import.path.Driver
|
|||||||
[DEFAULT]
|
[DEFAULT]
|
||||||
# next line has trailing space
|
# next line has trailing space
|
||||||
attr = strip_trailing_space
|
attr = strip_trailing_space
|
||||||
|
|
||||||
[[test-multi-sections|test-multi-sections.conf]]
|
|
||||||
[sec-1]
|
|
||||||
cfg_item1 = abcd
|
|
||||||
cfg_item2 = efgh
|
|
||||||
|
|
||||||
[sec-2]
|
|
||||||
cfg_item1 = abcd
|
|
||||||
cfg_item3 = /1/2/3/4:5
|
|
||||||
cfg_item4 = end
|
|
||||||
|
|
||||||
[sec-3]
|
|
||||||
cfg_item5 = 5555
|
|
||||||
cfg_item6 = 6666
|
|
||||||
cfg_item5 = 5555another
|
|
||||||
|
|
||||||
[[test-multiline|test-multiline.conf]]
|
|
||||||
[multi]
|
|
||||||
cfg_item1 = "ab":"cd", "ef": "gh"
|
|
||||||
cfg_item1 = abcd
|
|
||||||
cfg_item2 = efgh
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
echo -n "get_meta_section_files: test0 doesn't exist: "
|
echo -n "get_meta_section_files: test0 doesn't exist: "
|
||||||
@@ -206,39 +185,8 @@ VAL=$(cat test2a.conf)
|
|||||||
# iniset adds a blank line if it creates the file...
|
# iniset adds a blank line if it creates the file...
|
||||||
EXPECT_VAL="
|
EXPECT_VAL="
|
||||||
[ddd]
|
[ddd]
|
||||||
type = new
|
additional = true
|
||||||
additional = true"
|
type = new"
|
||||||
check_result "$VAL" "$EXPECT_VAL"
|
|
||||||
|
|
||||||
echo -n "merge_config_file test-multi-sections: "
|
|
||||||
rm -f test-multi-sections.conf
|
|
||||||
merge_config_file test.conf test-multi-sections test-multi-sections.conf
|
|
||||||
VAL=$(cat test-multi-sections.conf)
|
|
||||||
EXPECT_VAL='
|
|
||||||
[sec-1]
|
|
||||||
cfg_item1 = abcd
|
|
||||||
cfg_item2 = efgh
|
|
||||||
|
|
||||||
[sec-2]
|
|
||||||
cfg_item1 = abcd
|
|
||||||
cfg_item3 = /1/2/3/4:5
|
|
||||||
cfg_item4 = end
|
|
||||||
|
|
||||||
[sec-3]
|
|
||||||
cfg_item5 = 5555
|
|
||||||
cfg_item5 = 5555another
|
|
||||||
cfg_item6 = 6666'
|
|
||||||
check_result "$VAL" "$EXPECT_VAL"
|
|
||||||
|
|
||||||
echo -n "merge_config_file test-multiline: "
|
|
||||||
rm -f test-multiline.conf
|
|
||||||
merge_config_file test.conf test-multiline test-multiline.conf
|
|
||||||
VAL=$(cat test-multiline.conf)
|
|
||||||
EXPECT_VAL='
|
|
||||||
[multi]
|
|
||||||
cfg_item1 = "ab":"cd", "ef": "gh"
|
|
||||||
cfg_item1 = abcd
|
|
||||||
cfg_item2 = efgh'
|
|
||||||
check_result "$VAL" "$EXPECT_VAL"
|
check_result "$VAL" "$EXPECT_VAL"
|
||||||
|
|
||||||
echo -n "merge_config_group test2: "
|
echo -n "merge_config_group test2: "
|
||||||
@@ -248,8 +196,8 @@ VAL=$(cat test2a.conf)
|
|||||||
# iniset adds a blank line if it creates the file...
|
# iniset adds a blank line if it creates the file...
|
||||||
EXPECT_VAL="
|
EXPECT_VAL="
|
||||||
[ddd]
|
[ddd]
|
||||||
type = new
|
additional = true
|
||||||
additional = true"
|
type = new"
|
||||||
check_result "$VAL" "$EXPECT_VAL"
|
check_result "$VAL" "$EXPECT_VAL"
|
||||||
|
|
||||||
echo -n "merge_config_group test2 no conf file: "
|
echo -n "merge_config_group test2 no conf file: "
|
||||||
@@ -320,5 +268,4 @@ attr = strip_trailing_space"
|
|||||||
check_result "$VAL" "$EXPECT_VAL"
|
check_result "$VAL" "$EXPECT_VAL"
|
||||||
|
|
||||||
rm -f test.conf test1c.conf test2a.conf test-quote.conf test-space.conf test-equals.conf test-strip.conf
|
rm -f test.conf test1c.conf test2a.conf test-quote.conf test-space.conf test-equals.conf test-strip.conf
|
||||||
rm -f test-multiline.conf test-multi-sections.conf
|
|
||||||
rm -rf test-etc
|
rm -rf test-etc
|
||||||
|
Reference in New Issue
Block a user