pwsh/dev/functions/buildMD.ps1 (140 lines of code) (raw):
function buildMD {
Write-Host 'Building Markdown'
$startBuildMD = Get-Date
$script:arrayMgs = [System.Collections.ArrayList]@()
$script:arraySubs = [System.Collections.ArrayList]@()
$script:arraySubsOos = [System.Collections.ArrayList]@()
$markdown = $null
$script:markdownhierarchyMgs = $null
$script:markdownhierarchySubs = $null
$script:markdownTable = $null
if ($azAPICallConf['htParameters'].onAzureDevOpsOrGitHubActions -eq $true) {
if ($azAPICallConf['htParameters'].onAzureDevOps -eq $true) {
$markdown += @"
# Azure Governance Visualizer - Management Group Hierarchy
## HierarchyMap (Mermaid)
::: mermaid
graph $($MermaidDirection.ToUpper());`n
"@
}
if ($azAPICallConf['htParameters'].onGitHubActions -eq $true) {
$marks = '```'
$markdown += @"
# Azure Governance Visualizer - Management Group Hierarchy
## HierarchyMap (Mermaid)
$($marks)mermaid
graph $($MermaidDirection.ToUpper());`n
"@
}
}
else {
$markdown += @"
# Azure Governance Visualizer - Management Group Hierarchy
$executionDateTimeInternationalReadable ($currentTimeZone)
## HierarchyMap (Mermaid)
::: mermaid
graph $($MermaidDirection.ToUpper());`n
"@
}
processDiagramMermaid
$markdown += @"
$markdownhierarchyMgs
$markdownhierarchySubs
classDef mgr fill:#D9F0FF,stroke:#56595E,color:#000000,stroke-width:1px;
classDef subs fill:#EEEEEE,stroke:#56595E,color:#000000,stroke-width:1px;
"@
if (($arraySubsOos).count -gt 0) {
$markdown += @'
classDef subsoos fill:#FFCBC7,stroke:#56595E,color:#000000,stroke-width:1px;
'@
}
$markdown += @"
classDef mgrprnts fill:#FFFFFF,stroke:#56595E,color:#000000,stroke-width:1px;
class $(($arrayMgs | Sort-Object -Unique) -join ',') mgr;
class $(($arraySubs | Sort-Object -Unique) -join ',') subs;
"@
if (($arraySubsOos).count -gt 0) {
$markdown += @"
class $(($arraySubsOos | Sort-Object -Unique) -join ',') subsoos;
"@
}
if ($azAPICallConf['htParameters'].onAzureDevOpsOrGitHubActions -eq $true) {
if ($azAPICallConf['htParameters'].onAzureDevOps -eq $true) {
$markdown += @"
class $mermaidprnts mgrprnts;
:::
"@
}
if ($azAPICallConf['htParameters'].onGitHubActions -eq $true) {
`
$marks = '```'
$markdown += @"
class $mermaidprnts mgrprnts;
$marks
"@
}
}
else {
$markdown += @"
class $mermaidprnts mgrprnts;
:::
"@
}
$markdown += @"
## Summary
`n
"@
if (-not $HierarchyMapOnly) {
$markdown += @"
Total Management Groups: $totalMgCount (depth $mgDepth)\`n
"@
if (($arraySubsOos).count -gt 0) {
$markdown += @"
Total Subscriptions: $totalSubIncludedAndExcludedCount (<font color="#FF0000">$totalSubOutOfScopeCount</font> out-of-scope)\`n
"@
}
else {
$markdown += @"
Total Subscriptions: $totalSubIncludedAndExcludedCount\`n
"@
}
$markdown += @"
Total Custom Policy definitions: $tenantCustomPoliciesCount\
Total Custom PolicySet definitions: $tenantCustompolicySetsCount\
Total Policy assignments: $($totalPolicyAssignmentsCount)\
Total Policy assignments ManagementGroups $($totalPolicyAssignmentsCountMg)\
Total Policy assignments Subscriptions $($totalPolicyAssignmentsCountSub)\
Total Policy assignments ResourceGroups: $($totalPolicyAssignmentsCountRg)\
Total Custom Role definitions: $totalRoleDefinitionsCustomCount\
Total Role assignments: $totalRoleAssignmentsCount\
Total Role assignments (Tenant): $totalRoleAssignmentsCountTen\
Total Role assignments (ManagementGroups): $totalRoleAssignmentsCountMG\
Total Role assignments (Subscriptions): $totalRoleAssignmentsCountSub\
Total Role assignments (ResourceGroups and Resources): $totalRoleAssignmentsResourceGroupsAndResourcesCount\
Total Blueprint definitions: $totalBlueprintDefinitionsCount\
Total Blueprint assignments: $totalBlueprintAssignmentsCount\
Total Resources: $totalResourceCount\
Total Resource Types: $totalResourceTypesCount
"@
}
if ($HierarchyMapOnly) {
$mgsDetails = ($optimizedTableForPathQueryMg | Select-Object Level, MgId -Unique)
$mgDepth = ($mgsDetails.Level | Measure-Object -Maximum).Maximum
$totalMgCount = ($mgsDetails).count
$totalSubCount = ($optimizedTableForPathQuerySub).count
$markdown += @"
Total Management Groups: $totalMgCount (depth $mgDepth)\
Total Subscriptions: $totalSubCount
"@
}
$markdown += @"
`n
## Hierarchy Table
| **MgLevel** | **MgName** | **MgId** | **MgParentName** | **MgParentId** | **SubName** | **SubId** |
|-------------|-------------|-------------|-------------|-------------|-------------|-------------|
$markdownTable
"@
$markdown | Set-Content -Path "$($outputPath)$($DirectorySeparatorChar)$($fileName).md" -Encoding utf8 -Force
$endBuildMD = Get-Date
Write-Host "Building Markdown total duration: $((New-TimeSpan -Start $startBuildMD -End $endBuildMD).TotalMinutes) minutes ($((New-TimeSpan -Start $startBuildMD -End $endBuildMD).TotalSeconds) seconds)"
}