Modules/Internal/01-Definitions.ps1

function Get-RangerManifestSchemaVersion {
    '1.1.0-draft'
}

function Get-RangerCollectorDefinitions {
    [ordered]@{
        'topology-cluster' = [pscustomobject][ordered]@{
            Id                = 'topology-cluster'
            FunctionName      = 'Invoke-RangerTopologyClusterCollector'
            Class             = 'core'
            Covers            = @('topology', 'cluster')
            DomainPayloads    = @('clusterNode')
            RequiredTargets   = @('cluster')
            RequiredCredential = 'cluster'
        }
        'hardware' = [pscustomobject][ordered]@{
            Id                = 'hardware'
            FunctionName      = 'Invoke-RangerHardwareCollector'
            Class             = 'optional'
            Covers            = @('hardware', 'oem-integration')
            DomainPayloads    = @('hardware', 'oemIntegration')
            RequiredTargets   = @('bmc')
            RequiredCredential = 'bmc'
        }
        'storage-networking' = [pscustomobject][ordered]@{
            Id                = 'storage-networking'
            FunctionName      = 'Invoke-RangerStorageNetworkingCollector'
            Class             = 'core'
            Covers            = @('storage', 'networking')
            DomainPayloads    = @('storage', 'networking')
            RequiredTargets   = @('cluster')
            RequiredCredential = 'cluster'
        }
        'workload-identity-azure' = [pscustomobject][ordered]@{
            Id                = 'workload-identity-azure'
            FunctionName      = 'Invoke-RangerWorkloadIdentityAzureCollector'
            Class             = 'core'
            Covers            = @('virtual-machines', 'identity-security', 'azure-integration')
            DomainPayloads    = @('virtualMachines', 'identitySecurity', 'azureIntegration')
            RequiredTargets   = @('cluster')
            RequiredCredential = 'cluster'
        }
        'monitoring-observability' = [pscustomobject][ordered]@{
            Id                = 'monitoring-observability'
            FunctionName      = 'Invoke-RangerMonitoringCollector'
            Class             = 'core'
            Covers            = @('monitoring', 'observability')
            DomainPayloads    = @('monitoring')
            RequiredTargets   = @('azure')
            RequiredCredential = 'azure'
        }
        'management-performance' = [pscustomobject][ordered]@{
            Id                = 'management-performance'
            FunctionName      = 'Invoke-RangerManagementPerformanceCollector'
            Class             = 'core'
            Covers            = @('management-tools', 'performance')
            DomainPayloads    = @('managementTools', 'performance')
            RequiredTargets   = @('cluster')
            RequiredCredential = 'cluster'
        }
    }
}

function Get-RangerDomainAliases {
    [ordered]@{
        'cluster'              = 'cluster'
        'topology'             = 'topology'
        'hardware'             = 'hardware'
        'oem'                  = 'oem-integration'
        'oem-integration'      = 'oem-integration'
        'storage'              = 'storage'
        'network'              = 'networking'
        'networking'           = 'networking'
        'virtual-machines'     = 'virtual-machines'
        'vms'                  = 'virtual-machines'
        'identity'             = 'identity-security'
        'identity-security'    = 'identity-security'
        'azure'                = 'azure-integration'
        'azure-integration'    = 'azure-integration'
        'monitoring'           = 'monitoring'
        'observability'        = 'observability'
        'management-tools'     = 'management-tools'
        'performance'          = 'performance'
    }
}

function Get-RangerReservedDomainPayloads {
    [ordered]@{
        clusterNode = [ordered]@{
            cluster       = [ordered]@{}
            nodes         = @()
            quorum        = [ordered]@{}
            faultDomains  = @()
            networks      = @()
            roles         = @()
            csvSummary    = [ordered]@{}
            updatePosture = [ordered]@{}
            eventSummary  = @()
            healthSummary = [ordered]@{}
            nodeSummary   = [ordered]@{}
            faultDomainSummary = [ordered]@{}
            networkSummary = [ordered]@{}
        }
        hardware = [ordered]@{
            nodes   = @()
            summary = [ordered]@{}
            firmware = [ordered]@{}
            security = [ordered]@{}
        }
        storage = [ordered]@{
            pools         = @()
            physicalDisks = @()
            virtualDisks  = @()
            volumes       = @()
            csvs          = @()
            qos           = @()
            replica       = @()
            summary       = [ordered]@{}
        }
        networking = [ordered]@{
            nodes           = @()
            clusterNetworks = @()
            adapters        = @()
            vSwitches       = @()
            hostVirtualNics = @()
            intents         = @()
            dns             = @()
            proxy           = @()
            firewall        = @()
            sdn             = @()
            switchConfig    = @()
            firewallConfig  = @()
            summary         = [ordered]@{}
        }
        virtualMachines = [ordered]@{
            inventory       = @()
            placement       = @()
            workloadFamilies = @()
            replication     = @()
            summary         = [ordered]@{}
        }
        identitySecurity = [ordered]@{
            nodes           = @()
            certificates    = @()
            posture         = @()
            localAdmins     = @()
            auditPolicy     = @()
            activeDirectory = @()
            keyVault        = @()
            summary         = [ordered]@{}
        }
        azureIntegration = [ordered]@{
            context           = [ordered]@{}
            resources         = @()
            services          = @()
            policy            = @()
            backup            = @()
            update            = @()
            cost              = @()
            resourceBridge    = @()
            customLocations   = @()
            extensions        = @()
            arcMachines       = @()
            siteRecovery      = @()
            resourceSummary   = [ordered]@{}
            resourceLocations = @()
            policySummary     = [ordered]@{}
            auth              = [ordered]@{}
        }
        monitoring = [ordered]@{
            telemetry = @()
            ama       = @()
            dcr       = @()
            dce       = @()
            insights  = @()
            alerts    = @()
            health    = @()
            updateManager = @()
            summary   = [ordered]@{}
        }
        managementTools = [ordered]@{
            tools  = @()
            agents = @()
            summary = [ordered]@{}
        }
        performance = [ordered]@{
            nodes      = @()
            compute    = @()
            storage    = @()
            networking = @()
            outliers   = @()
            events     = @()
            summary    = [ordered]@{}
        }
        oemIntegration = [ordered]@{
            endpoints         = @()
            managementPosture = @()
        }
    }
}

