aboutsummaryrefslogtreecommitdiff
path: root/kolla
diff options
context:
space:
mode:
authorJeffrey Zhang <zhang.lei.fly@gmail.com>2015-12-03 20:04:28 +0800
committerJeffrey Zhang <zhang.lei.fly@gmail.com>2016-01-06 16:33:05 +0800
commitf2bded7f944ff25387d7cde1b1aa8489191de0c1 (patch)
treee9b69574b1444024a3332084c5c038bb5aa8540d /kolla
parent8123dbdc62dba94c595aedab03901be273da009e (diff)
downloadkolla-f2bded7f944ff25387d7cde1b1aa8489191de0c1.tar.gz
kolla-f2bded7f944ff25387d7cde1b1aa8489191de0c1.zip
Gen the image dependency in the Graphviz dot format
By using ./tools/build.py --save-dependency a.dot to gen the Graphviz dot dependency file. Later, you can use the `dot` to draw the picture. dot -Tjpg -o a.jpg a.dot Implements: blueprint images-dependency-tree Depends-On: I8e07a1b69fab5f1c587470bfd2104aaba93f0050 Change-Id: If00f4f3fb9d0b10a07ab2abb7ffb1cd9d64902f2
Diffstat (limited to 'kolla')
-rwxr-xr-xkolla/cmd/build.py20
-rw-r--r--kolla/common/config.py3
2 files changed, 23 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',