//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}
}
