1+ function Get-AbrOntapNodeNetworkDiagram {
2+ <#
3+ . SYNOPSIS
4+ Used by As Built Report to built NetApp ONTAP node network diagram
5+ . DESCRIPTION
6+
7+ . NOTES
8+ Version: 0.6.12
9+ Author: Jonathan Colon
10+ Twitter: @jcolonfzenpr
11+ Github: rebelinux
12+ . EXAMPLE
13+
14+ . LINK
15+
16+ #>
17+ [CmdletBinding ()]
18+ param (
19+ )
20+
21+ begin {
22+ Write-PScriboMessage " Generating Node Network Diagram for NetApp ONTAP."
23+ # Used for DiagramDebug
24+ if ($Options.EnableDiagramDebug ) {
25+ $EdgeDebug = @ {style = ' filled' ; color = ' red' }
26+ $SubGraphDebug = @ {style = ' dashed' ; color = ' red' }
27+ $NodeDebug = @ {color = ' black' ; style = ' red' ; shape = ' plain' }
28+ $NodeDebugEdge = @ {color = ' black' ; style = ' red' ; shape = ' plain' }
29+ $IconDebug = $true
30+ } else {
31+ $EdgeDebug = @ {style = ' invis' ; color = ' red' }
32+ $SubGraphDebug = @ {style = ' invis' ; color = ' gray' }
33+ $NodeDebug = @ {color = ' transparent' ; style = ' transparent' ; shape = ' point' }
34+ $NodeDebugEdge = @ {color = ' transparent' ; style = ' transparent' ; shape = ' none' }
35+ $IconDebug = $false
36+ }
37+
38+ if ($Options.DiagramTheme -eq ' Black' ) {
39+ $Edgecolor = ' White'
40+ $Fontcolor = ' White'
41+ } elseif ($Options.DiagramTheme -eq ' Neon' ) {
42+ $Edgecolor = ' gold2'
43+ $Fontcolor = ' gold2'
44+ } else {
45+ $Edgecolor = ' #71797E'
46+ $Fontcolor = ' #565656'
47+ }
48+ }
49+
50+ process {
51+ try {
52+ $ClusterInfo = Get-NcCluster - Controller $Array
53+ $NodeSum = Get-NcNode - Controller $Array
54+
55+ try {
56+
57+ if ($NodeSum.Count -eq 1 ) {
58+ $NodeSumColumnSize = 1
59+ } elseif ($ColumnSize ) {
60+ $NodeSumColumnSize = $ColumnSize
61+ } else {
62+ $NodeSumColumnSize = $NodeSum.Count
63+ }
64+
65+ $HAObject = @ ()
66+
67+ $NodeAdditionalInfo = @ ()
68+ $AggrInfo = @ ()
69+
70+ foreach ($Node in $NodeSum ) {
71+ $ClusterHa = Get-NcClusterHa - Node $Node.Node - Controller $Array
72+
73+ $NodeMgmtAddress = Get-NcNetInterface - Controller $Array | Where-Object { $_.Role -eq ' node_mgmt' -and $_.HomeNode -eq $Node.Node } | Select-Object - ExpandProperty Address
74+ $NodeInterClusterAddress = Get-NcNetInterface - Controller $Array | Where-Object { $_.Role -eq ' intercluster' -and $_.HomeNode -eq $Node.Node } | Select-Object - ExpandProperty Address
75+
76+ if ($ClusterHa.Name -notin $HAObject.Partner ) {
77+ $HAObject += [PSCustomObject ][ordered ]@ {
78+ " Name" = $ClusterHa.Name
79+ " Partner" = $ClusterHa.Partner
80+ " HAState" = $ClusterHa.State
81+ }
82+ }
83+
84+ $NodeAdditionalInfo += [PSCustomObject ][ordered ]@ {
85+ ' NodeName' = $Node.Node
86+ ' AdditionalInfo' = [PSCustomObject ][ordered ]@ {
87+ " System Id" = $Node.NodeSystemId
88+ " Serial" = $Node.NodeSerialNumber
89+ " Model" = $Node.NodeSerialNumber
90+ " Mgmt" = switch ([string ]::IsNullOrEmpty($NodeMgmtAddress )) {
91+ $true { " Unknown" }
92+ $false { $NodeMgmtAddress }
93+ default { " Unknown" }
94+ }
95+ }
96+ }
97+
98+ $NodeAggr = Get-NcAggr | Where-Object { $_.Nodes -eq $Node.Node }
99+ foreach ($Aggr in $NodeAggr ) {
100+ $AggrInfo += [PSCustomObject ][ordered ]@ {
101+ " NodeName" = $Node.Node
102+ " AggregateName" = $Aggr.Name
103+ " AdditionalInfo" = [PSCustomObject ][ordered ]@ {
104+ " Total Size" = $Aggr.TotalSize | ConvertTo-FormattedNumber - Type Datasize - ErrorAction SilentlyContinue
105+ " Used Space" = ($Aggr.TotalSize - $Aggr.Available ) | ConvertTo-FormattedNumber - Type Datasize - ErrorAction SilentlyContinue
106+ " Assigned Disk" = $Aggr.Disks
107+ " Raid Type" = switch ([string ]::IsNullOrEmpty($Aggr.RaidType )) {
108+ $true { " Unknown" }
109+ $false {
110+ & {
111+ switch ($Aggr.RaidType.Split (" , " )[0 ]) {
112+ " raid4" { " RAID 4" }
113+ " raid_dp" { " RAID DP" }
114+ " raid0" { " RAID 0" }
115+ " raid1" { " RAID 1" }
116+ " raid10" { " RAID 10" }
117+ default { " Unknown" }
118+ }
119+ }
120+ }
121+ default { " Unknown" }
122+ }
123+ " Raid Size" = $Aggr.RaidSize
124+ " State" = switch ([string ]::IsNullOrEmpty($Aggr.State )) {
125+ $true { " Unknown" }
126+ $false { $Aggr.State.ToUpper () }
127+ default { " Unknown" }
128+ }
129+ }
130+ }
131+ }
132+ }
133+
134+ $ClusterNodesObj = @ ()
135+
136+ foreach ($Node in $NodeAdditionalInfo ) {
137+ $ClusterNodeObj = @ ()
138+ $ClusterNodeObj += Add-DiaHtmlNodeTable - ImagesObj $Images - inputObject $Node.NodeName - Align " Center" - iconType " Ontap_Node" - ColumnSize 1 - IconDebug $IconDebug - MultiIcon - AditionalInfo $Node.AdditionalInfo - Subgraph - SubgraphLabel $Node.NodeName - SubgraphLabelPos " top" - SubgraphTableStyle " dashed,rounded" - TableBorderColor " #71797E" - TableBorder 0 - SubgraphLabelFontSize 22 - FontSize 18
139+
140+ if ($ClusterNodeObj ) {
141+ if ($AggrInfo.Count -eq 1 ) {
142+ $AggrInfoColumnSize = 1
143+ } elseif ($ColumnSize ) {
144+ $AggrInfoColumnSize = $ColumnSize
145+ } else {
146+ $AggrInfoColumnSize = $AggrInfo.Count
147+ }
148+ $ClusterNodeObj += Add-DiaHtmlNodeTable - ImagesObj $Images - inputObject ($AggrInfo | Where-Object { $_.NodeName -eq $Node.Nodename }).AggregateName - Align " Center" - iconType " Ontap_Aggregate" - ColumnSize $AggrInfoColumnSize - IconDebug $IconDebug - MultiIcon - AditionalInfo ($AggrInfo | Where-Object { $_.NodeName -eq $Node.Nodename }).AdditionalInfo - Subgraph - SubgraphLabel " Aggregates" - SubgraphLabelPos " top" - SubgraphTableStyle " dashed,rounded" - TableBorderColor " #71797E" - TableBorder 1 - SubgraphLabelFontSize 22 - FontSize 18
149+ }
150+
151+ if ($ClusterNodeObj ) {
152+ $ClusterNodeSubgraphObj = Add-DiaHtmlSubGraph - ImagesObj $Images - TableArray $ClusterNodeObj - Align ' Center' - IconDebug $IconDebug - Label " " - LabelPos ' top' - TableStyle " dashed,rounded" - TableBorderColor $Edgecolor - TableBorder 1 - ColumnSize 1 - FontSize 12
153+ }
154+
155+ $ClusterNodesObj += $ClusterNodeSubgraphObj
156+ }
157+
158+ if ($ClusterNodesObj ) {
159+ $Index = 0
160+ foreach ($Node in $ClusterNodesObj ) {
161+
162+ $ClusterMgmtObj = Add-DiaHtmlSubGraph - ImagesObj $Images - TableArray $Node - Align ' Right' - IconDebug $IconDebug - Label " " - LabelPos ' down' - TableStyle " dashed,rounded" - TableBorderColor $Edgecolor - TableBorder 0 - ColumnSize 1 - FontSize 18
163+
164+ if ($ClusterMgmtObj ) {
165+ Node Node$Index @ {Label = $ClusterMgmtObj ; shape = ' plain' ; fillColor = ' transparent' ; fontsize = 14 }
166+ $Index ++
167+ } else {
168+ Write-PScriboMessage - IsWarning " Unable to create ClusterNodesObj. No Cluster Management Object found."
169+ }
170+ }
171+ foreach ($HA in $HAObject ) {
172+ Edge - From Node0 - To Node1 @ {tailport = $HA.Name ; headport = $HA.Partner ; minlen = 2 ; label = " HA: $ ( $HA.HAState ) " ; color = $Edgecolor ; fontcolor = $Fontcolor ; fontsize = 16 ; style = ' solid' ; penwidth = 2 ; arrowhead = ' box' ; arrowtail = ' box' }
173+ Rank Node0, Node1
174+ }
175+ }
176+ } catch {
177+ Write-PScriboMessage - IsWarning $_.Exception.Message
178+ }
179+ } catch {
180+ Write-PScriboMessage - IsWarning $_.Exception.Message
181+ }
182+ }
183+
184+ end {}
185+
186+ }
0 commit comments