Conversation
Add a new Get-AbrAzNetAppFiles private function that documents Azure NetApp Files (ANF) across the account, capacity pool, and volume hierarchy, plus snapshot and backup policies. Modelled on the AVD implementation: one consolidated function in Src/Private/ covering every ANF resource type with InfoLevel-gated rendering and health-check styling. Resources covered: - NetApp Accounts (with Active Directory join and encryption config) - Capacity Pools (service level, QoS, size, allocation %, throughput) - Volumes (protocol, quota, mount targets, export policy rules, snapshot/backup policy references, cool access tiering, SMB/NFS attributes, provisioning state) - Snapshot Policies (hourly/daily/weekly/monthly schedules) - Backup Policies (daily/weekly/monthly retention) - Per-volume snapshots and quota rules at InfoLevel 4 Health checks (all gated by Healthcheck.NetAppFiles.<flag>): - PoolCapacity: warning when sum of volume quotas > 85% of pool size - AdHealth: warning when Active Directory join status != InUse - SnapshotPolicy: info when a volume has no snapshot policy attached - BackupProtection: info when a volume has no backup policy attached - CustomerManagedKey: info when account uses platform-managed keys Internationalization: GetAbrAzNetAppFiles string block added to all five supported cultures (en-US, en-GB, es-ES, fr-FR, de-DE). Non-en-US cultures currently mirror the English strings pending native translations. Orchestrator: register NetAppFiles in $DefaultSectionOrder and $SectionFunctionMap. Default config adds NetAppFiles entries to SectionOrder, InfoLevel (1), and HealthCheck with the five flags enabled. Documentation: README gains "NetApp Files" in the supported-resources list, an entry in the InfoLevel table (default 1, max 4), and a dedicated Healthcheck subsection. CHANGELOG records the addition under [Unreleased]. Cmdlets consumed from Az.NetAppFiles: Get-AzNetAppFilesAccount, Get-AzNetAppFilesPool, Get-AzNetAppFilesVolume, Get-AzNetAppFilesSnapshot, Get-AzNetAppFilesSnapshotPolicy, Get-AzNetAppFilesBackupPolicy, Get-AzNetAppFilesVolumeQuotaRule. Validated with PSScriptAnalyzer (0 findings in new file) and the existing Pester test suite (203/203 passing, including the LocalizationData consistency checks across all five cultures).
Address PR #31 review feedback (tpcarman): use descriptive names instead of single-letter / abbreviated loop variables. $Acct -> $NetAppAccount $P -> $CapacityPool $V -> $Volume $Mt -> $MountTarget $S -> $Snapshot $Qr -> $QuotaRule $Pol -> $Policy $Pols -> $Policies Pure rename: 147 insertions / 147 deletions, no logic change. PSScriptAnalyzer: 0 findings.
…en-GB spellings Address PR #31 review feedback (tpcarman): the appended NetApp Files localization block was previously placeholder English in non-en-US cultures. Now properly translated. - de-DE: 116 strings translated to German with umlauts/sharp-s (UTF-8 without BOM, matching the existing file's convention). - es-ES: 116 strings translated to Spanish with full diacritics (UTF-8 without BOM, matching the existing file). - fr-FR: 116 strings translated to French in pure ASCII, matching the existing file's accent-stripped convention (e.g. "resume", "cle", "strategie"). - en-GB: 7 spellings adjusted (summarizes -> summarises x5, Utilized -> Utilised, Organizational -> Organisational) to match the rest of the file's en-GB style. Per project convention preserved across all non-en-US files, "Yes"/"No" are kept untranslated. Azure-specific technical terms (SMB, NFSv3, AES, LDAP, FQDN, Active Directory, Cool Access, Kerberos, RBAC, etc.) are also kept in English. Validation: - All 5 Tests/LocalizationData.Tests.ps1 Pester tests pass (key consistency across en-US/en-GB/de-DE/es-ES/fr-FR). - Import-LocalizedData round-trips cleanly for each culture with all 116 keys present.
Add support for Azure NetApp Files reporting
…scription sections - Add Get-AbrAzManagementGroup to report full MG hierarchy with parent/child relationships and subscription counts - Add Get-AbrDiagAzManagementGroup for optional hierarchy diagram (EnableDiagrams option) using AsBuiltReport.Diagram, sized for portrait page - Add Test-AbrAzInfoLevelEnabled helper to gate per-subscription section rendering - Fix empty subscription sections by checking resource existence per subscription before creating Heading3 section - Add ManagementGroup InfoLevel and EnableDiagrams/DiagramTheme options to JSON config - Add localization strings for Management Groups across all supported languages - Add Management Group icons (management-groups.png, subscriptions.png, blank.png) - Update README and CHANGELOG Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add Resource Locks (CanNotDelete/ReadOnly) to Virtual Networks, Key Vaults, Recovery Services Vaults, Storage Accounts, Firewalls, Private DNS Zones, Route Tables, Virtual Network Gateways, Log Analytics Workspaces, and DDoS Protection Plans; displayed at InfoLevel 2 and above across all 5 languages - Add reporting for Application Gateways, Data Collection Rules, DDoS Protection Plans, DNS Forwarding Rulesets, Maintenance Configurations, Network Watchers, Private DNS Zones, Public IP Addresses, Virtual Network Gateways, and VM Scale Sets - Update minimum Az module dependency to 16.0.0 - Update CHANGELOG and README for v0.3.0 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Relocate all 55 private report functions into a Report/ subfolder to separate report-generation functions from the Diagram/ subfolder. The .psm1 already uses -Recurse so no module-load changes are required. Update three Get-ChildItem calls in the Pester test suite that lacked -Recurse and would have returned empty results after the move. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…d Identity support; fix storage account management-plane property mappings and empty subscription sections Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add Location field to Get-AbrAzPrivateDnsZone InObj and summary table - Add Location localization key to all language files (en-US, en-GB, de-DE, es-ES, fr-FR) - Remove tests for ExternalModuleDependencies (AsBuiltReport.Core), IconUri, and diagram functions that do not apply to this module Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…t health check logic Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace single Get-AzRecoveryServicesAsrNetworkMapping -Fabric call with a two-level loop: first enumerate ASR networks per fabric via Get-AzRecoveryServicesAsrNetwork, then call Get-AzRecoveryServicesAsrNetworkMapping with both -Fabric and -Network parameters. The original single-parameter call silently returns nothing on real Azure vaults as both parameters are required. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
AsBuiltReport.Diagram is listed as a RequiredModule in the manifest but was not installed on CI runners, causing the manifest to fail to parse. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Pushes a tag prefixed with v* to create a draft release pre-populated with the current version's CHANGELOG section, requiring manual publish before PSGallery and social media jobs fire. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace exit 1 with a step output so the job completes green with subsequent steps skipped rather than failing on non-main/master tags. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…tication Wrap Get-AzTenant, Get-AzLocation, and Get-AzSubscription calls in try/catch so that transient HTTP stream failures (e.g. Error while copying content to a stream) are caught and reported as warnings rather than propagating as an unhandled exception that aborts the run. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ConnectionStatus is a server-computed IPsec tunnel health value that Azure never populates for ExpressRoute connections (no IPsec tunnel exists). Fall back to N/A instead of blank, and exclude N/A rows from the connection status health check so ExpressRoute connections aren't falsely flagged as unhealthy. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Microsoft.Maintenance/maintenanceConfigurations does not expose a provisioningState property in its ARM schema at any API version, so the field could never be populated and always rendered blank. Removes the dead Get-AzResource lookup workaround, the ProvisioningState column/health check, and the corresponding config schema and documentation entries. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Correct edge/Blankline calls to match actual PScribo cmdlet casing (Edge, BlankLine) and remove stale hashtable alignment padding. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…pliance) Identifies third-party NVAs (Palo Alto, Fortinet, Cisco, Check Point, F5, Barracuda, SonicWall, Juniper, Riverbed) via Azure Marketplace image publisher, with optional resource-tag fallback (Options.NvaTag) and a configurable publisher list (Options.NvaPublishers). Summary table at InfoLevel 1, per-NVA detail at InfoLevel 2, and associated UDR route table cross-reference at InfoLevel 3. Deallocated NVAs are flagged by the Status health check. Localizes all report strings across en-US, en-GB, fr-FR, de-DE, and es-ES, and documents the new InfoLevel, HealthCheck, and Options (NvaPublishers, NvaTag) schema entries in README.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Several report sections added over past releases (NetworkVirtualAppliance, MaintenanceConfiguration, DnsForwardingRuleset, VirtualNetworkGateway, ApplicationGateway, DdosProtectionPlan, PublicIpAddress, NetworkWatcher, VmScaleSet, DataCollectionRule, PrivateDnsZone, DesktopVirtualization, NetAppFiles, and the Asr* trio) had never been added to the hardcoded per-feature checks in the Private Functions and JSON Configuration contexts, so a regression removing one of their InfoLevel/HealthCheck/ SectionOrder entries or private function file would have gone undetected. Add existence checks for the missing private functions, InfoLevel keys, and HealthCheck keys, and consolidate SectionOrder validation into a single comprehensive list instead of checking 5 of 38 entries. Remove the redundant "Verify new vX.X.X functions have localization" block - those 13 checks duplicated the dynamic 'All Get-AbrAz* functions should have localization sections' test one section above, which already covers every Get-AbrAz* function (including future ones) without per-release maintenance. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
GetAbrAzLoadBalancer's localization sections defined the alt-text key as LoadBalancerImage instead of Image, the key the code actually references via $LocalizedData.Image. Since PScribo's Image cmdlet requires -Text as a mandatory parameter for the Base64Percent parameter set, binding it to $null threw a parameter validation exception on every report run, caught by the surrounding try/catch and surfaced as "Unable to display Load Balancer image" instead of rendering the diagram. Renamed the key to Image across all 5 language files to match the convention used by every other section with an embedded diagram (e.g. GetAbrAzBastion, GetAbrAzNetworkSecurityGroup). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
…ends Previously only matched the primary NIC's private IP, missing UDRs that route to secondary NICs or to an Internal Load Balancer frontend IP fronting an NVA HA pair. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Release v0.3.0 of the Microsoft Azure As Built Report module.
Added
AsrPolicy), Recovery Plans (AsrRecoveryPlan), and Network Mappings (AsrNetworkMapping)StorageRedundancy,CrossRegionRestore,SoftDeleteState,SoftDeleteRetentionDays,ImmutabilityState, andPublicNetworkAccessproperties and health checks to Recovery Services VaultOptions.EnableDiagrams)Options.DiagramDpisetting for diagram raster resolutionGet-AbrAzNetworkVirtualAppliance) — identifies third-party NVAs via Marketplace publisher or resource tag, with InfoLevel 3 UDR route table cross-referencing against all NIC private IPs and Load Balancer frontend IPs for HA pairsChanged
Fixed
ConnectionStatusfor ExpressRoute VNet Gateway connectionsSee CHANGELOG.md for full details.
Related Issue
N/A — aggregate release PR for v0.3.0 covering multiple previously discussed features and fixes.
Motivation and Context
Bundles the v0.3.0 feature set (new resource types, health checks, and diagram support) and accumulated bug fixes into a single release, bringing the module's coverage of Azure resource types up to date.
How Has This Been Tested?
Import-LocalizedDataScreenshots (if appropriate):
N/A
Types of changes
Checklist:
🤖 Generated with Claude Code