Src/Private/Get-AbrOntapNodeAggrDiagram.ps1
|
function Get-AbrOntapStorageAggrDiagram { <# .SYNOPSIS Used by As Built Report to built NetApp ONTAP storage aggregate diagram .DESCRIPTION .NOTES Version: 0.6.12 Author: Jonathan Colon Twitter: @jcolonfzenpr Github: rebelinux .EXAMPLE .LINK #> [CmdletBinding()] param ( ) begin { Write-PScriboMessage 'Generating Storage Aggregates Diagram for NetApp ONTAP.' # Used for DiagramDebug if ($Options.EnableDiagramDebug) { $EdgeDebug = @{style = 'filled'; color = 'red' } $SubGraphDebug = @{style = 'dashed'; color = 'red' } $NodeDebug = @{color = 'black'; style = 'red'; shape = 'plain' } $NodeDebugEdge = @{color = 'black'; style = 'red'; shape = 'plain' } $IconDebug = $true } else { $EdgeDebug = @{style = 'invis'; color = 'red' } $SubGraphDebug = @{style = 'invis'; color = 'gray' } $NodeDebug = @{color = 'transparent'; style = 'transparent'; shape = 'point' } $NodeDebugEdge = @{color = 'transparent'; style = 'transparent'; shape = 'none' } $IconDebug = $false } if ($Options.DiagramTheme -eq 'Black') { $Edgecolor = 'White' $Fontcolor = 'White' } elseif ($Options.DiagramTheme -eq 'Neon') { $Edgecolor = 'gold2' $Fontcolor = 'gold2' } else { $Edgecolor = '#71797E' $Fontcolor = '#565656' } } process { try { $ClusterInfo = Get-NcCluster -Controller $Array $NodeSum = Get-NcNode -Controller $Array SubGraph Cluster -Attributes @{Label = $ClusterInfo.ClusterName; fontsize = 22; penwidth = 1.5; labelloc = 't'; style = 'dashed,rounded'; color = 'gray' } { try { if ($NodeSum.Count -eq 1) { $NodeSumColumnSize = 1 } elseif ($ColumnSize) { $NodeSumColumnSize = $ColumnSize } else { $NodeSumColumnSize = $NodeSum.Count } $HAObject = @() $NodeAdditionalInfo = @() $AggrInfo = @() foreach ($Node in $NodeSum) { $ClusterHa = Get-NcClusterHa -Node $Node.Node -Controller $Array $NodeMgmtAddress = Get-NcNetInterface -Controller $Array | Where-Object { $_.Role -eq 'node_mgmt' -and $_.HomeNode -eq $Node.Node } | Select-Object -ExpandProperty Address $NodeInterClusterAddress = Get-NcNetInterface -Controller $Array | Where-Object { $_.Role -eq 'intercluster' -and $_.HomeNode -eq $Node.Node } | Select-Object -ExpandProperty Address if ($ClusterHa.Name -notin $HAObject.Partner) { $HAObject += [PSCustomObject][ordered]@{ 'Name' = $ClusterHa.Name 'Partner' = $ClusterHa.Partner 'HAState' = $ClusterHa.State } } $NodeAdditionalInfo += [PSCustomObject][ordered]@{ 'NodeName' = $Node.Node 'AdditionalInfo' = [PSCustomObject][ordered]@{ 'System Id' = $Node.NodeSystemId 'Serial' = $Node.NodeSerialNumber 'Model' = $Node.NodeModel 'Mgmt' = switch ([string]::IsNullOrEmpty($NodeMgmtAddress)) { $true { 'Unknown' } $false { $NodeMgmtAddress -join ', ' } default { 'Unknown' } } } } $NodeAggr = Get-NcAggr | Where-Object { $_.Nodes -eq $Node.Node } foreach ($Aggr in $NodeAggr) { $AggrInfo += [PSCustomObject][ordered]@{ 'NodeName' = $Node.Node 'AggregateName' = $Aggr.Name 'AdditionalInfo' = [PSCustomObject][ordered]@{ 'Total Size' = $Aggr.TotalSize | ConvertTo-FormattedNumber -NumberFormatString 0.0 -Type Datasize -ErrorAction SilentlyContinue 'Used Space' = ($Aggr.TotalSize - $Aggr.Available) | ConvertTo-FormattedNumber -NumberFormatString 0.0 -Type Datasize -ErrorAction SilentlyContinue 'Assigned Disk' = $Aggr.Disks 'Raid Type' = switch ([string]::IsNullOrEmpty($Aggr.RaidType)) { $true { 'Unknown' } $false { & { switch ($Aggr.RaidType.Split(', ')[0]) { 'raid4' { 'RAID 4' } 'raid_dp' { 'RAID DP' } 'raid0' { 'RAID 0' } 'raid1' { 'RAID 1' } 'raid10' { 'RAID 10' } default { 'Unknown' } } } } default { 'Unknown' } } 'Raid Size' = $Aggr.RaidSize 'State' = switch ([string]::IsNullOrEmpty($Aggr.State)) { $true { 'Unknown' } $false { $Aggr.State.ToUpper() } default { 'Unknown' } } } } } } $ClusterNodesObj = @() foreach ($Node in $NodeAdditionalInfo) { $ClusterNodeObj = @() $ClusterNodeObj += Add-HtmlNodeTable -Name 'ClusterNodeObj' -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 if ($ClusterNodeObj) { if ($AggrInfo.Count -eq 1) { $AggrInfoColumnSize = 1 } elseif ($ColumnSize) { $AggrInfoColumnSize = $ColumnSize } else { $AggrInfoColumnSize = $AggrInfo.Count } $ClusterNodeObj += Add-HtmlNodeTable -Name 'ClusterNodeObj' -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 } if ($ClusterNodeObj) { $ClusterNodeSubgraphObj = Add-HtmlSubGraph -Name 'ClusterNodeSubgraphObj' -ImagesObj $Images -TableArray $ClusterNodeObj -Align 'Center' -IconDebug $IconDebug -Label ' ' -LabelPos 'top' -TableStyle 'dashed,rounded' -TableBorderColor $Edgecolor -TableBorder 1 -ColumnSize 1 -FontSize 12 } $ClusterNodesObj += $ClusterNodeSubgraphObj } if ($ClusterNodesObj) { if ($ClusterNodesObj.Count -eq 1) { $ClusterNodesObjColumnSize = 1 } elseif ($ColumnSize) { $ClusterNodesObjColumnSize = $ColumnSize } else { $ClusterNodesObjColumnSize = $ClusterNodesObj.Count } $ClusterMgmtObj = Add-HtmlSubGraph -Name 'ClusterMgmtObj' -ImagesObj $Images -TableArray $ClusterNodesObj -Align 'Right' -IconDebug $IconDebug -Label "Management: $($ClusterInfo.NcController.Name)" -LabelPos 'down' -TableStyle 'dashed,rounded' -TableBorderColor $Edgecolor -TableBorder 0 -ColumnSize $ClusterNodesObjColumnSize -FontSize 18 if ($ClusterMgmtObj) { Node ClusterAggrs @{Label = $ClusterMgmtObj; shape = 'plain'; fillColor = 'transparent'; fontsize = 14 } } else { Write-PScriboMessage -IsWarning 'Unable to create ClusterNodesObj. No Cluster Management Object found.' } } } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } } } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } } end {} } |