Private/create-jsonReport.ps1
function Create-JsonReport { param ( [string]$OutputPath, [object]$KubeData, [switch]$ExcludeNamespaces, [switch]$aks, [string]$SubscriptionId, [string]$ResourceGroup, [string]$ClusterName ) # Get cluster metadata $clusterName = (kubectl config current-context) $versionInfo = kubectl version -o json | ConvertFrom-Json $k8sVersion = $versionInfo.serverVersion.gitVersion $generatedAt = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") # Initialize results structure $results = @{ metadata = @{ clusterName = $clusterName kubernetesVersion = $k8sVersion generatedAt = $generatedAt } checks = @{} } # Run YAML-based checks $yamlCheckResults = Invoke-yamlChecks -Json -KubeData $KubeData -ExcludeNamespaces:$ExcludeNamespaces # Flatten YAML checks into checks map $checksMap = @{} foreach ($check in $yamlCheckResults.Items) { if ($check.ID) { $checksMap[$check.ID] = $check } } # Handle AKS checks if -aks switch is provided if ($aks -and $KubeData.AksCluster) { # Add filtered AKS metadata $results.metadata.aks = @{ subscriptionId = $KubeData.AksCluster.subscriptionId resourceGroup = $KubeData.AksCluster.resourceGroup clusterName = $KubeData.AksCluster.clusterName # Add other relevant AKS metadata as needed } # Run AKS best practices checks try { $aksCheckResults = Invoke-AKSBestPractices -Json -KubeData $KubeData -SubscriptionId $SubscriptionId -ResourceGroup $ResourceGroup -ClusterName $ClusterName # Integrate AKS checks into checksMap if ($aksCheckResults -and $aksCheckResults.Items) { foreach ($aksCheck in $aksCheckResults.Items) { if ($aksCheck.ID) { $checksMap[$aksCheck.ID] = $aksCheck } } } else { Write-Warning "Invoke-AKSBestPractices returned no valid check results." $checksMap['AKSBestPractices'] = @{ ID = 'AKSBestPractices' Name = 'AKS Best Practices' Message = 'No AKS best practices checks returned.' Total = 0 Items = @() } } } catch { Write-Warning "Failed to run AKS best practices: $_" $checksMap['AKSBestPractices'] = @{ ID = 'AKSBestPractices' Name = 'AKS Best Practices' Message = "Error running AKS checks: $_" Total = 0 Items = @() } } } # Assign checks to results $results.checks = $checksMap # Calculate score from all checks $allChecks = $yamlCheckResults.Items if ($aks -and $aksCheckResults -and $aksCheckResults.Items) { $allChecks += $aksCheckResults.Items } $results.metadata.score = Get-ClusterHealthScore -Checks $allChecks # Write JSON $results | ConvertTo-Json -Depth 10 | Set-Content -Encoding UTF8 $OutputPath } |