From a43b23c45a35d7a316be2298f2b710c3084fd4da Mon Sep 17 00:00:00 2001 From: Jiri Stransky Date: Fri, 24 Apr 2015 13:32:36 +0200 Subject: [PATCH] Make managing hosts entries optional Diskimage-builder currently writes cloud-init config file which adds a host entry mapping the hostname and FQDN to 127.0.0.1 into every image built. This is probably useful for some use cases but not for all, so we now allow customizing the manage_etc_hosts value via DIB_CLOUD_INIT_ETC_HOSTS variable and also not writing the config at all if that variable is explicitly set to an empty string (currently the default is 'localhost' but in the future the default will be empty string). Particular description of the problem this causes in TripleO follows: We get hosts files like this: ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 127.0.0.1 ov-rl5i5saoc6h-1-hj5tzsbrdv4c-controller-dy6nuyarqy5z.novalocal ov-rl5i5saoc6h-1-hj5tzsbrdv4c-controller-dy6nuyarqy5z # HEAT_HOSTS_START - Do not edit manually within this section! 192.0.2.17 ov-rl5i5saoc6h-0-wfzcsrqo34p6-controller-m3hy26lhxavl ov-rl5i5saoc6h-0-wfzcsrqo34p6-controller-m3hy26lhxavl.novalocal 192.0.2.15 ov-rl5i5saoc6h-1-hj5tzsbrdv4c-controller-dy6nuyarqy5z ov-rl5i5saoc6h-1-hj5tzsbrdv4c-controller-dy6nuyarqy5z.novalocal 192.0.2.16 ov-rl5i5saoc6h-2-a6v7saxnivm5-controller-7jboskte34r7 ov-rl5i5saoc6h-2-a6v7saxnivm5-controller-7jboskte34r7.novalocal # HEAT_HOSTS_END The duplicate hostname/FQDN entry for 127.0.0.1 and 192.0.2.15 confuses Corosync, which then fails to start a cluster when using hostnames in the config file instead of IPs. Change-Id: Ia8582883f737548e2911d3f36a1943e5b236281b Partial-Bug: #1447497 --- elements/base/README.rst | 14 ++++++++++++++ elements/base/install.d/10-cloud-init | 13 +++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/elements/base/README.rst b/elements/base/README.rst index 6f8c27dd..c2a4412c 100644 --- a/elements/base/README.rst +++ b/elements/base/README.rst @@ -6,6 +6,20 @@ This is the base element. Almost all users will want to include this in their disk image build, as it includes a lot of useful functionality. +The `DIB_CLOUD_INIT_ETC_HOSTS` environment variable can be used to +customize cloud-init's management of `/etc/hosts`: + + * If the variable is set to something, write that value as + cloud-init's manage_etc_hosts. + + * If the variable is set to an empty string, don't create + manage_etc_hosts setting (cloud-init will use its default value). + + * If the variable is not set, use "localhost" for now. Later, not + setting the variable will mean using cloud-init's default. (To + preserve diskimage-builder's current default behavior in the + future, set the variable to "localhost" explicitly.) + Notes: * If you are getting warnings during the build about your locale diff --git a/elements/base/install.d/10-cloud-init b/elements/base/install.d/10-cloud-init index d696c1c7..3eea9af9 100755 --- a/elements/base/install.d/10-cloud-init +++ b/elements/base/install.d/10-cloud-init @@ -9,6 +9,15 @@ set -o pipefail # cloud-init May not actually be installed mkdir -p /etc/cloud/cloud.cfg.d -dd of=/etc/cloud/cloud.cfg.d/10_etc_hosts.cfg << EOF -manage_etc_hosts: localhost + +if [ ! -v DIB_CLOUD_INIT_ETC_HOSTS ]; then + echo "WARNING: In the future the default setting for manage_etc_hosts will not be overridden by this element." + echo "WARNING: Set DIB_CLOUD_INIT_ETC_HOSTS to 'localhost' to preserve current behavior." +fi + +DIB_CLOUD_INIT_ETC_HOSTS=${DIB_CLOUD_INIT_ETC_HOSTS-localhost} +if [ -n "$DIB_CLOUD_INIT_ETC_HOSTS" ]; then + dd of=/etc/cloud/cloud.cfg.d/10_etc_hosts.cfg << EOF +manage_etc_hosts: $DIB_CLOUD_INIT_ETC_HOSTS EOF +fi