diff options
| author | Jeffrey Zhang <zhang.lei.fly@gmail.com> | 2015-12-03 20:04:28 +0800 |
|---|---|---|
| committer | Jeffrey Zhang <zhang.lei.fly@gmail.com> | 2016-01-06 16:33:05 +0800 |
| commit | f2bded7f944ff25387d7cde1b1aa8489191de0c1 (patch) | |
| tree | e9b69574b1444024a3332084c5c038bb5aa8540d | |
| parent | 8123dbdc62dba94c595aedab03901be273da009e (diff) | |
| download | kolla-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
| -rwxr-xr-x | kolla/cmd/build.py | 20 | ||||
| -rw-r--r-- | kolla/common/config.py | 3 | ||||
| -rw-r--r-- | requirements.txt | 1 |
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 |
