mingrammer / diagrams

:art: Diagram as Code for prototyping cloud system architectures
https://diagrams.mingrammer.com
MIT License
37.36k stars 2.44k forks source link

Display Order between clusters and nodes #368

Open boubou191911 opened 3 years ago

boubou191911 commented 3 years ago

I am running the following code

from diagrams import Cluster, Diagram, Edge
from diagrams.azure.compute import AvailabilitySets
from diagrams.azure.compute import VMLinux
from diagrams.azure.network import VirtualNetworkClassic

with Diagram("Pure Replacement 1"):
    with Cluster(""):
        VMLinux("ms-int-gtwmq-vm-we-01")

        with Cluster("iib-intmig6-as"):        
            VMLinux("ms-dev-iibmig6-vm-we-01") - Edge(color="transparent") - VMLinux("ms-dev-iibmig6-vm-we-02")  

        with Cluster("iib-int-as"):        
            VMLinux("ms-int-iib-vm-we-01") - Edge(color="transparent") - VMLinux("ms-int-iib-vm-we-02")

        with Cluster("iib-dev-as"):        
            VMLinux("ms-dev-iib-vm-we-01") - Edge(color="transparent") - VMLinux("ms-dev-iib-vm-we-02")

        VirtualNetworkClassic("app-sn")  

I would expect that the VirtualNetworkClassing will appear at the top in the cluster before the other sub-clusters but it is not.

pure_replacement_1

Is it a bug or does it work as designed? i.e. the clusters are always at the top

clayms commented 3 years ago

The easiest thing to do is to put it in its own Cluster and set the graph_attr for it if you don't want to see that particular Cluster.

Otherwise you can change the "layout" program engine and specify the pos (position) for each node independently. see this answer: https://github.com/mingrammer/diagrams/issues/243#issuecomment-721971788

from diagrams import Cluster, Diagram, Edge
from diagrams.azure.compute import AvailabilitySets
from diagrams.azure.compute import VMLinux
from diagrams.azure.network import VirtualNetworkClassic

vn_attr = {
    "bgcolor":"transparent",
    "pencolor":"transparent",
    }

with Diagram("Pure Replacement 1", show=False) as diag:
    with Cluster(""):
        with Cluster("", graph_attr=vn_attr):
            VirtualNetworkClassic("app-sn")

        VMLinux("ms-int-gtwmq-vm-we-01")

        with Cluster("iib-intmig6-as"):
            VMLinux("ms-dev-iibmig6-vm-we-01") - Edge(color="transparent") - VMLinux("ms-dev-iibmig6-vm-we-02")  

        with Cluster("iib-int-as"):
            VMLinux("ms-int-iib-vm-we-01") - Edge(color="transparent") - VMLinux("ms-int-iib-vm-we-02")

        with Cluster("iib-dev-as"):
            VMLinux("ms-dev-iib-vm-we-01") - Edge(color="transparent") - VMLinux("ms-dev-iib-vm-we-02")

diag

image