aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xkolla/cmd/build.py20
-rw-r--r--kolla/common/config.py3
-rw-r--r--requirements.txt1
3 files changed, 24 insertions, 0 deletions
diff --git a/kolla/cmd/build.py b/kolla/cmd/build.py
index bf5e5ba4c..5753bf02a 100755
--- a/kolla/cmd/build.py
+++ b/kolla/cmd/build.py
@@ -16,6 +16,7 @@
import datetime
import errno
+import graphviz
import json
import logging
import os
@@ -558,6 +559,19 @@ class KollaWorker(object):
self.images.append(image)
+ def save_dependency(self, to_file):
+ dot = graphviz.Digraph(comment='Docker Images Dependency')
+ dot.body.extend(['rankdir=LR'])
+ for image in self.images:
+ if image['status'] not in ['matched']:
+ continue
+ dot.node(image['name'])
+ if image['parent'] is not None:
+ dot.edge(image['parent']['name'], image['name'])
+
+ with open(to_file, 'w') as f:
+ f.write(dot.source)
+
def find_parents(self):
"""Associate all images with parents and children"""
sort_images = dict()
@@ -614,6 +628,12 @@ def main():
queue = kolla.build_queue()
push_queue = six.moves.queue.Queue()
+ if conf.save_dependency:
+ kolla.save_dependency(conf.save_dependency)
+ LOG.info('Docker images dependency is saved in %s',
+ conf.save_dependency)
+ return
+
for x in range(conf.threads):
worker = WorkerThread(queue, push_queue, conf)
worker.setDaemon(True)
diff --git a/kolla/common/config.py b/kolla/common/config.py
index 68e1f7e5e..f5d8f48d7 100644
--- a/kolla/common/config.py
+++ b/kolla/common/config.py
@@ -107,6 +107,9 @@ _CLI_OPTS = [
cfg.StrOpt('registry', deprecated_group='kolla-build',
help=('The docker registry host. The default registry host'
' is Docker Hub')),
+ cfg.StrOpt('save-dependency',
+ help=('Path to the file to store the docker image'
+ ' dependency in Graphviz dot format')),
cfg.StrOpt('type', short='t', default='binary',
choices=INSTALL_TYPE_CHOICES,
dest='install_type', deprecated_group='kolla-build',
diff --git a/requirements.txt b/requirements.txt
index 20f5c9851..75ea86973 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -8,3 +8,4 @@ gitdb>=0.6.4 # BSD License (3 clause)
GitPython>=1.0.1 # BSD License (3 clause)
six>=1.9.0
oslo.config>=2.7.0 # Apache-2.0
+graphviz>=0.4.0 # MIT License