51-hosts fails if given lots of changes

The issue is how awk is used to update hosts files.  When
os-apply-config produces sufficiently large amounts of lines
to be added (or ensure in) hosts files, awk will error out.
To work around it, instead use sed, and reconstruct the
host file(s) to ensure the entries between the comment delimeters
of "# HEAT_HOSTS_START" and "# HEAT_HOSTS_END" are swapped with
the new entries.

Also get rid of blank lines produced by os-apply-config

Partial-Bug: #1674732
Change-Id: Ibe0a9f6ec10d55750e3b0e16301236141f988d69
This commit is contained in:
Kambiz Aghaiepour 2017-03-23 11:34:15 -04:00 committed by Steven Hardy
parent c947c9624e
commit 7e5e4dc029
1 changed files with 11 additions and 9 deletions

View File

@ -14,14 +14,16 @@ write_entries() {
if grep -q "^# HEAT_HOSTS_START" "$file"; then
temp=$(mktemp)
awk -v v="$entries" '/^# HEAT_HOSTS_START/ {
print $0
print v
f=1
}f &&!/^# HEAT_HOSTS_END$/{next}/^# HEAT_HOSTS_END$/{f=0}!f' "$file" > "$temp"
echo "INFO: Updating hosts file $file, check below for changes"
diff "$file" "$temp" || true
cat "$temp" > "$file"
(
sed '/^# HEAT_HOSTS_START/,$d' "$file"
echo -ne "\n# HEAT_HOSTS_START - Do not edit manually within this section!\n"
echo "$entries"
echo -ne "# HEAT_HOSTS_END\n\n"
sed '1,/^# HEAT_HOSTS_END/d' "$file"
) > "$temp"
echo "INFO: Updating hosts file $file, check below for changes"
diff "$file" "$temp" || true
cat "$temp" > "$file"
else
echo -ne "\n# HEAT_HOSTS_START - Do not edit manually within this section!\n" >> "$file"
echo "$entries" >> "$file"
@ -30,7 +32,7 @@ write_entries() {
}
ENTRIES=$(os-apply-config --key hosts --type raw --key-default '' | tr '[A-Z]' '[a-z]')
ENTRIES=$(os-apply-config --key hosts --type raw --key-default '' | tr '[A-Z]' '[a-z]' | sed -e 's/\\n/\n/g' -e '/^$/d')
if [ ! -z "$ENTRIES" ]; then
# cloud-init files are /etc/cloud/templates/hosts.OSNAME.tmpl
DIST=$(lsb_release -is | tr -s '[A-Z]' '[a-z]')