summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Prince <dprince@redhat.com>2016-11-21 08:43:01 -0500
committerDan Prince <dprince@redhat.com>2016-11-30 14:22:36 -0500
commitf02742a981a602b439c918236bdb771bbf13dc97 (patch)
tree368215eaaa0854dca5fe2f4ad7b1c64edc98dc77
parent6df32707e9698da5a647aff2b20e6fc2617ea1d2 (diff)
Configure /etc/hosts via os-collect-config script
This patch moves the t-i-e element code for hosts configuration into a t-h-t shell script that gets driven by a os-collect-config script hook. This helps accomplish several goals: - moves us away from t-i-e - gives us better signal handling in the error case (where the previous element relied on 99-refresh-completed - Allows the t-h-t undercloud installer to more easily consume this since it doesn't rely on the old os-apply-config metadata (which that installer doesn't support). Change-Id: I73c3d4818ef531a3559fab272521f44519e2f486
-rw-r--r--hosts-config.yaml18
-rw-r--r--overcloud.j2.yaml6
-rwxr-xr-xscripts/hosts-config.sh47
3 files changed, 64 insertions, 7 deletions
diff --git a/hosts-config.yaml b/hosts-config.yaml
index b5a22b7f..a24b9bb4 100644
--- a/hosts-config.yaml
+++ b/hosts-config.yaml
@@ -8,11 +8,18 @@ parameters:
resources:
hostsConfigImpl:
- type: OS::Heat::StructuredConfig
+ type: OS::Heat::SoftwareConfig
properties:
- group: os-apply-config
- config:
- hosts: {get_param: hosts}
+ group: script
+ inputs:
+ - name: hosts
+ default:
+ list_join:
+ - ' '
+ - str_split:
+ - '\n'
+ - {get_param: hosts}
+ config: {get_file: scripts/hosts-config.sh}
outputs:
config_id:
@@ -25,3 +32,6 @@ outputs:
hostname-based access to the deployed nodes (useful for testing without
setting up a DNS).
value: {get_attr: [hostsConfigImpl, config, hosts]}
+ OS::stack_id:
+ description: The ID of the hostsConfigImpl resource.
+ value: {get_resource: hostsConfigImpl}
diff --git a/overcloud.j2.yaml b/overcloud.j2.yaml
index ba1c6b36..6146a48a 100644
--- a/overcloud.j2.yaml
+++ b/overcloud.j2.yaml
@@ -187,7 +187,7 @@ resources:
type: string
value:
list_join:
- - '\n'
+ - "\n"
- - str_replace:
template: IP HOST
params:
@@ -370,7 +370,7 @@ resources:
properties:
hosts:
list_join:
- - '\n'
+ - "\n"
- - if:
- add_vips_to_etc_hosts
- {get_attr: [VipHosts, value]}
@@ -378,7 +378,7 @@ resources:
-
{% for role in roles %}
- list_join:
- - '\n'
+ - "\n"
- {get_attr: [{{role.name}}, hosts_entry]}
{% endfor %}
diff --git a/scripts/hosts-config.sh b/scripts/hosts-config.sh
new file mode 100755
index 00000000..4826d615
--- /dev/null
+++ b/scripts/hosts-config.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+set -eux
+set -o pipefail
+
+write_entries() {
+ local file="$1"
+ local entries="$2"
+
+ # Don't do anything if the file isn't there
+ if [ ! -f "$file" ]; then
+ return
+ fi
+
+ 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"
+ else
+ echo -ne "\n# HEAT_HOSTS_START - Do not edit manually within this section!\n" >> "$file"
+ echo "$entries" >> "$file"
+ echo -ne "# HEAT_HOSTS_END\n\n" >> "$file"
+ fi
+
+}
+
+if [ ! -z "$hosts" ]; then
+ # cloud-init files are /etc/cloud/templates/hosts.OSNAME.tmpl
+ DIST=$(lsb_release -is | tr -s [A-Z] [a-z])
+ case $DIST in
+ fedora|redhatenterpriseserver)
+ name="redhat"
+ ;;
+ *)
+ name="$DIST"
+ ;;
+ esac
+ write_entries "/etc/cloud/templates/hosts.${name}.tmpl" "$hosts"
+ write_entries "/etc/hosts" "$hosts"
+else
+ echo "No hosts in Heat, nothing written."
+fi