function Get-RangerReportTierDefinitions {
    @(
        [pscustomobject][ordered]@{ Name = 'executive';  Title = 'Executive Summary'; Audience = 'executive' }
        [pscustomobject][ordered]@{ Name = 'management'; Title = 'Management Summary'; Audience = 'management' }
        [pscustomobject][ordered]@{ Name = 'technical';  Title = 'Technical Deep Dive'; Audience = 'technical' }
    )
}

function Get-RangerDiagramDefinitions {
    @(
        [pscustomobject][ordered]@{ Name = 'physical-architecture'; Title = 'Physical Architecture'; Tier = 'baseline'; Required = @('clusterNode'); Audience = @('executive', 'management', 'technical') }
        [pscustomobject][ordered]@{ Name = 'logical-network-topology'; Title = 'Logical Network Topology'; Tier = 'baseline'; Required = @('networking'); Audience = @('management', 'technical') }
        [pscustomobject][ordered]@{ Name = 'storage-architecture'; Title = 'Storage Architecture'; Tier = 'baseline'; Required = @('storage'); Audience = @('management', 'technical') }
        [pscustomobject][ordered]@{ Name = 'vm-placement-map'; Title = 'VM Placement Map'; Tier = 'baseline'; Required = @('virtualMachines'); Audience = @('management', 'technical') }
        [pscustomobject][ordered]@{ Name = 'azure-arc-integration'; Title = 'Azure Arc Integration'; Tier = 'baseline'; Required = @('azureIntegration'); Audience = @('executive', 'management', 'technical') }
        [pscustomobject][ordered]@{ Name = 'workload-services-map'; Title = 'Workload and Services Map'; Tier = 'baseline'; Required = @('virtualMachines', 'azureIntegration'); Audience = @('management', 'technical') }
        [pscustomobject][ordered]@{ Name = 'topology-variant-map'; Title = 'Topology and Deployment Variant Map'; Tier = 'extended'; Required = @('clusterNode'); Audience = @('management', 'technical') }
        [pscustomobject][ordered]@{ Name = 'identity-secret-flow'; Title = 'Identity, Trust, and Secret Flow'; Tier = 'extended'; Required = @('identitySecurity', 'azureIntegration'); Audience = @('management', 'technical') }
        [pscustomobject][ordered]@{ Name = 'monitoring-telemetry-flow'; Title = 'Monitoring, Telemetry, and Alerting Flow'; Tier = 'extended'; Required = @('monitoring'); Audience = @('executive', 'management', 'technical') }
        [pscustomobject][ordered]@{ Name = 'connectivity-dependency-map'; Title = 'Connectivity, Firewall, and Dependency Map'; Tier = 'extended'; Required = @('networking', 'azureIntegration'); Audience = @('management', 'technical') }
        [pscustomobject][ordered]@{ Name = 'identity-access-surface'; Title = 'Identity and Access Surface Map'; Tier = 'extended'; Required = @('identitySecurity'); Audience = @('management', 'technical') }
        [pscustomobject][ordered]@{ Name = 'monitoring-health-heatmap'; Title = 'Monitoring and Health Heatmap'; Tier = 'extended'; Required = @('monitoring', 'clusterNode'); Audience = @('executive', 'management') }
        [pscustomobject][ordered]@{ Name = 'oem-firmware-posture'; Title = 'OEM Hardware and Firmware Posture'; Tier = 'extended'; Required = @('hardware', 'oemIntegration'); Audience = @('management', 'technical') }
        [pscustomobject][ordered]@{ Name = 'backup-recovery-map'; Title = 'Backup, Recovery, and Continuity Map'; Tier = 'extended'; Required = @('azureIntegration'); Audience = @('executive', 'management', 'technical') }
        [pscustomobject][ordered]@{ Name = 'management-plane-tooling'; Title = 'Management Plane and Tooling Map'; Tier = 'extended'; Required = @('managementTools'); Audience = @('executive', 'management', 'technical') }
        [pscustomobject][ordered]@{ Name = 'workload-family-placement'; Title = 'Workload Family Placement Map'; Tier = 'extended'; Required = @('virtualMachines'); Audience = @('management', 'technical') }
        [pscustomobject][ordered]@{ Name = 'fabric-map'; Title = 'Rack-Aware Fabric Map'; Tier = 'extended'; Required = @('clusterNode', 'networking'); Audience = @('management', 'technical') }
        [pscustomobject][ordered]@{ Name = 'disconnected-control-plane'; Title = 'Disconnected Operations Control Plane Map'; Tier = 'extended'; Required = @('azureIntegration', 'identitySecurity'); Audience = @('management', 'technical') }
    )
}