diff --git a/minicl/update.py b/minicl/update.py
index d6044e53e8075b2cef901ffcde84e916612b0996..e1adcc02f7e0932044c72e8b9ccd7d17699bbb7b 100644
--- a/minicl/update.py
+++ b/minicl/update.py
@@ -172,6 +172,31 @@ def create_root_authorized_keys(config):
             fd.write('%s\n' % key)
 
 
+def create_etc_hosts(config):
+    contents = ['''# Automatically generated - do not edit!
+127.0.0.1 localhost
+::1       localhost ip6-localhost ip6-loopback
+fe00::0	  ip6-localnet
+ff00::0	  ip6-mcastprefix
+ff02::1	  ip6-allnodes
+ff02::2	  ip6-allrouters
+
+''']
+
+    for hostname, hostinfo in sorted(config['hosts'].itervalues()):
+        names = ['%s.%s' % (hostname, config['domain'])]
+        if 'base.monitor' in hostinfo.get('roles', []):
+            names.append('monitor.%s' % config['domain'])
+        names.append(hostname)
+        ips = hostinfo['ip']
+        if isinstance(ips, basestring):
+            ips = [ips]
+        for ip in ips:
+            contents.append('%s %s\n' % (ip, ' '.join(names)))
+    with open(minicl.ROOT + '/etc/hosts', 'w') as fd:
+        fd.write(''.join(contents))
+
+
 def copy_deploy_key(deploy_key_file, force=False):
     if force or not os.path.exists(deploy_key_file):
         common.copyfileattrs(deploy_key_file,
@@ -195,6 +220,8 @@ def update_system(config):
         setup_deploy_key(config)
     create_root_authorized_keys(config)
     create_dsh_config(config)
+    if config.get('manage_etc_hosts', False):
+        create_etc_hosts(config)
     update_users(config)