//dot -Tpng xx.dot -o xx.png digraph G { rankdir=TB; fontname = "Microsoft YaHei"; fontsize = 14; penwidth = 3; compound=true; rankdir=LR; node [shape = record]; edge [fontname = "Arial", fontsize = 12, color="darkgreen" ]; image[label="Image",color=blue]; registry[label="Registry",color=blue]; tar[label="Tar files",color=blue]; subgraph cluster_container { label = "Container"; style = "bold"; color = blue; edge [fontname = "Arial", fontsize = 11, color="skyblue" ]; //node [style=filled]; run[label="Running",shape=circle, style=filled, fillcolor=green]; stop[label="Stopped",shape=circle, style=filled, fillcolor=red]; pause[label="Paused",shape=circle, style=filled, fillcolor=blue]; run->pause[label="pause"]; pause->run[label="unpause"]; run->run[label="restart"]; run->stop[label="kill"]; stop->run[label="start"]; } run->image[label="commit",ltail=cluster_container]; image->run[label="start"]; image->tar[label="export|save"]; tar->image[label="import"]; image->registry[label="push"]; registry->image[label="pull"]; //heat[label="heat commands",color=blue]; //heatshell[label="heatclient.shell.HeatShell",color=blue]; //shell[label="{heatclient.v1.shell|+do_stack_create\l+do_stack_show\l+do_stack_update\l...\l+do_event_list\l...\l+do_resource_list\l...\l+do_resource_type_show\l...\l+do_template_show\l...\l}",color=blue]; //heatclient[label="heatclient.client.Client",color=blue]; //client[label="heatclient.v1.client.Client",color=blue]; //httpclient[label="heatclient.common.http.HTTPClient",color=blue]; //openstackservices[label="{OpenStack Services|+Nova\l+Neutron\l+Keystone\l...}",color=blue]; //{rank=same; image cluster_container} //{rank=same; rpcproxy apimixin} }