Private/create-jsonReport.ps1
function Create-JsonReport { param ( [string]$outputpath, [object]$KubeData, [switch]$aks, [string]$SubscriptionId, [string]$ResourceGroup, [string]$ClusterName ) $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") $results = @{ metadata = @{ clusterName = $clusterName kubernetesVersion = $k8sVersion generatedAt = $generatedAt } checks = @{ "nodeConditions" = Show-NodeConditions -Json -KubeData $KubeData "nodeResources" = Show-NodeResourceUsage -Json -KubeData $KubeData "emptyNamespace" = Show-EmptyNamespaces -Json -KubeData $KubeData "resourceQuotas" = Check-ResourceQuotas -Json -KubeData $KubeData "namespaceLimitRanges" = Check-NamespaceLimitRanges -Json -KubeData $KubeData "daemonSetIssues" = Show-DaemonSetIssues -Json -KubeData $KubeData "HPA" = Check-HPAStatus -Json -KubeData $KubeData "missingResourceLimits" = Check-MissingResourceLimits -Json -KubeData $KubeData "PDB" = Check-PodDisruptionBudgets -Json -KubeData $KubeData "missingProbes" = Check-MissingHealthProbes -Json -KubeData $KubeData "podsRestart" = Show-PodsWithHighRestarts -Json -KubeData $KubeData "podLongRunning" = Show-LongRunningPods -Json -KubeData $KubeData "podFail" = Show-FailedPods -Json -KubeData $KubeData "podPending" = Show-PendingPods -Json -KubeData $KubeData "crashloop" = Show-CrashLoopBackOffPods -Json -KubeData $KubeData "leftoverDebug" = Show-LeftoverDebugPods -Json -KubeData $KubeData "stuckJobs" = Show-StuckJobs -Json -KubeData $KubeData "jobFail" = Show-FailedJobs -Json -KubeData $KubeData "servicesWithoutEndpoints" = Show-ServicesWithoutEndpoints -Json -KubeData $KubeData "publicServices" = Check-PubliclyAccessibleServices -Json -KubeData $KubeData "unmountedPV" = Show-UnusedPVCs -Json -KubeData $KubeData "rbacMisconfig" = Check-RBACMisconfigurations -Json -KubeData $KubeData "rbacOverexposure" = Check-RBACOverexposure -Json -KubeData $KubeData "orphanedRoles" = Check-OrphanedRoles -Json -KubeData $KubeData "orphanedServiceAccounts" = Check-OrphanedServiceAccounts -Json -KubeData $KubeData "orphanedConfigMaps" = Check-OrphanedConfigMaps -Json -KubeData $KubeData "orphanedSecrets" = Check-OrphanedSecrets -Json -KubeData $KubeData "podsRoot" = Check-PodsRunningAsRoot -Json -KubeData $KubeData "privilegedContainers" = Check-PrivilegedContainers -Json -KubeData $KubeData "hostPidNet" = Check-HostPidAndNetwork -Json -KubeData $KubeData "eventSummary" = Show-KubeEvents -Json -KubeData $KubeData "deploymentIssues" = Check-DeploymentIssues -Json -KubeData $KubeData "statefulSetIssues" = Check-StatefulSetIssues -Json -KubeData $KubeData "ingressHealth" = Check-IngressHealth -Json -KubeData $KubeData } } if ($aks -and $KubeData.AksCluster) { $results.metadata.aks = $KubeData.AksCluster $results.checks.AKSBestPractices = Invoke-AKSBestPractices -Json -KubeData $KubeData } $results.metadata.score = Get-ClusterHealthScore -Checks $results.checks $results | ConvertTo-Json -Depth 10 | Set-Content -Encoding UTF8 $OutputPath } |