Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
acdeb05
[WIP] v2.0.0 refactor
tpcarman Mar 5, 2026
3b083eb
Fix 'LinkedView' duplicate key error in TEXT format reports (#130)
tpcarman Mar 5, 2026
bad5239
Fix ESXi host licensing crash and null-MoRef errors on vCenter 8.0.2 …
tpcarman Mar 5, 2026
b3eee6f
Add I/O Device Identifiers subsection to VMHost Hardware report (#126)
tpcarman Mar 5, 2026
51bddf1
Fix null disk group crash in OSA vSAN clusters (#113)
tpcarman Mar 5, 2026
79d8355
Fix vCenter certificate section showing VMCA template defaults (#88)
tpcarman Mar 5, 2026
ccc6b7c
Update CHANGELOG.md
tpcarman Mar 5, 2026
31a23bd
Drop Windows PowerShell 5.1 (Desktop) support
tpcarman Mar 5, 2026
f74d8ea
Fix Dependabot config location
tpcarman Mar 5, 2026
693e53d
Update README.md
tpcarman Mar 5, 2026
8c2eae6
Add TPM attestation state and encryption recovery key reporting (#101)
tpcarman Mar 5, 2026
4179c5d
Remove misleading InfoLevel verbose messages from sub-section functions
tpcarman Mar 5, 2026
94cac1f
Fix PCI Drivers & Firmware section not reporting on vSphere 8
tpcarman Mar 5, 2026
bb6213a
Update CHANGELOG to reference issue #127
tpcarman Mar 5, 2026
699ac88
Update CHANGELOG to reference issue #111
tpcarman Mar 5, 2026
59ba5fb
Add Tags, Host Certificate, Syslog, vSAN Services, VDS LACP/NetFlow/N…
tpcarman Mar 13, 2026
b100de0
Add vCenter Server Backup Settings section
tpcarman Mar 13, 2026
fcdaca3
Add Certificate and Backup healthchecks; add Backup Settings section …
tpcarman Mar 13, 2026
5fc8453
Add vCenter summary tables, Content Libraries, ShowRoles/ShowAlarms/S…
tpcarman Mar 13, 2026
d3c1e9b
Remove blanklines
tpcarman Mar 14, 2026
dbcca1e
Update module manifest
tpcarman Mar 14, 2026
bc8be14
Fix Pester test reporter format mismatch
tpcarman Mar 14, 2026
68eba38
Fix Pester workflow: switch to JUnitXml output for dorny/test-reporter
tpcarman Mar 14, 2026
e485211
Rewrite Pester workflow based on AsBuiltReport.Microsoft.Azure template
tpcarman Mar 14, 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/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/new-asbuiltconfig),
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
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/change_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ body:
If you are unsure of what a specific requirement means, please follow the links to learn about it and understand why it is necessary before submitting.
options:
- label: >-
I have read [the documentation](https://www.asbuiltreport.com/user-guide/new-asbuiltconfig),
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 change request.
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 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/) document.
- [ ] I have read the [contributing](https://www.asbuiltreport.com/dev-guide/contributing/) documentation.
32 changes: 32 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Dependabot configuration for AsBuiltReport.VMware.vSphere
# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file

version: 2
updates:
# Monitor GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
labels:
- "dependencies"
- "github-actions"
commit-message:
prefix: "ci"
include: "scope"
open-pull-requests-limit: 5

# Monitor PowerShell modules (via manifest)
- package-ecosystem: "nuget"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
labels:
- "dependencies"
- "powershell"
commit-message:
prefix: "deps"
include: "scope"
open-pull-requests-limit: 5
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@v5
- 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
79 changes: 79 additions & 0 deletions .github/workflows/Pester.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: Pester Tests

on:
push:
branches:
- master
- dev
pull_request:
branches:
- master
- dev
workflow_dispatch:

jobs:
test:
name: Pester Tests - ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-latest, ubuntu-latest, macos-latest]

defaults:
run:
shell: pwsh

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up PowerShell Gallery
run: |
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted

- name: Install Pester
run: |
Install-Module -Name Pester -MinimumVersion 5.0.0 -Repository PSGallery -Force -AllowClobber -Scope CurrentUser

- name: Install PScribo
run: |
Install-Module -Name PScribo -MinimumVersion 0.11.1 -Repository PSGallery -Force -AllowClobber -Scope CurrentUser

- name: Install PSScriptAnalyzer
run: |
Install-Module -Name PSScriptAnalyzer -MinimumVersion 1.0.0 -Repository PSGallery -Force -AllowClobber -Scope CurrentUser

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

- name: Run Pester Tests
run: |
$CodeCoverageParam = @{}
$OutputFormatParam = @{ OutputFormat = 'NUnitXml' }

# Only enable code coverage for Windows
if ('${{ matrix.os }}' -eq 'windows-latest') {
$CodeCoverageParam = @{ CodeCoverage = $true }
}

.\Tests\Invoke-Tests.ps1 @CodeCoverageParam @OutputFormatParam

- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results-${{ matrix.os }}
path: Tests/testResults.xml
retention-days: 30

- name: Upload code coverage to Codecov
if: matrix.os == 'windows-latest'
uses: codecov/codecov-action@v5
with:
files: ./Tests/coverage.xml
flags: unit
name: codecov-${{ matrix.os }}
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
49 changes: 44 additions & 5 deletions .github/workflows/Release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ on:
types: [published]

jobs:
publish-to-gallery:
publish-to-psgallery:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
Expand All @@ -17,16 +17,28 @@ jobs:
shell: pwsh
run: |
Install-Module -Name AsBuiltReport.Core -Repository PSGallery -Force
- name: Set Prerelease string in manifest
if: ${{ github.event.release.prerelease }}
shell: pwsh
run: |
$tag = '${{ github.event.release.tag_name }}'
if ($tag -match '-(.+)$') {
$prerelease = $Matches[1]
Update-ModuleManifest `
-Path .\AsBuiltReport.VMware.vSphere\AsBuiltReport.VMware.vSphere.psd1 `
-Prerelease $prerelease
}
- name: Test Module Manifest
shell: pwsh
run: |
Test-ModuleManifest .\AsBuiltReport.VMware.vSphere.psd1
Test-ModuleManifest .\AsBuiltReport.VMware.vSphere\AsBuiltReport.VMware.vSphere.psd1
- name: Publish module to PowerShell Gallery
shell: pwsh
run: |
Publish-Module -Path ./ -NuGetApiKey ${{ secrets.PSGALLERY_API_KEY }} -Verbose
Publish-Module -Path .\AsBuiltReport.VMware.vSphere -NuGetApiKey ${{ secrets.PSGALLERY_API_KEY }} -Verbose
tweet:
needs: publish-to-gallery
needs: publish-to-psgallery
if: ${{ !github.event.release.prerelease }}
runs-on: ubuntu-latest
steps:
- uses: Eomm/why-don-t-you-tweet@v2
Expand All @@ -41,13 +53,40 @@ jobs:
TWITTER_CONSUMER_API_SECRET: ${{ secrets.TWITTER_CONSUMER_API_SECRET }}
TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }}
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
tweet-prerelease:
needs: publish-to-psgallery
if: ${{ github.event.release.prerelease }}
runs-on: ubuntu-latest
steps:
- uses: Eomm/why-don-t-you-tweet@v2
# We don't want to tweet if the repository is not a public one
if: ${{ !github.event.repository.private }}
with:
tweet-message: "[Pre-release] ${{ github.event.repository.name }} ${{ github.event.release.tag_name }} is now available for testing! Install with -AllowPrerelease ${{ github.event.release.html_url }} #VMware #vSphere #AsBuiltReport #vExpert"
env:
TWITTER_CONSUMER_API_KEY: ${{ secrets.TWITTER_CONSUMER_API_KEY }}
TWITTER_CONSUMER_API_SECRET: ${{ secrets.TWITTER_CONSUMER_API_SECRET }}
TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }}
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
bsky-post:
needs: publish-to-gallery
needs: publish-to-psgallery
if: ${{ !github.event.release.prerelease }}
runs-on: ubuntu-latest
steps:
- uses: zentered/bluesky-post-action@v0.2.0
with:
post: "[New Release] ${{ github.event.repository.name }} ${{ github.event.release.tag_name }}! Check out what's new! ${{ github.event.release.html_url }} #VMware #vSphere #AsBuiltReport #vExpert"
env:
BSKY_IDENTIFIER: ${{ secrets.BSKY_IDENTIFIER }}
BSKY_PASSWORD: ${{ secrets.BSKY_PASSWORD }}
bsky-post-prerelease:
needs: publish-to-psgallery
if: ${{ github.event.release.prerelease }}
runs-on: ubuntu-latest
steps:
- uses: zentered/bluesky-post-action@v0.2.0
with:
post: "[Pre-release] ${{ github.event.repository.name }} ${{ github.event.release.tag_name }} is now available for testing! Install with -AllowPrerelease ${{ github.event.release.html_url }} #VMware #vSphere #AsBuiltReport #vExpert"
env:
BSKY_IDENTIFIER: ${{ secrets.BSKY_IDENTIFIER }}
BSKY_PASSWORD: ${{ secrets.BSKY_PASSWORD }}
19 changes: 19 additions & 0 deletions .github/workflows/Stale.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: 'Close stale issues and PRs'
on:
schedule:
- cron: '30 1 * * *'

jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
stale-issue-message: 'This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.'
days-before-stale: 90
days-before-close: 7
exempt-pr-labels: 'help wanted,enhancement,security,pinned'
stale-pr-label: 'wontfix'
stale-issue-label: 'wontfix'
exempt-issue-labels: 'help wanted,enhancement,security,pinned'

1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.claude/
Binary file removed AsBuiltReport.VMware.vSphere.json
Binary file not shown.
100 changes: 100 additions & 0 deletions AsBuiltReport.VMware.vSphere/AsBuiltReport.VMware.vSphere.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
{
"Report": {
"Name": "VMware vSphere As Built Report",
"Version": "1.0",
"Status": "Released",
"Language": "en-US",
"ShowCoverPageImage": true,
"ShowTableOfContents": true,
"ShowHeaderFooter": true,
"ShowTableCaptions": true
},
"Options": {
"ShowLicenseKeys": false,
"ShowEncryptionKeys": false,
"ShowVMSnapshots": true,
"ShowRoles": true,
"ShowAlarms": true,
"ShowTags": true
},
"InfoLevel": {
"_comment_": "0 = Disabled, 1 = Enabled / Summary, 2 = Adv Summary, 3 = Detailed, 4 = Adv Detailed, 5 = Comprehensive",
"vCenter": 3,
"Cluster": 3,
"ResourcePool": 3,
"VMHost": 3,
"Network": 3,
"vSAN": 3,
"Datastore": 3,
"DSCluster": 3,
"VM": 2,
"VUM": 3
},
"HealthCheck": {
"vCenter": {
"Mail": true,
"Licensing": true,
"Alarms": true,
"Backup": true,
"Certificate": true,
"ContentLibrary": true
},
"Cluster": {
"HAEnabled": true,
"HAAdmissionControl": true,
"HostFailureResponse": true,
"HostMonitoring": true,
"DatastoreOnPDL": true,
"DatastoreOnAPD": true,
"APDTimeOut": true,
"vmMonitoring": true,
"DRSEnabled": true,
"DRSAutomationLevelFullyAuto": true,
"PredictiveDRS": false,
"DRSVMHostRules": true,
"DRSRules": true,
"vSANEnabled": false,
"EVCEnabled": true,
"VUMCompliance": true,
"LCMCompliance": true
},
"VMHost": {
"ConnectionState": true,
"HyperThreading": true,
"ScratchLocation": true,
"IPv6": true,
"UpTimeDays": true,
"Licensing": true,
"SSH": true,
"ESXiShell": true,
"NTP": true,
"StorageAdapter": true,
"NetworkAdapter": true,
"LockdownMode": true,
"VUMCompliance": true,
"TpmAttestation": true
},
"vSAN": {
"CapacityUtilization": true
},
"Datastore": {
"CapacityUtilization": true
},
"DSCluster": {
"CapacityUtilization": true,
"SDRSAutomationLevelFullyAuto": true
},
"VM": {
"PowerState": true,
"ConnectionState": true,
"CpuHotAdd": true,
"CpuHotRemove": true,
"MemoryHotAdd": true,
"ChangeBlockTracking": true,
"SpbmPolicyCompliance": true,
"VMToolsStatus": true,
"VMSnapshots": true,
"VUMCompliance": true
}
}
}
Loading
Loading