There seem to be two parts to this challenge:
- place the html-nodes left-and-right (easier of the two)
- place (center) the “Dummy” nodes above the html-nodes (more difficult)
To accomplish both tasks, the graph below:
- combines pairs of html-nodes into a single node (adding ports)
- encapsulates the “Dummy” nodes in new clusters
- removes the invisible “container” nodes
digraph VeeamVBR {
graph [bb="0,0,1114.8,1475",
compound=true,
fontcolor="#005f4b",
fontname="Segoe Ui Black",
fontsize=32,
imagepath="C:\Users\jocolon\Documents\WindowsPowerShell\Modules\Veeam.Diagrammer\icons",
labelloc=t,
nodesep=0.6,
overlap=false,
pad=1,
penwidth=1.5,
rankdir=LR,
ranksep=0.75,
splines=polyline,
style=dashed
];
node [fillcolor=white,
fontsize=14,
imagescale=True,
label="",
labelloc=t,
shape=none,
style=filled
];
edge [arrowsize=1,
arrowtail=dot,
color="#71797E",
dir=both,
penwidth=1.5,
style=dashed
];
subgraph clusterMainGraph {
graph [bb="8,8,1106.8,1467",
fontsize=24,
label=<<TABLE border='0' cellborder='0' cellspacing='20' cellpadding='10'>
<TR>
<TD bgcolor='#FFCCCC' ALIGN='center' colspan='1'>Veeam Logo</TD>
</TR>
<TR>
<TD bgcolor='#FFCCCC' ALIGN='center'>Physical Infrastructure Diagram</TD></TR><TR><TD ALIGN='center'><font color='red'>Debug ON</font></TD>
</TR>
</TABLE>>,
lheight=3.35,
lp="557.38,1342.4",
lwidth=5.75,
penwidth=0
];
subgraph clusterBackupServer {
graph [bb="16,548,512.25,832",
bgcolor="#ceedc4",
fontsize=18,
label="Backup Server",
lheight=0.33,
lp="264.12,816",
lwidth=1.69,
penwidth=2,
style=rounded
];
{
graph [rank=same];
"VEEAM-SQL" [fillcolor="#ceedc4",
height=1.0139,
label=<<TABLE border='0' cellborder='0' cellspacing='5' cellpadding='0'><TR><TD ALIGN='Center' colspan='1'></TD></TR><TR><TD align='Center'><B>VEEAM-SQL</B></TD></TR><TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>IP: 192.168.7.79</FONT></TD></TR> <TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Role: Database Server</FONT></TD></TR></TABLE>>,
pos="119.38,709",
shape=plain,
width=1.8576];
"VEEAM-EM" [fillcolor="#ceedc4",
height=1.0139,
label=<<TABLE border='0' cellborder='0' cellspacing='5' cellpadding='0'><TR><TD ALIGN='Center' colspan='1'></TD></TR><TR><TD align='Center'><B>VEEAM-EM</B></TD></TR><TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>IP: 192.168.7.83</FONT></TD></TR> <TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Role: Enterprise Manager Server</FONT></TD></TR></TABLE>>,
pos="119.38,593",
shape=plain,
width=2.6493];
}
BackupServer [height=0.05,
pos="119.38,790",
shape=point,
style=invis,
width=0.05];
"VEEAM-VBR" [fillcolor="#ceedc4",
height=1.3021,
label=<<TABLE border='0' cellborder='0' cellspacing='5' cellpadding='0'><TR><TD ALIGN='Center' colspan='1'></TD></TR><TR><TD align='Center'><B>VEEAM-VBR</B></TD></TR><TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>IP: 192.168.7.73</FONT></TD></TR> <TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Role: Backup Server</FONT></TD></TR> <TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Version: 12.1.0.2131</FONT></TD></TR></TABLE>>,
pos="441.5,656",
shape=plain,
width=1.7431];
"VEEAM-SQL" -> "VEEAM-VBR" [arrowhead=normal,
arrowtail=normal,
minlen=3,
pos="s,185.93,698.15 e,378.83,666.21 197.85,696.17 249.29,687.66 316.4,676.55 367,668.17",
xlabel="1433/TCP",
xlp="253.55,674.3"];
"VEEAM-EM" -> "VEEAM-VBR" [arrowhead=normal,
arrowtail=normal,
minlen=3,
pos="s,214.69,611.56 e,379.16,643.93 226.7,613.92 272.78,622.99 325.58,633.38 367.18,641.57"];
}
subgraph clusterMainSubGraph {
graph [bb="660.25,16,1098.8,1210",
color=red,
fontsize=22,
label="Protected Groups",
labelloc=t,
lheight=0.42,
lp="879.5,1191",
lwidth=2.52,
penwidth=1,
style="dashed,rounded"
];
subgraph clusterADContainer {
graph [bb="724.38,24,1090.8,342",
fontsize=18,
label="Active Directory Computers",
labelloc=t,
lheight=0.33,
lp="907.56,326",
lwidth=3.30,
penwidth=1.5,
style="dashed,rounded"
];
subgraph clusterXX1{ label="" peripheries=0
DummyADContainer [color=red,
height=0.21875,
label=DummyADC,
pos="769.12,245",
shape=plain,
style=dashed,
width=1.0208];
}
// "SERVER WITH NETAPP LUNS "
ACTIVE [fontname="Segoe Ui",
height=1.5694,
label=<
<TABLE border='0' cellborder='0' cellspacing='5' cellpadding='0'>
<TR><TD PORT="P1"></TD><TD></TD><TD PORT="P2"></TD></TR>
<TR><TD align='Center' ><B>SERVER WITH NETAPP LUNS</B></TD>
<TD> </TD>
<TD align='Center'><B>GURABO PC - BACKUP</B></TD></TR>
<TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Schedule: Daily</FONT></TD> <TD> </TD>
<TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Schedule: Periodically</FONT></TD></TR>
<TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Status: Enabled</FONT></TD> <TD> </TD>
<TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Status: Enabled</FONT></TD></TR>
<TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Type: Custom</FONT></TD> <TD> </TD>
<TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Type: Custom</FONT></TD></TR>
</TABLE>>,
pos="973.38,245",
width=3.0382];
/****** what is this for? (they mess up the edges)
ADContainer [height=0.05,
pos="769.12,299",
shape=point,
style=invis,
width=0.05];
*******/
DummyADContainer -> ACTIVE:P1 [
color=red,
minlen=0 //1,
pos="s,779.47,237.24 e,893.9,145.48 786.7,231.23 813.65,208.84 864,167 864,167 864,167 872.22,161.08 884.14,152.5",
style=filled];
DummyADContainer -> ACTIVE:P2 [ color=red,
minlen=0 //1,
pos="s,805.82,245 e,864.11,245 815.12,245 826.37,245 838.97,245 852.02,245",
style=filled];
}
subgraph clusterICContainer {
graph [bb="731.88,676,1088.1,994",
fontsize=18,
label="Individial Computers",
labelloc=t,
lheight=0.33,
lp="910,978",
lwidth=2.49,
penwidth=1.5,
style="dashed,rounded"
];
/******** what is this for?
ICContainer [height=0.05,
pos="769.12,873",
shape=point,
style=invis,
width=0.05];
**************/
subgraph clusterXX2{ label="" peripheries=0
DummyICContainer [color=red,
height=0.21875,
label=DummyIC,
pos="769.12,741",
shape=plain,
style=dashed,
width=0.8125];
}
// "LINUX PROTECTION GROUP " [fontname="Segoe Ui",
LPG [fontname="Segoe Ui",
height=1.5694,
label=<<TABLE border='0' cellborder='0' cellspacing='5' cellpadding='0'>
<TR><TD ALIGN='Center' colspan='1' PORT="P1"></TD><TD></TD><TD ALIGN='Center' colspan='1' PORT="P2"></TD></TR>
<TR><TD align='Center'><B>LINUX PROTECTION GROUP</B></TD>
<TD> </TD>
<TD align='Center'><B>MANUALLY ADDED</B></TD></TR>
<TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Schedule: Daily</FONT></TD>
<TD> </TD>
<TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Schedule: Daily</FONT></TD></TR>
<TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Status: Enabled</FONT></TD>
<TD> </TD>
<TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Status: Enabled</FONT></TD></TR>
<TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Type: Custom</FONT></TD>
<TD> </TD>
<TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Type: ManuallyAdded</FONT></TD></TR>
</TABLE>>,
pos="973.38,741",
width=2.9653];
DummyICContainer -> LPG:P1 [color=red,
minlen=0 //1,
pos="s,798.25,741 e,866.88,741 807.74,741 821.52,741 837.94,741 855,741",
style=filled];
DummyICContainer -> LPG:P2 [color=red,
minlen=0 //1,
pos="s,779.47,748.76 e,893.9,840.52 786.7,754.77 813.65,777.16 864,819 864,819 864,819 872.22,824.92 884.14,833.5",
style=filled];
}
subgraph clusterMCContainer {
graph [bb="728.12,350,1071.2,668",
fontsize=18,
label="Manual Computers",
labelloc=t,
lheight=0.33,
lp="899.69,652",
lwidth=2.27,
penwidth=1.5,
style="dashed,rounded"
];
/****** what is this for? (they mess up the edges)
MCContainer [height=0.05,
pos="769.12,625",
shape=point,
style=invis,
width=0.05];
*************/
subgraph clusterXX3{ label="" peripheries=0
DummyMCContainer [color=red,
height=0.21875,
label=DummyMC,
pos="769.12,571",
shape=plain,
style=dashed,
width=0.91667];
}
// "HQ - MANUAL PACKET " [fontname="Segoe Ui",
MANUAL [fontname="Segoe Ui",
height=1.5694,
label=<<TABLE border='0' cellborder='0' cellspacing='5' cellpadding='0'>
<TR><TD ALIGN='Center' colspan='1' PORT="P1"></TD><TD></TD><TD ALIGN='Center' colspan='1' PORT="P2"></TD></TR>
<TR><TD align='Center'><B>HQ - MANUAL PACKET</B></TD>
<TD> </TD>
<TD align='Center'><B>OTHERS</B></TD></TR>
<TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Schedule: Daily</FONT></TD>
<TD> </TD>
<TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Schedule: Daily</FONT></TD></TR>
<TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Status: Enabled</FONT></TD>
<TD> </TD>
<TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Status: Enabled</FONT></TD></TR>
<TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Type: Custom</FONT> </TD>
<TD> </TD>
<TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Type: Custom</FONT></TD></TR>
</TABLE>>,
pos="973.38,415",
width=2.4965];
DummyMCContainer -> MANUAL:P1 [color=red,
minlen=0 //1,
pos="s,779.47,563.24 e,893.9,471.48 786.7,557.23 813.65,534.84 864,493 864,493 864,493 872.22,487.08 884.14,478.5",
style=filled];
DummyMCContainer -> MANUAL:P2 [color=red,
minlen=0 //1,
pos="s,801.73,571 e,912.51,571 811.18,571 836.78,571 870.45,571 900.38,571",
style=filled];
}
subgraph clusterCSVContainer {
graph [bb="720.25,1002,1070.9,1164",
fontsize=18,
label="CSV Computers",
labelloc=t,
lheight=0.33,
lp="895.56,1148",
lwidth=1.83,
penwidth=1.5,
style="dashed,rounded"
];
/******** what is this for?
CSVContainer [height=0.05,
pos="769.12,1108",
shape=point,
style=invis,
width=0.05];
***********/
subgraph clusterXX4{ label="" peripheries=0
DummyCSVContainer [color=red,
group=pro
height=0.21875,
label=DummyCSVC,
pos="769.12,1042",
shape=plain,
style=dashed,
width=1.1354];
}
"PROTECTION GROUP 1 " [fontname="Segoe Ui",
group=pro
height=1.5694,
label=<<TABLE border='0' cellborder='0' cellspacing='5' cellpadding='0'><TR><TD ALIGN='Center' colspan='1' PORT="P1"></TD></TR><TR><TD align='Center'><B>PROTECTION GROUP 1</B></TD></TR><TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Schedule: Periodically</FONT></TD></TR> <TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Status: Enabled</FONT></TD></TR> <TR><TD align='Center' colspan='1'><FONT POINT-SIZE='14'>Type: Custom</FONT></TD></TR></TABLE>>,
pos="973.38,1067",
width=2.4861];
DummyCSVContainer:s -> "PROTECTION GROUP 1 ":n:P1 [color=red,
minlen=0 //1,
pos="s,809.6,1046.9 e,884.02,1056.1 818.9,1048 834.96,1050 853.46,1052.3 871.92,1054.6",
style=filled];
}
MainSubGraph [height=0.05,
pos="671.25,981",
shape=point,
style=invis,
width=0.05];
ProtectedGroup [fontcolor="#005f4b",
fontname="Segoe Ui Black",
fontsize=22,
height=0.41667,
label=" ",
pos="671.25,656",
shape=plain,
width=0.083333];
ProtectedGroup -> DummyADContainer [color=red,
minlen=1,
pos="s,674.13,641.1 e,756.04,252.82 675.3,631.87 685.86,548.26 720.25,276 720.25,276 720.25,276 733.44,267.46 745.97,259.34",
style=filled];
ProtectedGroup -> DummyMCContainer [color=red,
minlen=1,
pos="s,673.85,654.2 e,756.04,578.82 680.05,647.23 693.64,631.93 720.25,602 720.25,602 720.25,602 733.44,593.46 745.97,585.34",
style=filled];
ProtectedGroup -> DummyICContainer [color=red,
minlen=1,
pos="s,673.91,657.48 e,759.3,733.17 680.57,663.38 696.02,677.08 729.45,706.71 750.24,725.15",
style=filled];
ProtectedGroup -> DummyCSVContainer [color=red,
minlen=1,
pos="s,674.19,670.07 e,758.44,1034.3 675.43,679.08 686.15,756.78 720.25,1004 720.25,1004 720.25,1004 735.62,1016.2 748.94,1026.8",
style=filled];
}
MainGraph [height=0.05,
pos="119.38,299",
shape=point,
style=invis,
width=0.05];
"VEEAM-VBR" -> ProtectedGroup [minlen=3,
pos="s,504.13,656 e,668.51,656 513.42,656 564.25,656 628.45,656 656.31,656"];
}
}