SLA Domain APIs

Overview of GraphQL APIs for managing the creating, updating, querying and deleting of SLA Domains as well as assigning an SLA Domain to a snapshot.

The examples provided will need to be updated with the correct variables for the SLA Domain which is being managed. Examples variables may include SLA ID, SLA Name, or frequency.

Create SLA Domain

Used to create an SLA Domain. Note that the values of variables provided here are for illustrative purposes only.

MUTATION='{
"query": "mutation CreateSlaMutation($createGlobalSlaInput: CreateGlobalSlaInput!) {
"query": "  createGlobalSla(input: $createGlobalSlaInput) {
"query": "    id
"query": "    __typename
"query": "  }
"query": "}",
"query": ""variables": {
"query": "  "createGlobalSlaInput": {
"query": "    "name": "Your Name",
"query": "    "description": "Your Description",
"query": "    "snapshotSchedule": {
"query": "      "daily": {
"query": "        "basicSchedule": {
"query": "          "frequency": 1,
"query": "          "retention": 7,
"query": "          "retentionUnit": "DAYS"
"query": "        }
"query": "      },
"query": "      "monthly": {
"query": "        "basicSchedule": {
"query": "          "frequency": 1,
"query": "          "retention": 1,
"query": "          "retentionUnit": "MONTHS"
"query": "        },
"query": "        "dayOfMonth": "LAST_DAY"
"query": "      }
"query": "    },
"query": "    "archivalSpecs": null,
"query": "    "localRetentionLimit": null,
"query": "    "backupWindows": [],
"query": "    "firstFullBackupWindows": [],
"query": "    "objectTypes": [
"query": "      "VSPHERE_OBJECT_TYPE"
"query": "    ],
"query": "    "objectSpecificConfigsInput": {
"query": "      "awsRdsConfigInput": null,
"query": "      "awsNativeS3SlaConfigInput": null,
"query": "      "sapHanaConfigInput": null,
"query": "      "db2ConfigInput": null,
"query": "      "oracleConfigInput": null,
"query": "      "mssqlConfigInput": null,
"query": "      "mongoConfigInput": null,
"query": "      "vmwareVmConfigInput": null,
"query": "      "azureSqlDatabaseDbConfigInput": null,
"query": "      "azureSqlManagedInstanceDbConfigInput": null
"query": "    },
"query": "    "replicationSpecsV2": null,
"query": "    "isRetentionLockedSla": false
"query": "  }
"query": "}
}'

curl -X POST https://$account.my.rubrik.com/api/graphql \
--header "authorization: Bearer $access_token" \
--header "content-type: application/json" \
--data "$(echo $MUTATION)"

Delete SLA Domain

MUTATION='{
"query": "mutation DeleteSlaMutation($id: UUID!, $userNote: String) {
"query": "  deleteGlobalSla(id: $id, userNote: $userNote) {
"query": "    success
"query": "    __typename
"query": "  }
"query": "}",
"query": ""variables": {
"query": "  "id": "SLA_ID",
"query": "  "userNote": ""
"query": "}
}'

curl -X POST https://$account.my.rubrik.com/api/graphql \
--header "authorization: Bearer $access_token" \
--header "content-type: application/json" \
--data "$(echo $MUTATION)"

Update SLA Domain

MUTATION='{
"query": "mutation UpdateSlaMutation($updateGlobalSlaInput: UpdateGlobalSlaInput!) {
"query": "  updateGlobalSla(input: $updateGlobalSlaInput) {
"query": "    id
"query": "    __typename
"query": "  }
"query": "}",
"query": ""variables": {
"query": "  "updateGlobalSlaInput": {
"query": "    "name": "Your SLA",
"query": "    "description": "Your Description",
"query": "    "snapshotSchedule": {
"query": "      "daily": {
"query": "        "basicSchedule": {
"query": "          "frequency": 2,
"query": "          "retention": 7,
"query": "          "retentionUnit": "DAYS"
"query": "        }
"query": "      },
"query": "      "monthly": {
"query": "        "basicSchedule": {
"query": "          "frequency": 1,
"query": "          "retention": 1,
"query": "          "retentionUnit": "MONTHS"
"query": "        },
"query": "        "dayOfMonth": "LAST_DAY"
"query": "      }
"query": "    },
"query": "    "archivalSpecs": null,
"query": "    "localRetentionLimit": null,
"query": "    "backupWindows": [],
"query": "    "firstFullBackupWindows": [],
"query": "    "objectTypes": [
"query": "      "VSPHERE_OBJECT_TYPE"
"query": "    ],
"query": "    "objectSpecificConfigsInput": {
"query": "      "awsRdsConfigInput": null,
"query": "      "awsNativeS3SlaConfigInput": null,
"query": "      "sapHanaConfigInput": null,
"query": "      "db2ConfigInput": null,
"query": "      "oracleConfigInput": null,
"query": "      "mssqlConfigInput": null,
"query": "      "mongoConfigInput": null,
"query": "      "vmwareVmConfigInput": null,
"query": "      "azureSqlDatabaseDbConfigInput": null,
"query": "      "azureSqlManagedInstanceDbConfigInput": null
"query": "    },
"query": "    "replicationSpecsV2": null,
"query": "    "isRetentionLockedSla": false,
"query": "    "retentionLockMode": "NO_MODE",
"query": "    "id": "f4251401-d359-4d63-bac0-28bcdf40d9f0",
"query": "    "userNote": "",
"query": "    "shouldApplyToExistingSnapshots": {
"query": "      "value": false
"query": "    },
"query": "    "shouldApplyToNonPolicySnapshots": {
"query": "      "value": false
"query": "    }
"query": "  }
"query": "}
}'

