summaryrefslogtreecommitdiff
path: root/cloudinit/CloudConfig/cc_update_etc_hosts.py
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2011-07-19 22:53:05 -0400
committerScott Moser <smoser@ubuntu.com>2011-07-19 22:53:05 -0400
commit6d25c040ee566f6ef85352d7b52eb5947230f78a (patch)
treecb3f8f99926b3423d623b9a00a95ad5b47b2de7c /cloudinit/CloudConfig/cc_update_etc_hosts.py
parent20a0cf9bf34408706f34edee5e1e75fd9676774c (diff)
downloadvyos-cloud-init-6d25c040ee566f6ef85352d7b52eb5947230f78a.tar.gz
vyos-cloud-init-6d25c040ee566f6ef85352d7b52eb5947230f78a.zip
improve the updating of /etc/hosts with correct fqdn when possible
Thanks to Adam Gandalman and Marc Cluet for this fix. LP: #812539
Diffstat (limited to 'cloudinit/CloudConfig/cc_update_etc_hosts.py')
-rw-r--r--cloudinit/CloudConfig/cc_update_etc_hosts.py77
1 files changed, 40 insertions, 37 deletions
diff --git a/cloudinit/CloudConfig/cc_update_etc_hosts.py b/cloudinit/CloudConfig/cc_update_etc_hosts.py
index 10ee5435..b3098f29 100644
--- a/cloudinit/CloudConfig/cc_update_etc_hosts.py
+++ b/cloudinit/CloudConfig/cc_update_etc_hosts.py
@@ -17,57 +17,60 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import cloudinit.util as util
from cloudinit.CloudConfig import per_always
-import platform
import StringIO
frequency = per_always
def handle(name,cfg,cloud,log,args):
- if not util.get_cfg_option_bool(cfg,"manage_etc_hosts",False):
+ hostname = util.get_cfg_option_str(cfg,"hostname",cloud.get_hostname())
+ fqdn = util.get_cfg_option_str(cfg,"fqdn",cloud.get_hostname(fqdn=True))
+
+ if util.get_cfg_option_bool(cfg,"manage_etc_hosts", True):
+ # manage_etc_hosts not true, update the 127.0.1.1 entry via update_etc_hosts
log.debug("manage_etc_hosts is not set, checking sanity of /etc/hosts")
- with open('/etc/hosts', 'r') as etchosts:
- current_hostname = platform.node()
- hosts_line = "# Added by cloud-init\n127.0.1.1\t%s.localdomain %s\n" % (current_hostname, current_hostname)
- need_write = False
- need_change = True
- new_etchosts = StringIO.StringIO()
- for line in etchosts:
- split_line = [s.strip() for s in line.split()]
- # skip over malformed /etc/hosts entries
- if len(split_line) < 2:
- continue
- ip, hostnames = split_line[0], split_line[1:]
- if ip == "127.0.1.1":
- for hostname in hostnames:
- if hostname == current_hostname:
- need_change = False
- if need_change == True:
- line = hosts_line
- need_change = False
- need_write = True
- new_etchosts.write(line)
- etchosts.close()
- if need_change == True:
- new_etchosts.write(hosts_line)
- need_write = True
- if need_write == True:
- new_etcfile = open ('/etc/hosts','wb')
- new_etcfile.write(new_etchosts.getvalue())
- new_etcfile.close()
- new_etchosts.close()
+ update_etc_hosts(hostname, fqdn, log)
return
+ # manage_etc_hosts is set, render from template file
try:
- hostname = util.get_cfg_option_str(cfg,"hostname",cloud.get_hostname())
- if not hostname:
- hostname = cloud.get_hostname()
-
if not hostname:
log.info("manage_etc_hosts was set, but no hostname found")
return
- util.render_to_file('hosts', '/etc/hosts', { 'hostname' : hostname })
+ util.render_to_file('hosts', '/etc/hosts', \
+ { 'hostname' : hostname, 'fqdn' : fqdn })
except Exception as e:
log.warn("failed to update /etc/hosts")
raise
+
+def update_etc_hosts(hostname, fqdn, log):
+ with open('/etc/hosts', 'r') as etchosts:
+ hosts_line = "# Added by cloud-init\n127.0.1.1\t%s %s\n" % (fqdn, hostname)
+ need_write = False
+ need_change = True
+ new_etchosts = StringIO.StringIO()
+ for line in etchosts:
+ split_line = [s.strip() for s in line.split()]
+ # skip over malformed /etc/hosts entries
+ if len(split_line) < 2:
+ continue
+ ip, hosts = split_line[0], split_line[1:]
+ if ip == "127.0.1.1":
+ if sorted([hostname, fqdn]) == sorted(hosts):
+ need_change = False
+ if need_change == True:
+ line = hosts_line
+ need_change = False
+ need_write = True
+ new_etchosts.write(line)
+ etchosts.close()
+ if need_change == True:
+ new_etchosts.write(hosts_line)
+ need_write = True
+ if need_write == True:
+ new_etcfile = open ('/etc/hosts','wb')
+ new_etcfile.write(new_etchosts.getvalue())
+ new_etcfile.close()
+ new_etchosts.close()
+ return