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:
parent
c947c9624e
commit
7e5e4dc029
@ -14,11 +14,13 @@ write_entries() {
|
|||||||
|
|
||||||
if grep -q "^# HEAT_HOSTS_START" "$file"; then
|
if grep -q "^# HEAT_HOSTS_START" "$file"; then
|
||||||
temp=$(mktemp)
|
temp=$(mktemp)
|
||||||
awk -v v="$entries" '/^# HEAT_HOSTS_START/ {
|
(
|
||||||
print $0
|
sed '/^# HEAT_HOSTS_START/,$d' "$file"
|
||||||
print v
|
echo -ne "\n# HEAT_HOSTS_START - Do not edit manually within this section!\n"
|
||||||
f=1
|
echo "$entries"
|
||||||
}f &&!/^# HEAT_HOSTS_END$/{next}/^# HEAT_HOSTS_END$/{f=0}!f' "$file" > "$temp"
|
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"
|
echo "INFO: Updating hosts file $file, check below for changes"
|
||||||
diff "$file" "$temp" || true
|
diff "$file" "$temp" || true
|
||||||
cat "$temp" > "$file"
|
cat "$temp" > "$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
|
if [ ! -z "$ENTRIES" ]; then
|
||||||
# cloud-init files are /etc/cloud/templates/hosts.OSNAME.tmpl
|
# cloud-init files are /etc/cloud/templates/hosts.OSNAME.tmpl
|
||||||
DIST=$(lsb_release -is | tr -s '[A-Z]' '[a-z]')
|
DIST=$(lsb_release -is | tr -s '[A-Z]' '[a-z]')
|
||||||
|
Loading…
Reference in New Issue
Block a user