Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
211c6b6
Add Azure NetApp Files reporting support
cse-gh Apr 23, 2026
a9c446b
Rename single-letter loop variables in Get-AbrAzNetAppFiles
cse-gh May 4, 2026
3e28ee1
Translate GetAbrAzNetAppFiles strings for de-DE / es-ES / fr-FR; fix …
cse-gh May 4, 2026
aa30734
Merge pull request #31 from cse-gh/add-netappfiles
tpcarman May 4, 2026
0f090d1
Add Management Group support with hierarchy diagram and fix empty sub…
tpcarman Jun 15, 2026
3b32806
Add resource locks reporting, new resource sections, and v0.3.0 updates
tpcarman Jun 17, 2026
b06618d
Move Src/Private/*.ps1 to Src/Private/Report/ and update Pester tests
tpcarman Jun 17, 2026
4cab46f
Add Automation Account, Diagnostic Settings, and User Assigned Manage…
tpcarman Jun 19, 2026
8c3f599
Add Location to Private DNS Zone output and clean up test failures
tpcarman Jun 19, 2026
734969d
Fix ASR protected items: support all replication providers and correc…
tpcarman Jun 26, 2026
2d572de
Add vault security properties and health checks to Recovery Services …
tpcarman Jun 26, 2026
2dca42e
Add InfoLevel 2 per-VM detail view to ASR protected items reporter
tpcarman Jun 26, 2026
39a3414
Add ASR replication policy reporter (Get-AbrAzAsrPolicy)
tpcarman Jun 26, 2026
81d1ae9
Add ASR recovery plan reporter (Get-AbrAzAsrRecoveryPlan)
tpcarman Jun 26, 2026
3849c87
Add ASR network mapping reporter (Get-AbrAzAsrNetworkMapping)
tpcarman Jun 26, 2026
4bf4973
Fix ASR network mapping collection to iterate per-network
tpcarman Jun 26, 2026
e5a12b5
Fix code review findings from whole-branch review
tpcarman Jun 27, 2026
1e8eac4
Update CHANGELOG and README for ASR reporting enhancements
tpcarman Jun 27, 2026
f4af1ee
Add AsBuiltReport.Diagram install step to Pester CI workflow
tpcarman Jun 29, 2026
7daad89
Add DraftRelease workflow to automate draft GitHub Release creation
tpcarman Jun 29, 2026
ce6a859
Skip draft release creation when tag is not on main/master
tpcarman Jun 29, 2026
2109648
Fix unhandled stream error from unguarded Azure API calls post-authen…
tpcarman Jun 30, 2026
83c7942
Fix blank Connection Status for ExpressRoute VNet Gateway connections
tpcarman Jul 13, 2026
3b6ddb1
Remove Provisioning State from Maintenance Configuration reporting
tpcarman Jul 13, 2026
0d79c31
Fix casing and formatting in Get-AbrDiagAzManagementGroup
tpcarman Jul 13, 2026
5acba80
Add support for Network Virtual Appliances (Get-AbrAzNetworkVirtualAp…
tpcarman Jul 13, 2026
7f63ba6
Backfill Pester coverage for v0.3.0 report sections
tpcarman Jul 13, 2026
3f52f4e
Fix blank Load Balancer architecture diagram in report output
tpcarman Jul 13, 2026
7078d45
Improve NVA UDR matching to cover all NICs and HA load balancer front…
tpcarman Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/Dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Dependabot configuration for <%= $PLASTER_PARAM_ModuleName %>
# Dependabot configuration for AsBuiltReport.Microsoft.Azure
# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file

version: 2
Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ body:
I have read and followed the [bug reporting guidelines](https://www.asbuiltreport.com/dev-guide/contributing/#reporting-issues-and-bugs).
required: true
- label: >-
I have read [the documentation](https://www.asbuiltreport.com/user-guide/quickstart/,
I have read [the documentation](https://www.asbuiltreport.com/user-guide/quickstart/),
and referred to the [known issues](https://www.asbuiltreport.com/support/known-issues/) before submitting this bug report.
required: true
- label: >-
Expand Down
4 changes: 2 additions & 2 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
## Checklist:
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [ ] My code follows the [code style](https://www.asbuiltreport.com/about/contributing/#use-a-consistent-coding-style) of this project.
- [ ] My code follows the [code style](https://www.asbuiltreport.com/dev-guide/contributing/#coding-style-guidelines) of this project.
- [ ] My change requires a change to the documentation.
- [ ] I have updated the documentation accordingly.
- [ ] I have read the [contributing](https://www.asbuiltreport.com/about/contributing/) documentation.
- [ ] I have read the [contributing](https://www.asbuiltreport.com/dev-guide/contributing/) documentation.
50 changes: 50 additions & 0 deletions .github/workflows/DraftRelease.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Create Draft Release

on:
push:
tags:
- 'v*'

jobs:
draft-release:
name: Create Draft GitHub Release
runs-on: ubuntu-latest
permissions:
contents: write

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Verify tag is on main or master
id: verify
run: |
if git merge-base --is-ancestor "${{ github.sha }}" origin/main 2>/dev/null || \
git merge-base --is-ancestor "${{ github.sha }}" origin/master 2>/dev/null; then
echo "on_main=true" >> $GITHUB_OUTPUT
else
echo "Tag is not on main/master — skipping release creation."
echo "on_main=false" >> $GITHUB_OUTPUT
fi

- name: Extract release notes from CHANGELOG
if: steps.verify.outputs.on_main == 'true'
shell: pwsh
run: |
$changelog = Get-Content -Path CHANGELOG.md -Raw
# Match content between the first ## [ heading and the next one
if ($changelog -match '(?s)(## \[\d+\.\d+\.\d+\].*?)(?=\r?\n## \[|\z)') {
$Matches[1].Trim() | Set-Content -Path release-notes.md -NoNewline
} else {
"No changelog entry found for this release." | Set-Content -Path release-notes.md
}

- name: Create draft release
if: steps.verify.outputs.on_main == 'true'
uses: softprops/action-gh-release@v2
with:
draft: true
make_latest: false
body_path: release-notes.md
4 changes: 2 additions & 2 deletions .github/workflows/PSScriptAnalyzer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ jobs:
name: Run PSScriptAnalyzer
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v6
- name: lint
uses: devblackops/github-action-psscriptanalyzer@master
uses: alagoutte/github-action-psscriptanalyzer@master
with:
sendComment: true
failOnErrors: true
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/Pester.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@ jobs:
run: |
Install-Module -Name AsBuiltReport.Core -MinimumVersion 1.6.0 -Repository PSGallery -Force -AllowClobber -Scope CurrentUser

- name: Install AsBuiltReport.Diagram
run: |
Install-Module -Name AsBuiltReport.Diagram -MinimumVersion 1.0.8 -Repository PSGallery -Force -AllowClobber -Scope CurrentUser

- name: Run Pester Tests
run: |
$CodeCoverageParam = @{}
Expand Down
131 changes: 116 additions & 15 deletions AsBuiltReport.Microsoft.Azure/AsBuiltReport.Microsoft.Azure.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,64 +12,139 @@
"Options": {
"ShowSectionInfo": true,
"ShowTags": true,
"EnableDiagrams": true,
"DiagramTheme": "White",
"DiagramDpi": 600,
"NvaPublishers": ["fortinet"],
"NvaTag": "",
"SectionOrder": [
"ApplicationGateway",
"StorageAccount",
"KeyVault",
"LogAnalyticsWorkspace",
"DataCollectionRule",
"DiagnosticSetting",
"LoadBalancer",
"ExpressRoute",
"VirtualNetworkGateway",
"DdosProtectionPlan",
"VirtualNetwork",
"PublicIpAddress",
"NetworkWatcher",
"NetworkSecurityGroup",
"PrivateEndpoint",
"IpGroup",
"DnsPrivateResolver",
"DnsForwardingRuleset",
"PrivateDnsZone",
"Bastion",
"Policy",
"UserAssignedManagedIdentity",
"Firewall",
"FirewallPolicy",
"RouteTable",
"NetworkVirtualAppliance",
"VirtualMachine",
"AvailabilitySet",
"VmScaleSet",
"MaintenanceConfiguration",
"AutomationAccount",
"RecoveryServicesVault",
"SiteRecovery",
"DesktopVirtualization"
"AsrPolicy",
"AsrRecoveryPlan",
"AsrNetworkMapping",
"DesktopVirtualization",
"NetAppFiles"
]
},
"Filter": {
"Subscription": ["*"]
},
"InfoLevel": {
"_comment_": "0 = Disabled, 1 = Enabled / Summary, 2 = Detailed, 3 = Adv. Detailed, 4 = Comprehensive",
"ApplicationGateway": 1,
"AsrNetworkMapping": 1,
"AsrPolicy": 1,
"AsrRecoveryPlan": 1,
"AutomationAccount": 1,
"AvailabilitySet": 1,
"Bastion": 1,
"DataCollectionRule": 1,
"DdosProtectionPlan": 1,
"DesktopVirtualization": 1,
"DiagnosticSetting": 1,
"DnsForwardingRuleset": 1,
"DnsPrivateResolver": 1,
"ExpressRoute": 1,
"Firewall": 1,
"FirewallPolicy": 1,
"IpGroup": 1,
"KeyVault": 1,
"LogAnalyticsWorkspace": 1,
"LoadBalancer": 1,
"LogAnalyticsWorkspace": 1,
"MaintenanceConfiguration": 1,
"ManagementGroup": 1,
"NetAppFiles": 1,
"NetworkSecurityGroup": 1,
"NetworkVirtualAppliance": 1,
"NetworkWatcher": 1,
"Policy": {
"Assignments": 1,
"Definitions": 0
},
"PrivateDnsZone": 1,
"PrivateEndpoint": 2,
"PublicIpAddress": 1,
"RecoveryServicesVault": 1,
"RouteTable": 1,
"SiteRecovery": 1,
"StorageAccount": 1,
"Subscription": 1,
"Tenant": 0,
"VirtualNetwork": 1,
"UserAssignedManagedIdentity": 1,
"VirtualMachine": 1,
"DesktopVirtualization": 1
"VirtualNetwork": 1,
"VirtualNetworkGateway": 1,
"VmScaleSet": 1
},
"HealthCheck": {
"ApplicationGateway": {
"ProvisioningState": true,
"OperationalState": true
},
"AsrNetworkMapping": {
"MappingState": true
},
"AsrPolicy": {
"AppConsistentSnapshot": true
},
"AutomationAccount": {
"State": true
},
"Bastion": {
"ProvisioningState": true
},
"DataCollectionRule": {
"ProvisioningState": true
},
"DdosProtectionPlan": {
"ProvisioningState": true
},
"DesktopVirtualization": {
"SessionHostHealth": true,
"DrainMode": true,
"RegistrationExpiry": true,
"NoSessionHosts": true,
"HostPoolCapacity": true
},
"DiagnosticSetting": {
"NoLogsEnabled": true
},
"DnsForwardingRuleset": {
"ProvisioningState": true,
"ForwardingRuleState": true
},
"DnsPrivateResolver": {
"ProvisioningState": true,
"CurrentState": true
Expand Down Expand Up @@ -101,25 +176,46 @@
"PublicNetworkAccessForIngestion": true,
"PublicNetworkAccessForQuery": true
},
"NetAppFiles": {
"PoolCapacity": true,
"AdHealth": true,
"SnapshotPolicy": true,
"BackupProtection": true,
"CustomerManagedKey": true
},
"NetworkSecurityGroup": {
"ProvisioningState": true,
"OverlyPermissiveRules": true
},
"NetworkVirtualAppliance": {
"Status": true
},
"NetworkWatcher": {
"ProvisioningState": true,
"FlowLogEnabled": true
},
"PrivateDnsZone": {
"ProvisioningState": true,
"VirtualNetworkLinks": true
},
"PrivateEndpoint": {
"ProvisioningState": true,
"ConnectionStatus": true
},
"PublicIpAddress": {
"ProvisioningState": true,
"Unattached": true
},
"RecoveryServicesVault": {
"ProvisioningState": true,
"PrivateEndpointStateForBackup": true
"PrivateEndpointStateForBackup": true,
"SoftDeleteEnabled": true,
"ImmutabilityEnabled": true,
"PublicNetworkAccess": true
},
"RouteTable": {
"ProvisioningState": true
},
"SiteRecovery": {
"ReplicationHealth": true,
"FailoverHealth": true
},
"StorageAccount": {
"ProvisioningState": true,
"StorageAccountKeyAccess": true,
Expand All @@ -128,6 +224,11 @@
"PublicNetworkAccess": true,
"MinimumTlsVersion": true
},
"SiteRecovery": {
"ReplicationHealth": true,
"FailoverHealth": true,
"NoTestFailover": true
},
"VirtualMachine": {
"Status": true,
"DiskEncryption": true,
Expand All @@ -138,12 +239,12 @@
"ProvisioningState": true,
"DnsServers": true
},
"DesktopVirtualization": {
"SessionHostHealth": true,
"DrainMode": true,
"RegistrationExpiry": true,
"NoSessionHosts": true,
"HostPoolCapacity": true
"VirtualNetworkGateway": {
"ProvisioningState": true,
"ConnectionStatus": true
},
"VmScaleSet": {
"ProvisioningState": true
}
}
}
12 changes: 8 additions & 4 deletions AsBuiltReport.Microsoft.Azure/AsBuiltReport.Microsoft.Azure.psd1
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
RootModule = 'AsBuiltReport.Microsoft.Azure.psm1'

# Version number of this module.
ModuleVersion = '0.2.0'
ModuleVersion = '0.3.0'

# Supported PSEditions
CompatiblePSEditions = @('Desktop', 'Core')
Expand Down Expand Up @@ -54,7 +54,11 @@ PowerShellVersion = '5.1'
RequiredModules = @(
@{
ModuleName = 'AsBuiltReport.Core';
ModuleVersion = '1.6.1'
ModuleVersion = '1.6.4'
},
@{
ModuleName = 'AsBuiltReport.Diagram';
ModuleVersion = '1.0.8'
}
)

Expand Down Expand Up @@ -109,7 +113,7 @@ PrivateData = @{
ProjectUri = 'https://github.com/AsBuiltReport/AsBuiltReport.Microsoft.Azure'

# A URL to an icon representing this module.
IconUri = 'https://raw.githubusercontent.com/AsBuiltReport/.github/main/profile/images/AsBuiltReport.png'
# IconUri = 'https://raw.githubusercontent.com/AsBuiltReport/.github/main/profile/images/AsBuiltReport.png'

# ReleaseNotes of this module
ReleaseNotes = 'https://raw.githubusercontent.com/AsBuiltReport/AsBuiltReport.Microsoft.Azure/master/CHANGELOG.md'
Expand All @@ -121,7 +125,7 @@ PrivateData = @{
# RequireLicenseAcceptance = $false

# External dependent modules of this module
ExternalModuleDependencies = @('AsBuiltReport.Core', 'Az')
ExternalModuleDependencies = @('Az')

} # End of PSData hashtable

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
# Get public and private function definition files and dot source them
$Public = @(Get-ChildItem -Path $PSScriptRoot\Src\Public\*.ps1 -ErrorAction SilentlyContinue)
$Private = @(Get-ChildItem -Path $PSScriptRoot\Src\Private\*.ps1 -ErrorAction SilentlyContinue)
$Diagram = @(Get-ChildItem -Path $PSScriptRoot\Src\Private\Diagram\*.ps1 -ErrorAction SilentlyContinue)
$Report = @(Get-ChildItem -Path $PSScriptRoot\Src\Private\Report\*.ps1 -ErrorAction SilentlyContinue)

foreach ($Module in @($Public + $Private)) {

foreach ($Module in @($Public + $Diagram + $Report)) {
try {
. $Module.FullName
} catch {
Expand All @@ -11,4 +13,5 @@ foreach ($Module in @($Public + $Private)) {
}

Export-ModuleMember -Function $Public.BaseName
Export-ModuleMember -Function $Private.BaseName
Export-ModuleMember -Function $Diagram.BaseName
Export-ModuleMember -Function $Report.BaseName
Binary file added AsBuiltReport.Microsoft.Azure/Icons/blank.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading