Toolkit/Public/Get-RscCloudNativeTagRule.ps1

#Requires -Version 3
function Get-RscCloudNativeTagRule {
    <#
    .SYNOPSIS
    Retrieves cloud-native tag rules configured in Rubrik Security Cloud.

    .DESCRIPTION
    Returns tag-based auto-protection rules for cloud-native workloads. These rules
    automatically assign SLA Domains to cloud resources that match specified tags.
    The -ObjectType parameter is required to specify which cloud resource type
    to query (e.g., AWS EC2, Azure VM).

    .LINK
    Schema reference:
    https://rubrikinc.github.io/rubrik-api-documentation/schema/reference

    .PARAMETER AsQuery
    Return the query object instead of running the query.
    Preliminary read-only queries may still run to gather IDs or
    other data needed to build the main query.

    .EXAMPLE
    # Get all
    Get-RscCloudNativeTagRule

.PARAMETER Name
    Filter by name. Supports partial matching.

    .PARAMETER Sla
    An SLA Domain object to filter by. Pipe from Get-RscSla.

    .PARAMETER ObjectType
    The cloud-native object type to query tag rules for. This parameter is required.

    .EXAMPLE
    # Get all tag rules for AWS EC2 instances
    Get-RscCloudNativeTagRule -ObjectType AWS_EC2_INSTANCE

    .EXAMPLE
    # Get tag rules assigned to a specific SLA
    Get-RscSla -Name "Gold" | Get-RscCloudNativeTagRule -ObjectType AZURE_VM
    #>


    [CmdletBinding(
        DefaultParameterSetName = "Name"
    )]
    Param(
        [Parameter(
            Mandatory = $false,
            ParameterSetName = "Name"
        )]
        [String]$Name,
        [Parameter(
            Mandatory = $false,
            ValueFromPipeline = $true,
            ParameterSetName = "Name"
        )]
        [RubrikSecurityCloud.Types.GlobalSlaReply]$Sla,
        [Parameter(
            Mandatory = $true,
            ValueFromPipeline = $false,
            ParameterSetName = "Name"
        )]
        [RubrikSecurityCloud.Types.CloudNativeTagObjectType]$ObjectType,
        [Parameter(
            Mandatory = $false,
            ValueFromPipeline = $false,
            HelpMessage = "Return the query object instead of running the query"
        )][Switch]$AsQuery
    )
    
    Process {
            $query = New-RscQuery -Gql cloudNativeTagRules
            $query.field.tagRules = New-Object -TypeName RubrikSecurityCloud.Types.CloudNativeTagRule
            $query.field.tagRules[0].name = "FETCH"
            $query.field.tagRules[0].id = "FETCH"
            $query.field.tagRules[0].effectiveSla = New-Object -Typename RubrikSecurityCloud.Types.TagRuleEffectiveSla
            $query.field.tagRules[0].effectiveSla.name = "FETCH"
            $query.field.tagRules[0].effectiveSla.id = "FETCH"
            $query.field.tagRules[0].objectType = [RubrikSecurityCloud.Types.ManagedObjectType]::AWS_NATIVE_EC2_INSTANCE

            $query.var.filter = @()

            if ($Name) {
                $nameFilter = New-Object -TypeName RubrikSecurityCloud.Types.CloudNativeFilter 
                $nameFilter.Field = [RubrikSecurityCloud.Types.CloudNativeTagRuleFilterFields]::NAME
                $nameFilter.texts = $Name
                $query.var.filter += $nameFilter
            }
    
            if ($Sla) {
                $slaFilter = New-Object -TypeName RubrikSecurityCloud.Types.CloudNativeFilter
                $slaFilter.Field = [RubrikSecurityCloud.Types.CloudNativeTagRuleFilterFields]::SLA_DOMAIN
                $slaFilter.Texts = $Sla.id
                $query.var.filter += $slaFilter
            }

            $query.var.ObjectType += $ObjectType

            if ( $AsQuery ) { return $query }
            $result = Invoke-Rsc -Query $query
            $result.tagRules
    } 
}