Merge "Use the local collector to bootstrap deployed servers"
[apex-tripleo-heat-templates.git] / docker / docker-puppet.py
index 1bb8bc2..c364d03 100755 (executable)
@@ -46,6 +46,15 @@ def pull_image(name):
 
 
 def rm_container(name):
+    if os.environ.get('SHOW_DIFF', None):
+        print('Diffing container: %s' % name)
+        subproc = subprocess.Popen(['/usr/bin/docker', 'diff', name],
+                                   stdout=subprocess.PIPE,
+                                   stderr=subprocess.PIPE)
+        cmd_stdout, cmd_stderr = subproc.communicate()
+        print(cmd_stdout)
+        print(cmd_stderr)
+
     print('Removing container: %s' % name)
     subproc = subprocess.Popen(['/usr/bin/docker', 'rm', name],
                                stdout=subprocess.PIPE,
@@ -78,12 +87,24 @@ configs = {}
 for service in (json_data or []):
     if service is None:
         continue
+    if isinstance(service, dict):
+        service = [
+            service.get('config_volume'),
+            service.get('puppet_tags'),
+            service.get('step_config'),
+            service.get('config_image'),
+            service.get('volumes', []),
+        ]
+
     config_volume = service[0] or ''
     puppet_tags = service[1] or ''
     manifest = service[2] or ''
     config_image = service[3] or ''
     volumes = service[4] if len(service) > 4 else []
 
+    if not manifest or not config_image:
+        continue
+
     print('---------')
     print('config_volume %s' % config_volume)
     print('puppet_tags %s' % puppet_tags)
@@ -184,11 +205,17 @@ def mp_puppet_config((config_volume, puppet_tags, manifest, config_image, volume
                 '--volume', '%s:%s:rw' % (sh_script, sh_script) ]
 
         for volume in volumes:
-            dcmd.extend(['--volume', volume])
+            if volume:
+                dcmd.extend(['--volume', volume])
 
         dcmd.extend(['--entrypoint', sh_script])
 
         env = {}
+        # NOTE(flaper87): Always copy the DOCKER_* environment variables as
+        # they contain the access data for the docker daemon.
+        for k in filter(lambda k: k.startswith('DOCKER'), os.environ.keys()):
+            env[k] = os.environ.get(k)
+
         if os.environ.get('NET_HOST', 'false') == 'true':
             print('NET_HOST enabled')
             dcmd.extend(['--net', 'host', '--volume',
@@ -220,9 +247,9 @@ for config_volume in configs:
     volumes = service[4] if len(service) > 4 else []
 
     if puppet_tags:
-        puppet_tags = "file,file_line,concat,%s" % puppet_tags
+        puppet_tags = "file,file_line,concat,augeas,%s" % puppet_tags
     else:
-        puppet_tags = "file,file_line,concat"
+        puppet_tags = "file,file_line,concat,augeas"
 
     process_map.append([config_volume, puppet_tags, manifest, config_image, volumes])
 
@@ -232,4 +259,13 @@ for p in process_map:
 # Fire off processes to perform each configuration.  Defaults
 # to the number of CPUs on the system.
 p = multiprocessing.Pool(process_count)
-p.map(mp_puppet_config, process_map)
+returncodes = list(p.map(mp_puppet_config, process_map))
+config_volumes = [pm[0] for pm in process_map]
+success = True
+for returncode, config_volume in zip(returncodes, config_volumes):
+    if returncode != 0:
+        print('ERROR configuring %s' % config_volume)
+        success = False
+
+if not success:
+    sys.exit(1)