diff --git a/AsBuiltReport.NetApp.ONTAP.psd1 b/AsBuiltReport.NetApp.ONTAP.psd1 index 1116211..b9c4d6d 100755 --- a/AsBuiltReport.NetApp.ONTAP.psd1 +++ b/AsBuiltReport.NetApp.ONTAP.psd1 @@ -12,7 +12,7 @@ RootModule = 'AsBuiltReport.NetApp.ONTAP.psm1' # Version number of this module. - ModuleVersion = '0.6.9' + ModuleVersion = '0.6.10' # Supported PSEditions # CompatiblePSEditions = @() @@ -62,7 +62,7 @@ }, @{ ModuleName = 'Diagrammer.Core'; - ModuleVersion = '0.2.32' + ModuleVersion = '0.2.33' } ) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00b438d..6d8398c 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.6.10] - Unreleased + +### Added + +- Add WaterMarkFontOpacity parameter to Export-AbrOntapDiagram function + +### Changed + +- Refactor Export-AbrOntapDiagram to handle image format for Unix platforms and improve error messaging +- Bump Diagrammer.Core module requirement to v0.2.33 +- Bump module version to v0.6.10 +- Refactor Get-NetAppOntapAPI to streamline certificate validation for Unix platforms +- Update SignatureLogoName in Export-AbrOntapDiagram function for consistency + +### Fixed + +- Fix Get-AbrOntapStorageAggrDiagram for drawing node management and aggregate storage relationships correctly. + ## [0.6.9] - 2025-10-21 ### Changed @@ -16,12 +34,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - NetApp.Ontap v9.17.1.2509 - AsBuiltReport.Core v1.5.0 - Refactor Get-NetAppOntapAPI to handle Unix platform and improve error handling in Invoke-AsBuiltReport.NetApp.ONTAP +- Refactor Export-AbrOntapDiagram to handle image format for Unix platforms and improve error messaging ### Fixed - Fix issue where cluster replication diagram generation fails if no replication relationships are found. - Fix issue where certain sections of the report may not render correctly on Unix-based systems. - Close [#58](https://github.com/AsBuiltReport/AsBuiltReport.NetApp.ONTAP/issues/58) +- Fix Get-AbrOntapStorageAggrDiagram for drawing node management and aggregate storage relationships correctly. ## [0.6.8] - 2025-08-18 diff --git a/README.md b/README.md index f64f8b6..2cd2460 100755 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ These modules may also be manually installed. | Module Name | Minimum Required Version | PS Gallery | GitHub | | ------------------ | :----------------------: | :-------------------------------------------------------------------: | :-------------------------------------------------------------------------: | | PScribo | 0.10.0 | [Link](https://www.powershellgallery.com/packages/PScribo) | [Link](https://github.com/iainbrighton/PScribo/tree/master) | -| AsBuiltReport.Core | 1.4.0 | [Link](https://www.powershellgallery.com/packages/AsBuiltReport.Core) | [Link](https://github.com/AsBuiltReport/AsBuiltReport.Core/releases/latest) | +| AsBuiltReport.Core | 1.5.0 | [Link](https://www.powershellgallery.com/packages/AsBuiltReport.Core) | [Link](https://github.com/AsBuiltReport/AsBuiltReport.Core/releases/latest) | | Netapp.ONTAP | 9.17.1.2509 | [Link](https://www.powershellgallery.com/packages/NetApp.ONTAP) | | ## :package: Module Installation diff --git a/Src/Private/Export-AbrOntapDiagram.ps1 b/Src/Private/Export-AbrOntapDiagram.ps1 index 1cfb8a6..cf738f1 100644 --- a/Src/Private/Export-AbrOntapDiagram.ps1 +++ b/Src/Private/Export-AbrOntapDiagram.ps1 @@ -46,8 +46,9 @@ function Export-AbrOntapDiagram { 'IconPath' = $IconPath 'ImagesObj' = $Images 'LogoName' = 'AsBuiltReport_LOGO' - 'SignatureLogoName' = 'Abr_LOGO_Footer' + 'SignatureLogoName' = 'AsBuiltReport_Signature' 'WaterMarkText' = $Options.DiagramWaterMark + 'WaterMarkFontOpacity' = 20 'Direction' = & { if ($MainDiagramLabel -eq 'Cluster Replication Diagram') { 'left-to-right' @@ -114,22 +115,17 @@ function Export-AbrOntapDiagram { } } try { - if ($PSVersionTable.Platform -ne 'Unix') { - $DiagramParams.Remove('Format') - $DiagramParams.Add('Format', "base64") + $DiagramParams.Remove('Format') + $DiagramParams.Add('Format', "base64") - $Graph = $DiagramObject - $Diagram = New-Diagrammer @DiagramParams -InputObject $Graph - if ($Diagram) { - if ((Get-DiaImagePercent -GraphObj $Diagram).Width -gt 600) { $ImagePrty = 40 } else { $ImagePrty = 30 } - Section -Style Heading2 $MainDiagramLabel { - Image -Base64 $Diagram -Text "NetApp Ontap Diagram" -Percent $ImagePrty -Align Center - Paragraph "Image preview: Opens the image in a new tab to view it at full resolution." -Tabs 2 - } + $Graph = $DiagramObject + $Diagram = New-Diagrammer @DiagramParams -InputObject $Graph + if ($Diagram) { + if ((Get-DiaImagePercent -GraphObj $Diagram).Width -gt 600) { $ImagePrty = 40 } else { $ImagePrty = 30 } + Section -Style Heading2 $MainDiagramLabel { + Image -Base64 $Diagram -Text "NetApp Ontap Diagram" -Percent $ImagePrty -Align Center + Paragraph "Image preview: Opens the image in a new tab to view it at full resolution." -Tabs 2 } - } else { - Write-PScriboMessage -IsWarning -Message "PSCribo Images embedding is not supported on PowerShell Core running on Linux or MacOS." - } } catch { Write-PScriboMessage -IsWarning -Message "Unable to generate the Ontap Diagram: $($_.Exception.Message)" diff --git a/Src/Private/Get-AbrOntapNodeAggrDiagram.ps1 b/Src/Private/Get-AbrOntapNodeAggrDiagram.ps1 index cf608f0..93011e3 100644 --- a/Src/Private/Get-AbrOntapNodeAggrDiagram.ps1 +++ b/Src/Private/Get-AbrOntapNodeAggrDiagram.ps1 @@ -91,7 +91,7 @@ function Get-AbrOntapStorageAggrDiagram { "Mgmt" = switch ([string]::IsNullOrEmpty($NodeMgmtAddress)) { $true { "Unknown" } $false { $NodeMgmtAddress } - Default { "Unknown" } + default { "Unknown" } } } } @@ -115,11 +115,11 @@ function Get-AbrOntapStorageAggrDiagram { "raid0" { "RAID 0" } "raid1" { "RAID 1" } "raid10" { "RAID 10" } - Default { "Unknown" } + default { "Unknown" } } } } - Default { "Unknown" } + default { "Unknown" } } "Raid Size" = $Aggr.RaidSize "State" = $Aggr.State @@ -132,7 +132,7 @@ function Get-AbrOntapStorageAggrDiagram { foreach ($Node in $NodeAdditionalInfo) { $ClusterNodeObj = @() - $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 + $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 if ($ClusterNodeObj) { if ($AggrInfo.Count -eq 1) { @@ -142,11 +142,11 @@ function Get-AbrOntapStorageAggrDiagram { } else { $AggrInfoColumnSize = $AggrInfo.Count } - $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 + $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 } if ($ClusterNodeObj) { - $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 + $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 } $ClusterNodesObj += $ClusterNodeSubgraphObj @@ -160,10 +160,10 @@ function Get-AbrOntapStorageAggrDiagram { } else { $ClusterNodesObjColumnSize = $ClusterNodesObj.Count } - $ClusterMgmtObj = Add-DiaHTMLSubGraph -ImagesObj $Images -TableArray $ClusterNodesObj -Align 'Right' -IconDebug $IconDebug -Label "Management: $($ClusterInfo.NcController)" -LabelPos 'down' -TableStyle "dashed,rounded" -TableBorderColor $Edgecolor -TableBorder 0 -columnSize $ClusterNodesObjColumnSize -fontSize 18 + $ClusterMgmtObj = Add-DiaHtmlSubGraph -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 Cluster @{Label = $ClusterMgmtObj; shape = 'plain'; fillColor = 'transparent'; fontsize = 14 } + Node ClusterAggrs @{Label = $ClusterMgmtObj; shape = 'plain'; fillColor = 'transparent'; fontsize = 14 } } else { Write-PScriboMessage -IsWarning "Unable to create ClusterNodesObj. No Cluster Management Object found." diff --git a/Src/Private/Get-NetAppOntapAPI.ps1 b/Src/Private/Get-NetAppOntapAPI.ps1 index 93a4550..efc0e2e 100644 --- a/Src/Private/Get-NetAppOntapAPI.ps1 +++ b/Src/Private/Get-NetAppOntapAPI.ps1 @@ -26,10 +26,7 @@ function Get-NetAppOntapAPI { ) begin { - if ($PSVersionTable.Platform -ne 'Unix') { - #region Workaround for SelfSigned Cert an force TLS 1.2 - if (-not ([System.Management.Automation.PSTypeName]'ServerCertificateValidationCallback').Type) { - $certCallback = @" + $certCallback = @" using System; using System.Net; using System.Net.Security; @@ -55,6 +52,9 @@ function Get-NetAppOntapAPI { } } "@ + if ($PSVersionTable.PSEdition -ne 'Core') { + #region Workaround for SelfSigned Cert an force TLS 1.2 + if (-not ([System.Management.Automation.PSTypeName]'ServerCertificateValidationCallback').Type) { Add-Type $certCallback } [ServerCertificateValidationCallback]::Ignore()