curl -X POST https://$account.my.rubrik.com/api/graphql \
--header "authorization: Bearer $access_token" \
--header "content-type: application/json" \
--data "$(echo $MUTATION)"

Pause SLA Domain

MUTATION='{
"query": "mutation PauseSLA($clusterId: [String!]!, $slaId: String!) {
"query": "  pauseSla(input: {clusterUuids: $clusterId, pauseSla: true, slaId: $slaId}) {
"query": "    success
"query": "    __typename
"query": "  }
"query": "}",
"query": ""variables": {
"query": "  "clusterId": "CLUSTER_ID",
"query": "  "slaId": "SLA_ID"
"query": "}
}'

curl -X POST https://$account.my.rubrik.com/api/graphql \
--header "authorization: Bearer $access_token" \
--header "content-type: application/json" \
--data "$(echo $MUTATION)"

Query Details of the SLA Domain

QUERY='{
"query": "query SLADomain{
"query": "  slaDomain (id: "SLA_ID") {
"query": "    id
"query": "    name
"query": "    version
"query": "    ...GlobalSlaReplyFragment
"query": "    ... on ClusterSlaDomain {
"query": "      cdmId
"query": "      ...ClusterSlaDomainFragment
"query": "      __typename
"query": "    }
"query": "    __typename
"query": "  }
"query": "  }
"query": "  fragment GlobalSlaReplyFragment on GlobalSlaReply {
"query": "    id
"query": "    description
"query": "    isRetentionLockedSla
"query": "    retentionLockMode
"query": "    baseFrequency {
"query": "      duration
"query": "      unit
"query": "      __typename
"query": "    }
"query": "    ownerOrg {
"query": "      id
"query": "      name
"query": "      __typename
"query": "    }
"query": "    backupWindows {
"query": "      durationInHours
"query": "      startTimeAttributes {
"query": "        hour
"query": "        minute
"query": "        __typename
"query": "      }
"query": "      __typename
"query": "    }
"query": "    firstFullBackupWindows {
"query": "      durationInHours
"query": "      startTimeAttributes {
"query": "        dayOfWeek {
"query": "          day
"query": "          __typename
"query": "        }
"query": "        hour
"query": "        minute
"query": "        __typename
"query": "      }
"query": "      __typename
"query": "    }
"query": "    snapshotSchedule {
"query": "      ...SnapshotSchedulesForSlaDomainFragment
"query": "      __typename
"query": "    }
"query": "    localRetentionLimit {
"query": "      duration
"query": "      unit
"query": "      __typename
"query": "    }
"query": "    archivalSpecs {
"query": "      threshold
"query": "      thresholdUnit
"query": "      frequencies
"query": "      archivalLocationToClusterMapping {
"query": "        cluster {
"query": "          id
"query": "          name
"query": "          __typename
"query": "        }
"query": "        location {
"query": "          id
"query": "          name
"query": "          targetType
"query": "          __typename
"query": "        }
"query": "        __typename
"query": "      }
"query": "      storageSetting {
"query": "        id
"query": "        name
"query": "        groupType
"query": "        targetType
"query": "        targets {
"query": "          id
"query": "          name
"query": "          cluster {
"query": "            id
"query": "            name
"query": "            __typename
"query": "          }
"query": "          __typename
"query": "        }
"query": "        __typename
"query": "      }
"query": "      archivalTieringSpec {
"query": "        coldStorageClass
"query": "        shouldTierExistingSnapshots
"query": "        minAccessibleDurationInSeconds
"query": "        __typename
"query": "      }
"query": "      __typename
"query": "    }
"query": "    replicationSpecsV2 {
"query": "      ...DetailedReplicationSpecsV2ForSlaDomainFragment
"query": "      __typename
"query": "    }
"query": "    objectTypes
"query": "    isDefault
"query": "    __typename
"query": "  }
"query": "
"query": "  fragment SnapshotSchedulesForSlaDomainFragment on SnapshotSchedule {
"query": "    minute {
"query": "      basicSchedule {
"query": "        frequency
"query": "        retention
"query": "        retentionUnit
"query": "        __typename
"query": "      }
"query": "      __typename
"query": "    }
"query": "    hourly {
"query": "      basicSchedule {
"query": "        frequency
"query": "        retention
"query": "        retentionUnit
"query": "        __typename
"query": "      }
"query": "      __typename
"query": "    }
"query": "    daily {
"query": "      basicSchedule {
"query": "        frequency
"query": "        retention
"query": "        retentionUnit
"query": "        __typename
"query": "      }
"query": "      __typename
"query": "    }
"query": "    weekly {
"query": "      basicSchedule {
"query": "        frequency
"query": "        retention
"query": "        retentionUnit
"query": "        __typename
"query": "      }
"query": "      dayOfWeek
"query": "      __typename
"query": "    }
"query": "    monthly {
"query": "      basicSchedule {
"query": "        frequency
"query": "        retention
"query": "        retentionUnit
"query": "        __typename
"query": "      }
"query": "      dayOfMonth
"query": "      __typename
"query": "    }
"query": "    quarterly {
"query": "      basicSchedule {
"query": "        frequency
"query": "        retention
"query": "        retentionUnit
"query": "        __typename
"query": "      }
"query": "      dayOfQuarter
"query": "      quarterStartMonth
"query": "      __typename
"query": "    }
"query": "    yearly {
"query": "      basicSchedule {
"query": "        frequency
"query": "        retention
"query": "        retentionUnit
"query": "        __typename
"query": "      }
"query": "      dayOfYear
"query": "      yearStartMonth
"query": "      __typename
"query": "    }
"query": "    __typename
"query": "  }
"query": "
"query": "fragment DetailedReplicationSpecsV2ForSlaDomainFragment on ReplicationSpecV2 {
"query": "  replicationLocalRetentionDuration {
"query": "    duration
"query": "    unit
"query": "    __typename
"query": "  }
"query": "  cascadingArchivalSpecs {
"query": "    archivalTieringSpec {
"query": "      coldStorageClass
"query": "      shouldTierExistingSnapshots
"query": "      minAccessibleDurationInSeconds
"query": "      isInstantTieringEnabled
"query": "      __typename
"query": "    }
"query": "    archivalLocation {
"query": "      id
"query": "      name
"query": "      targetType
"query": "      ... on RubrikManagedAwsTarget {
"query": "        immutabilitySettings {
"query": "          lockDurationDays
"query": "          __typename
"query": "        }
"query": "        __typename
"query": "      }
"query": "      ... on RubrikManagedAzureTarget {
"query": "        immutabilitySettings {
"query": "          lockDurationDays
"query": "          __typename
"query": "        }
"query": "        __typename
"query": "      }
"query": "      ... on CdmManagedAwsTarget {
"query": "        immutabilitySettings {
"query": "          lockDurationDays
"query": "          __typename
"query": "        }
"query": "        __typename
"query": "      }
"query": "      ... on CdmManagedAzureTarget {
"query": "        immutabilitySettings {
"query": "          lockDurationDays
"query": "          __typename
"query": "        }
"query": "        __typename
"query": "      }
"query": "      ... on RubrikManagedRcsTarget {
"query": "        immutabilityPeriodDays
"query": "        syncStatus
"query": "        tier
"query": "        __typename
"query": "      }
"query": "      ... on RubrikManagedS3CompatibleTarget {
"query": "        immutabilitySetting {
"query": "          bucketLockDurationDays
"query": "          __typename
"query": "        }
"query": "        __typename
"query": "      }
"query": "      __typename
"query": "    }
"query": "    frequency
"query": "    archivalThreshold {
"query": "      duration
"query": "      unit
"query": "      __typename
"query": "    }
"query": "    __typename
"query": "  }
"query": "  retentionDuration {
"query": "    duration
"query": "    unit
"query": "    __typename
"query": "  }
"query": "  cluster {
"query": "    id
"query": "    name
"query": "    version
"query": "    __typename
"query": "  }
"query": "  targetMapping {
"query": "    id
"query": "    name
"query": "    targets {
"query": "      id
"query": "      name
"query": "      cluster {
"query": "        id
"query": "        name
"query": "        __typename
"query": "      }
"query": "      __typename
"query": "    }
"query": "    __typename
"query": "  }
"query": "  awsTarget {
"query": "    accountId
"query": "    accountName
"query": "    region
"query": "    __typename
"query": "  }
"query": "  azureTarget {
"query": "    region
"query": "    __typename
"query": "  }
"query": "  __typename
"query": "}
"query": "
"query": "fragment ClusterSlaDomainFragment on ClusterSlaDomain {
"query": "  cluster {
"query": "    id
"query": "    name
"query": "    version
"query": "    __typename
"query": "  }
"query": "  ownerOrg {
"query": "    id
"query": "    name
"query": "    __typename
"query": "  }
"query": "  baseFrequency {
"query": "    duration
"query": "    unit
"query": "    __typename
"query": "  }
"query": "  backupWindows {
"query": "    durationInHours
"query": "    startTimeAttributes {
"query": "      hour
"query": "      minute
"query": "      __typename
"query": "    }
"query": "    __typename
"query": "  }
"query": "  firstFullBackupWindows {
"query": "    durationInHours
"query": "    startTimeAttributes {
"query": "      dayOfWeek {
"query": "        day
"query": "        __typename
"query": "      }
"query": "      hour
"query": "      minute
"query": "      __typename
"query": "    }
"query": "    __typename
"query": "  }
"query": "  snapshotSchedule {
"query": "    ...SnapshotSchedulesForSlaDomainFragment
"query": "    __typename
"query": "  }
"query": "  archivalSpec {
"query": "    archivalLocationName
"query": "    archivalLocationId
"query": "    threshold
"query": "    thresholdUnit
"query": "    __typename
"query": "  }
"query": "  archivalSpecs {
"query": "    archivalLocationName
"query": "    archivalLocationId
"query": "    threshold
"query": "    archivalTieringSpec {
"query": "      isInstantTieringEnabled
"query": "      minAccessibleDurationInSeconds
"query": "      coldStorageClass
"query": "      shouldTierExistingSnapshots
"query": "      __typename
"query": "    }
"query": "    thresholdUnit
"query": "    frequencies
"query": "    __typename
"query": "  }
"query": "  replicationSpecsV2 {
"query": "    ...DetailedReplicationSpecsV2ForSlaDomainFragment
"query": "    __typename
"query": "  }
"query": "  localRetentionLimit {
"query": "    duration
"query": "    unit
"query": "    __typename
"query": "  }
"query": "  isRetentionLockedSla
"query": "  retentionLockMode
"query": "  __typename
"query": "}"
}'

curl -X POST https://$account.my.rubrik.com/api/graphql \
--header "authorization: Bearer $access_token" \
--header "content-type: application/json" \
--data "$(echo $QUERY)"

Query SLA Domains

QUERY='{
"query": "query SLADomains {
"query": "  slaDomains {
"query": "    nodes {
"query": "      name
"query": "      id
"query": "      version
"query": "    }
"query": "  }
"query": "  __typename
"query": "}"
}'

curl -X POST https://$account.my.rubrik.com/api/graphql \
--header "authorization: Bearer $access_token" \
--header "content-type: application/json" \
--data "$(echo $QUERY)"

Assign SLA Domain

MUTATION='{
"query": "mutation assignSla($objectIds: [UUID!]! $slaId: UUID) {
"query": "  assignSla(input: {
"query": "    objectIds: $objectIds
"query": "    #slaDomainAssignType can be set to protectWithSlaId, noAssignment, doNotProtect
"query": "    slaDomainAssignType: protectWithSlaId
"query": "    slaOptionalId: $slaId
"query": "    #shouldApplyToExistingSnapshots: false
"query": "    #shouldApplyToNonPolicySnapshots: false
"query": "    # Snapshot retention can be set to RETAIN_SNAPSHOTS, EXPIRE_IMMEDIATELY, KEEP_FOREVER, NOT_APPLICABLE
"query": "    #existingSnapshotRetention: RETAIN_SNAPSHOTS
"query": "  }) {
"query": "    success
"query": "  }
"query": "}",
"query": ""variables": {
"query": "  "objectIds": ["00000000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000000"],
"query": "  "slaId": "00000000-0000-0000-0000-000000000000"
"query": "}
}'

curl -X POST https://$account.my.rubrik.com/api/graphql \
--header "authorization: Bearer $access_token" \
--header "content-type: application/json" \
--data "$(echo $MUTATION)"