Give layout objects a unique ID

This is a debug aid -- when investigating leaked layout objects,
it would be nice to tie them back to when they were created.

Change-Id: I2b5b3cb33e6891c0cbca15ea82022bfa91ba9048
diff --git a/zuul/configloader.py b/zuul/configloader.py
index 2cdac38..426842b 100644
--- a/zuul/configloader.py
+++ b/zuul/configloader.py
@@ -1572,6 +1572,7 @@
         # Don't call this method from dynamic reconfiguration because
         # it interacts with drivers and connections.
         layout = model.Layout(tenant)
+        TenantParser.log.debug("Created layout id %s", layout.uuid)
 
         TenantParser._parseLayoutItems(layout, tenant, data,
                                        scheduler, connections)
@@ -1700,6 +1701,7 @@
             self._loadDynamicProjectData(config, project, files, False, tenant)
 
         layout = model.Layout(tenant)
+        self.log.debug("Created layout id %s", layout.uuid)
         if not include_config_projects:
             # NOTE: the actual pipeline objects (complete with queues
             # and enqueued items) are copied by reference here.  This
diff --git a/zuul/model.py b/zuul/model.py
index e68e46b..464ee16 100644
--- a/zuul/model.py
+++ b/zuul/model.py
@@ -2329,6 +2329,7 @@
     """Holds all of the Pipelines."""
 
     def __init__(self, tenant):
+        self.uuid = uuid4().hex
         self.tenant = tenant
         self.project_configs = {}
         self.project_templates = {}