Repository: getkin/kin-openapi
Pull request #604 (2022-09-19 14:49:32)

fix: only inject default value for matched oneOf or anyOf
Signed-off-by: Nic <qianyong@api7.ai>

nic-6443: **This PR is an improvement for https://github.com/getkin/kin-openapi/pull/544, please take a look.** @fenollp 

Patch:
diff --git a/go.mod b/go.mod
index 50aba58..8d93cf7 100644
--- a/go.mod
+++ b/go.mod
@@ -6,6 +6,7 @@ require (
 	github.com/go-openapi/jsonpointer v0.19.5
 	github.com/gorilla/mux v1.8.0
 	github.com/invopop/yaml v0.1.0
+	github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826
 	github.com/stretchr/testify v1.5.1
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1
diff --git a/go.sum b/go.sum
index a123aaf..074de2a 100644
--- a/go.sum
+++ b/go.sum
@@ -17,6 +17,8 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8=
 github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
+github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
diff --git a/openapi3/loader.go b/openapi3/loader.go
index e9366dc..eb1ebbd 100644
--- a/openapi3/loader.go
+++ b/openapi3/loader.go
@@ -15,6 +15,8 @@ import (
 	"github.com/invopop/yaml"
 )
 
+var CircularReferenceError = "kin-openapi bug found: circular schema reference not handled"
+
 func foundUnresolvedRef(ref string) error {
 	return fmt.Errorf("found unresolved ref: %q", ref)
 }
@@ -197,7 +199,7 @@ func (loader *Loader) ResolveRefsIn(doc *T, location *url.URL) (err error) {
 		}
 	}
 	for _, component := range components.Schemas {
-		if err = loader.resolveSchemaRef(doc, component, location); err != nil {
+		if err = loader.resolveSchemaRef(doc, component, location, []string{}); err != nil {
 			return
 		}
 	}
@@ -480,7 +482,7 @@ func (loader *Loader) resolveHeaderRef(doc *T, component *HeaderRef, documentPat
 	}
 
 	if schema := value.Schema; schema != nil {
-		if err := loader.resolveSchemaRef(doc, schema, documentPath); err != nil {
+		if err := loader.resolveSchemaRef(doc, schema, documentPath, []string{}); err != nil {
 			return err
 		}
 	}
@@ -532,13 +534,13 @@ func (loader *Loader) resolveParameterRef(doc *T, component *ParameterRef, docum
 	}
 	for _, contentType := range value.Content {
 		if schema := contentType.Schema; schema != nil {
-			if err := loader.resolveSchemaRef(doc, schema, documentPath); err != nil {
+			if err := loader.resolveSchemaRef(doc, schema, documentPath, []string{}); err != nil {
 				return err
 			}
 		}
 	}
 	if schema := value.Schema; schema != nil {
-		if err := loader.resolveSchemaRef(doc, schema, documentPath); err != nil {
+		if err := loader.resolveSchemaRef(doc, schema, documentPath, []string{}); err != nil {
 			return err
 		}
 	}
@@ -592,7 +594,7 @@ func (loader *Loader) resolveRequestBodyRef(doc *T, component *RequestBodyRef, d
 			contentType.Examples[name] = example
 		}
 		if schema := contentType.Schema; schema != nil {
-			if err := loader.resolveSchemaRef(doc, schema, documentPath); err != nil {
+			if err := loader.resolveSchemaRef(doc, schema, documentPath, []string{}); err != nil {
 				return err
 			}
 		}
@@ -656,7 +658,7 @@ func (loader *Loader) resolveResponseRef(doc *T, component *ResponseRef, documen
 			contentType.Examples[name] = example
 		}
 		if schema := contentType.Schema; schema != nil {
-			if err := loader.resolveSchemaRef(doc, schema, documentPath); err != nil {
+			if err := loader.resolveSchemaRef(doc, schema, documentPath, []string{}); err != nil {
 				return err
 			}
 			contentType.Schema = schema
@@ -670,8 +672,12 @@ func (loader *Loader) resolveResponseRef(doc *T, component *ResponseRef, documen
 	return nil
 }
 
-func (loader *Loader) resolveSchemaRef(doc *T, component *SchemaRef, documentPath *url.URL) (err error) {
-	if component != nil && component.Value != nil {
+func (loader *Loader) resolveSchemaRef(doc *T, component *SchemaRef, documentPath *url.URL, visited []string) (err error) {
+	if component == nil {
+		return errors.New("invalid schema: value MUST be an object")
+	}
+
+	if component.Value != nil {
 		if loader.visitedSchema == nil {
 			loader.visitedSchema = make(map[*Schema]struct{})
 		}
@@ -681,9 +687,6 @@ func (loader *Loader) resolveSchemaRef(doc *T, component *SchemaRef, documentPat
 		loader.visitedSchema[component.Value] = struct{}{}
 	}
 
-	if component == nil {
-		return errors.New("invalid schema: value MUST be an object")
-	}
 	ref := component.Ref
 	if ref != "" {
 		if isSingleRefElement(ref) {
@@ -693,12 +696,18 @@ func (loader *Loader) resolveSchemaRef(doc *T, component *SchemaRef, documentPat
 			}
 			component.Value = &schema
 		} else {
+			if visitedLimit(visited, ref, 3) {
+				visited = append(visited, ref)
+				return fmt.Errorf("%s - %s", CircularReferenceError, strings.Join(visited, " -> "))
+			}
+			visited = append(visited, ref)
+
 			var resolved SchemaRef
 			componentPath, err := loader.resolveComponent(doc, ref, documentPath, &resolved)
 			if err != nil {
 				return err
 			}
-			if err := loader.resolveSchemaRef(doc, &resolved, componentPath); err != nil {
+			if err := loader.resolveSchemaRef(doc, &resolved, componentPath, visited); err != nil {
 				return err
 			}
 			component.Value = resolved.Value
@@ -713,37 +722,37 @@ func (loader *Loader) resolveSchemaRef(doc *T, component *SchemaRef, documentPat
 
 	// ResolveRefs referred schemas
 	if v := value.Items; v != nil {
-		if err := loader.resolveSchemaRef(doc, v, documentPath); err != nil {
+		if err := loader.resolveSchemaRef(doc, v, documentPath, visited); err != nil {
 			return err
 		}
 	}
 	for _, v := range value.Properties {
-		if err := loader.resolveSchemaRef(doc, v, documentPath); err != nil {
+		if err := loader.resolveSchemaRef(doc, v, documentPath, visited); err != nil {
 			return err
 		}
 	}
 	if v := value.AdditionalProperties; v != nil {
-		if err := loader.resolveSchemaRef(doc, v, documentPath); err != nil {
+		if err := loader.resolveSchemaRef(doc, v, documentPath, visited); err != nil {
 			return err
 		}
 	}
 	if v := value.Not; v != nil {
-		if err := loader.resolveSchemaRef(doc, v, documentPath); err != nil {
+		if err := loader.resolveSchemaRef(doc, v, documentPath, visited); err != nil {
 			return err
 		}
 	}
 	for _, v := range value.AllOf {
-		if err := loader.resolveSchemaRef(doc, v, documentPath); err != nil {
+		if err := loader.resolveSchemaRef(doc, v, documentPath, visited); err != nil {
 			return err
 		}
 	}
 	for _, v := range value.AnyOf {
-		if err := loader.resolveSchemaRef(doc, v, documentPath); err != nil {
+		if err := loader.resolveSchemaRef(doc, v, documentPath, visited); err != nil {
 			return err
 		}
 	}
 	for _, v := range value.OneOf {
-		if err := loader.resolveSchemaRef(doc, v, documentPath); err != nil {
+		if err := loader.resolveSchemaRef(doc, v, documentPath, visited); err != nil {
 			return err
 		}
 	}
@@ -1046,3 +1055,16 @@ func (loader *Loader) resolvePathItemRefContinued(doc *T, pathItem *PathItem, do
 func unescapeRefString(ref string) string {
 	return strings.Replace(strings.Replace(ref, "~1", "/", -1), "~0", "~", -1)
 }
+
+func visitedLimit(visited []string, ref string, limit int) bool {
+	visitedCount := 0
+	for _, v := range visited {
+		if v == ref {
+			visitedCount++
+			if visitedCount >= limit {
+				return true
+			}
+		}
+	}
+	return false
+}
diff --git a/openapi3/schema.go b/openapi3/schema.go
index ded97f0..295180f 100644
--- a/openapi3/schema.go
+++ b/openapi3/schema.go
@@ -13,6 +13,7 @@ import (
 	"unicode/utf16"
 
 	"github.com/go-openapi/jsonpointer"
+	"github.com/mohae/deepcopy"
 
 	"github.com/getkin/kin-openapi/jsoninfo"
 )
@@ -753,6 +754,12 @@ func (schema *Schema) validate(ctx context.Context, stack []*Schema) (err error)
 		}
 	}
 
+	if v := schema.Default; v != nil {
+		if err := schema.VisitJSON(v); err != nil {
+			return fmt.Errorf("invalid schema default: %w", err)
+		}
+	}
+
 	if x := schema.Example; x != nil && !validationOpts.ExamplesValidationDisabled {
 		if err := validateExampleValue(x, schema); err != nil {
 			return fmt.Errorf("invalid schema example: %w", err)
@@ -909,9 +916,17 @@ func (schema *Schema) visitSetOperations(settings *schemaValidationSettings, val
 			}
 		}
 
-		ok := 0
-		validationErrors := []error{}
-		for _, item := range v {
+		var (
+			ok               = 0
+			validationErrors = []error{}
+			matchedOneOfIdx  = 0
+			tempValue        = value
+		)
+		// make a deep copy to protect origin value from being injected default value that defined in mismatched oneOf schema
+		if settings.asreq || settings.asrep {
+			tempValue = deepcopy.Copy(value)
+		}
+		for idx, item := range v {
 			v := item.Value
 			if v == nil {
 				return foundUnresolvedRef(item.Ref)
@@ -921,11 +936,12 @@ func (schema *Schema) visitSetOperations(settings *schemaValidationSettings, val
 				continue
 			}
 
-			if err := v.visitJSON(settings, value); err != nil {
+			if err := v.visitJSON(settings, tempValue); err != nil {
 				validationErrors = append(validationErrors, err)
 				continue
 			}
 
+			matchedOneOfIdx = idx
 			ok++
 		}
 
@@ -956,17 +972,30 @@ func (schema *Schema) visitSetOperations(settings *schemaValidationSettings, val
 
 			return e
 		}
+
+		if settings.asreq || settings.asrep {
+			_ = v[matchedOneOfIdx].Value.visitJSON(settings, value)
+		}
 	}
 
 	if v := schema.AnyOf; len(v) > 0 {
-		ok := false
-		for _, item := range v {
+		var (
+			ok              = false
+			matchedAnyOfIdx = 0
+			tempValue       = value
+		)
+		// make a deep copy to protect origin value from being injected default value that defined in mismatched anyOf schema
+		if settings.asreq || settings.asrep {
+			tempValue = deepcopy.Copy(value)
+		}
+		for idx, item := range v {
 			v := item.Value
 			if v == nil {
 				return foundUnresolvedRef(item.Ref)
 			}
-			if err := v.visitJSON(settings, value); err == nil {
+			if err := v.visitJSON(settings, tempValue); err == nil {
 				ok = true
+				matchedAnyOfIdx = idx
 				break
 			}
 		}
@@ -980,6 +1009,8 @@ func (schema *Schema) visitSetOperations(settings *schemaValidationSettings, val
 				SchemaField: "anyOf",
 			}
 		}
+
+		_ = v[matchedAnyOfIdx].Value.visitJSON(settings, value)
 	}
 
 	for _, item := range schema.AllOf {
diff --git a/openapi3filter/middleware.go b/openapi3filter/middleware.go
index 3709faf..3bcb9db 100644
--- a/openapi3filter/middleware.go
+++ b/openapi3filter/middleware.go
@@ -16,6 +16,7 @@ type Validator struct {
 	errFunc ErrFunc
 	logFunc LogFunc
 	strict  bool
+	options Options
 }
 
 // ErrFunc handles errors that may occur during validation.
@@ -106,6 +107,13 @@ func Strict(strict bool) ValidatorOption {
 	}
 }
 
+// ValidationOptions sets request/response validation options on the validator.
+func ValidationOptions(options Options) ValidatorOption {
+	return func(v *Validator) {
+		v.options = options
+	}
+}
+
 // Middleware returns an http.Handler which wraps the given handler with
 // request and response validation.
 func (v *Validator) Middleware(h http.Handler) http.Handler {
@@ -120,6 +128,7 @@ func (v *Validator) Middleware(h http.Handler) http.Handler {
 			Request:    r,
 			PathParams: pathParams,
 			Route:      route,
+			Options:    &v.options,
 		}
 		if err = ValidateRequest(r.Context(), requestValidationInput); err != nil {
 			v.logFunc("invalid request", err)
@@ -141,6 +150,7 @@ func (v *Validator) Middleware(h http.Handler) http.Handler {
 			Status:                 wr.statusCode(),
 			Header:                 wr.Header(),
 			Body:                   ioutil.NopCloser(bytes.NewBuffer(wr.bodyContents())),
+			Options:                &v.options,
 		}); err != nil {
 			v.logFunc("invalid response", err)
 			if v.strict {


Test patch:
diff --git a/openapi3/issue136_test.go b/openapi3/issue136_test.go
new file mode 100644
index 0000000..36c8b85
--- /dev/null
+++ b/openapi3/issue136_test.go
@@ -0,0 +1,53 @@
+package openapi3
+
+import (
+	"testing"
+
+	"github.com/stretchr/testify/require"
+)
+
+func TestIssue136(t *testing.T) {
+	specf := func(dflt string) string {
+		return `
+openapi: 3.0.2
+info:
+  title: "Hello World REST APIs"
+  version: "1.0"
+paths: {}
+components:
+  schemas:
+    SomeSchema:
+      type: string
+      default: ` + dflt + `
+`
+	}
+
+	for _, testcase := range []struct {
+		dflt, err string
+	}{
+		{
+			dflt: `"foo"`,
+			err:  "",
+		},
+		{
+			dflt: `1`,
+			err:  "invalid components: invalid schema default: Field must be set to string or not be present",
+		},
+	} {
+		t.Run(testcase.dflt, func(t *testing.T) {
+			spec := specf(testcase.dflt)
+
+			sl := NewLoader()
+
+			doc, err := sl.LoadFromData([]byte(spec))
+			require.NoError(t, err)
+
+			err = doc.Validate(sl.Context)
+			if testcase.err == "" {
+				require.NoError(t, err)
+			} else {
+				require.Error(t, err, testcase.err)
+			}
+		})
+	}
+}
diff --git a/openapi3/issue542_test.go b/openapi3/issue542_test.go
new file mode 100644
index 0000000..7e0cb88
--- /dev/null
+++ b/openapi3/issue542_test.go
@@ -0,0 +1,15 @@
+package openapi3
+
+import (
+	"testing"
+
+	"github.com/stretchr/testify/require"
+)
+
+func TestIssue542(t *testing.T) {
+	sl := NewLoader()
+
+	_, err := sl.LoadFromFile("testdata/issue542.yml")
+	require.Error(t, err)
+	require.Contains(t, err.Error(), CircularReferenceError)
+}
diff --git a/openapi3/issue570_test.go b/openapi3/issue570_test.go
new file mode 100644
index 0000000..f3c527e
--- /dev/null
+++ b/openapi3/issue570_test.go
@@ -0,0 +1,15 @@
+package openapi3
+
+import (
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+	"github.com/stretchr/testify/require"
+)
+
+func TestIssue570(t *testing.T) {
+	loader := NewLoader()
+	_, err := loader.LoadFromFile("testdata/issue570.json")
+	require.Error(t, err)
+	assert.Contains(t, err.Error(), CircularReferenceError)
+}
diff --git a/openapi3/testdata/issue542.yml b/openapi3/testdata/issue542.yml
new file mode 100644
index 0000000..8877025
--- /dev/null
+++ b/openapi3/testdata/issue542.yml
@@ -0,0 +1,43 @@
+openapi: "3.0.0"
+info:
+  version: 1.0.0
+  title: Swagger Petstore
+  license:
+    name: MIT
+servers:
+  - url: http://petstore.swagger.io/v1
+paths: {}
+#paths:
+#  /pets:
+#    patch:
+#      requestBody:
+#        content:
+#          application/json:
+#            schema:
+#              oneOf:
+#                - $ref: '#/components/schemas/Cat'
+#                - $ref: '#/components/schemas/Kitten'
+#              discriminator:
+#                propertyName: pet_type
+#      responses:
+#        '200':
+#          description: Updated
+components:
+  schemas:
+    Cat:
+      anyOf:
+        - $ref: "#/components/schemas/Kitten"
+        - type: object
+    #          properties:
+    #            hunts:
+    #              type: boolean
+    #            age:
+    #              type: integer
+    #            offspring:
+    Kitten:
+      $ref: "#/components/schemas/Cat" #ko
+
+#      type: string                     #ok
+
+#      allOf:                               #ko
+#        - $ref: '#/components/schemas/Cat'
diff --git a/openapi3/testdata/issue570.json b/openapi3/testdata/issue570.json
new file mode 100644
index 0000000..ed3a750
--- /dev/null
+++ b/openapi3/testdata/issue570.json
@@ -0,0 +1,155 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "version": "internal",
+    "title": "Rubrik INTERNAL REST API",
+    "description": "Copyright © 2017-2021 Rubrik Inc.\n\n# Introduction\n\nThis is the INTERNAL REST API for Rubrik. We don't guarantee support or backward compatibility. Use at your own risk.\n\n# Changelog\n\n Revisions are listed with the most recent revision first.\n ### Changes to Internal API in Rubrik version 6.0\n ## Breaking changes:\n * Renamed field `node` to `nodeId` for object `NetworkInterface` used by\n   `GET /cluster/{id}/network_interface`.\n * Removed `compliance24HourStatus` in `DataSourceTableRequest` for\n   `POST /report/data_source/table`.\n   Use `complianceStatus`, `awaitingFirstFull`, and `snapshotRange`\n   as replacements.\n * Changed the sort_by attribute of `GET /vcd/vapp` to use\n   `VcdVappObjectSortAttribute`.\n   This attribute no longer uses the `VappCount` or `ConnectionStatus`\n   parameters from the previously used `VcdHierarchyObjectSortAttribute`.\n\n ## Feature additions/improvements:\n * Added the `GET /sla_domain/{id}/protected_objects` endpoint to return\n   objects explicitly protected by the SLA Domain with direct assignments.\n * Added new field `nodeName` for object `NetworkInterface` used by\n   `GET /cluster/{id}/network_interface`.\n * Added the `POST /cluster/{id}/remove_nodes` endpoint to trigger a bulk\n   node removal job.\n * Added new optional field `numChannels` to `ExportOracleDbConfig` object\n   specifying the number of channels used during Oracle clone or same-host\n   recovery.\n * Added new optional fields `forceFull` to the object\n   `HypervVirtualMachineSummary` used by `GET /hyperv/vm`. This field is also\n    used in `HypervVirtualMachineDetail` used by `GET /hyperv/vm/{id}` and\n    `PATCH /hyperv/vm/{id}`.\n * Added the `GET /cluster/{id}/bootstrap_config` endpoint to enable Rubrik CDM\n   to retrieve Rubrik cluster configuration information for the cluster nodes.\n * Added new optional field clusterUuid to the ClusterConfig object used\n   by `POST /cluster/{id}/bootstrap` and `POST /cluster/{id}/setupnetwork`.\n * Added new optional fields `dataGuardGroupId` and `dataGuardGroupName` to\n   the object `OracleHierarchyObjectSummary` used by\n   `GET /oracle/hierarchy/{id}`, `GET /oracle/hierarchy/{id}/children`, and\n   `GET /oracle/hierarchy/{id}/descendants`.\n * Added new optional fields `dataGuardGroupId` and `dataGuardGroupName` to\n   the object `OracleDbSummary` used by `GET /oracle/db`.\n * Added new optional fields `dataGuardGroupId` and `dataGuardGroupName` to\n   the object `OracleDbDetail` used by `GET /oracle/db/{id}` and\n   `PATCH /oracle/db/{id}`.\n * Added a new optional field `immutabilityLockSummary` to the object\n   `ArchivalLocationSummary` returned by GET `/archive/location` and\n   GET `/organization/{id}/archive/location`\n * Added new optional fields `dbUniqueName` and `databaseRole` to the object\n   `OracleHierarchyObjectSummary` used by `GET /oracle/hierarchy/{id}`,\n   `GET /oracle/hierarchy/{id}/children`, and\n   `GET /oracle/hierarchy/{id}/descendants`.\n * Added new required fields `dbUniqueName` and `databaseRole` to the object\n   `OracleDbSummary` used by `GET /oracle/db`.\n * Added a new required field `databaseRole` to the object `OracleDbDetail`\n   used by `GET /oracle/db/{id}` and `PATCH /oracle/db/{id}`.\n * Added a new optional field `subnet` to `ManagedVolumeUpdate`, used by \n   `PATCH /managed_volume/{id}` for updating the subnet to which the node IPs\n    will belong during an SLA MV backup.\n * Added new optional field `numChannels` to `RecoverOracleDbConfig`\n   and `MountOracleDbConfig` objects specifying the number of channels used\n   during Oracle recovery.\n * Added a new optional field `immutabilityLockSummary` to the object\n   `ObjectStoreLocationSummary` and `ObjectStoreUpdateDefinition` used by\n   `GET/POST /archive/object_store` and `GET/POST /archive/object_store/{id}`\n * Added a new optional field `errorMessage` to `SupportTunnelInfo` object \n   used by `GET /node/{id}/support_tunnel` and\n   `PATCH /node/{id}/support_tunnel`.\n * Added new optional field `cloudStorageLocation` to the `ClusterConfig`\n   object used by `POST /cluster/{id}/bootstrap`.\n * Added new enum `Disabled` to `DataLocationOwnershipStatus`\n   used by `ArchivalLocationSummary`\n * Added a new optional field `installTarball` to the `ClusterConfig`\n   object used by `POST /cluster/{id}/bootstrap`.\n * Added a new optional field `clusterInstall` to the `ClusterConfigStatus`\n   object used by `GET /cluster/{id}/bootstrap`.\n * Added the `GET /cluster/{id}/install` endpoint to return the current\n   status of Rubrik CDM install on a cluster.\n * Added the `POST /cluster/{id}/install` endpoint to allow Rubrik CDM \n   install on cluster nodes which are not bootstrapped.\n * Added the `GET /cluster/{id}/packages` endpoint to return the list of\n   Rubrik CDM packages available for installation.\n * Updated `request_id` parameter in the `GET /cluster/{id}/bootstrap` \n   endpoint, as not required.\n * Updated `request_id` parameter in the `GET /cluster/{id}/install` \n   endpoint, as not required.\n * Updated `BootstrappableNodeInfo` returned by `GET /cluster/{id}/discover`\n   endpoint to include the `version` field, to indicate the\n   Rubrik CDM software version.\n * Added a new optional field `isSetupNetworkOnly` to the `ClusterConfig`\n   object used by `POST /cluster/{id}/setupnetwork`.\n * Added the `POST /cluster/{id}/setupnetwork` endpoint to enable Rubrik CDM\n   to perform network setup on nodes that are not bootstrapped.\n * Added the `GET /cluster/{id}/setupnetwork` endpoint to return the current\n   status of setup network command on node or nodes.\n * Added a new optional field `hostname` to the `NodeStatus` object used by\n   `GET /cluster/{id}/node`, `GET /node`, `GET /node/stats`, `GET /node/{id}`,\n   and `GET /node/{id}/stats`.\n * Added new optional fields `usedFastVhdx` and `fileSizeInBytes` to the\n  `HypervVirtualMachineSnapshotSummary` returned by the API\n  `GET /hyperv/vm/{id}/snapshot`.\n * Added the `GET /archive/location/request/{id}` endpoint to query the status\n   of asynchronous archival location requests.\n\n ## Deprecation:\n * Deprecated the following Oracle endpoints\n   * `GET /oracle/db`\n   * `GET /oracle/db/{id}`\n   * `PATCH /oracle/db/{id}`\n * Deprecated the following vcd hierarchy endpoints. \n   * `GET /vcd/hierarchy/{id}`\n   * `GET /vcd/hierarchy/{id}/children`\n   * `GET /vcd/hierarchy/{id}/descendants`\n * Deprecated the following vcd cluster endpoints.\n   * `GET /vcd/cluster`\n   * `POST /vcd/cluster`\n   * `GET /vcd/cluster/{id}/vimserver`\n   * `POST /vcd/cluster/{id}/refresh`\n   * `GET /vcd/cluster/{id}`\n   * `PATCH /vcd/cluster/{id}`\n   * `DELETE /vcd/cluster/{id}`\n   * `GET /vcd/cluster/request/{id}`\n * Deprecated the following vcd vapp endpoints.\n   * `GET /vcd/vapp`\n   * `GET /vcd/vapp/{id}`\n   * `PATCH /vcd/vapp/{id}`\n   * `GET /vcd/vapp/{id}/snapshot`\n   * `POST /vcd/vapp/{id}/snapshot`\n   * `DELETE /vcd/vapp/{id}/snapshot`\n   * `GET/vcd/vapp/snapshot/{id}`\n   * `DELETE /vcd/vapp/snapshot/{id}`\n   * `GET /vcd/vapp`\n   * `GET /vcd/vapp/{id}/missed_snapshot`\n   * `GET /vcd/vapp/snapshot/{snapshot_id}/export/options`\n   * `POST /vcd/vapp/snapshot/{snapshot_id}/export`\n   * `POST /vcd/vapp/snapshot/{snapshot_id}/instant_recover`\n   * `GET /vcd/vapp/snapshot/{snapshot_id}/instant_recover/options`\n   * `GET /vcd/vapp/request/{id}`\n   * `GET /vcd/vapp/{id}/search`\n   * `POST /vcd/vapp/snapshot/{id}/download`\n\n ### Changes to Internal API in Rubrik version 5.3.2\n ## Deprecation:\n * Deprecated `compliance24HourStatus` in `DataSourceTableRequest` for\n   `POST /report/data_source/table`.\n   Use `complianceStatus`, `awaitingFirstFull`, and `snapshotRange`\n   as replacements.\n\n ### Changes to Internal API in Rubrik version 5.3.1\n ## Breaking changes:\n * Added new required field `isPwdEncryptionSupported` to\n   the API response `PlatformInfo` for password-based encryption at rest\n   in the API `GET /cluster/{id}/platforminfo`.\n\n ## Feature additions/improvements:\n * Added new field `hostsInfo` to OracleHierarchyObjectSummary\n   returned by `GET /oracle/hierarchy/{id}/children`.\n * Added new field `hostsInfo` to OracleHierarchyObjectSummary\n   returned by `GET /oracle/hierarchy/{id}/descendants`.\n * Added new field `hostsInfo` to OracleHierarchyObjectSummary\n   returned by `GET /oracle/hierarchy/{id}`.\n * Added `shouldKeepConvertedDisksOnFailure` as an optional field in\n   CreateCloudInstanceRequest definition used in the on-demand API\n   conversion API `/cloud_on/aws/instance` and `/cloud_on/azure/instance`.\n   This will enable converted disks to be kept on failure for CloudOn\n   conversion.\n * Added the `hostsInfo` field to the OracleDbDetail that the\n   `GET /oracle/db/{id}` and `PATCH /oracle/db/{id}` endpoints return.\n * Added new optional field `isOnNetAppSnapMirrorDestVolume` to\n   HostShareParameters to support backup of NetApp SnapMirror\n   destination volume.\n * Added new optional fields `encryptionPassword` and\n   `newEncryptionPassword` to the KeyRotationOptions to support\n   key rotation for password-based encryption at rest in\n   internal API `POST /cluster/{id}/security/key_rotation`.\n * Added `Index` to `ReportableTaskType`.\n * Added new optional field `totpStatus` in `UserDetail` for\n   showing the TOTP status of the user with the endpoint\n   `GET /internal/user/{id}`\n * Added new optional field `isTotpEnforced` in `UserDefinition` for\n   configuring the TOTP enforcement for the user with the endpoint\n   `POST /internal/user`\n * Added new optional field `isTotpEnforced` in `UserUpdateInfo` for\n   configuring the TOTP enforcement for the user with the endpoint\n   `PATCH /internal/user/{id}`\n * Added a new field `HypervVirtualDiskInfo` to HypervVirtualMachineDetail \n   used by `GET /hyperv/vm/{id}`.\n * Added a new field `virtualDiskIdsExcludedFromSnapshot` to \n   HypervVirtualMachineUpdate used by `PATCH /hyperv/vm/{id}`.\n\n ### Changes to Internal API in Rubrik version 5.3.0\n ## Deprecation:\n * Deprecated `GET /authorization/role/admin`,\n   `GET /authorization/role/compliance_officer`,\n   `GET /authorization/role/end_user`,\n   `GET /authorization/role/infra_admin`,\n   `GET /authorization/role/managed_volume_admin`,\n   `GET /authorization/role/managed_volume_user`,\n   `GET /authorization/role/org_admin`,\n   `GET /authorization/role/organization`,\n   `GET /authorization/role/read_only_admin` endpoints. Use the new\n   v1 endpoints for role management.\n * Deprecated `SnapshotCloudStorageTier` enum value Cold. It will be left,\n   but will be mapped internally to the new value, AzureArchive, which is\n   recommended as a replacement.\n * Deprecated the `GET /snapshot/{id}/storage/stats` endpoint. Use the v1\n   version when possible.\n * Deprecated `POST /hierarchy/bulk_sla_conflicts`. It is migrated to\n   v1 and using that is recommended.\n * Deprecated `GET /mssql/availability_group`,\n  `GET /mssql/availability_group/{id}`,\n  `PATCH /mssql/availability_group/{id}`, `PATCH /mssql/db/bulk`,\n  `POST /mssql/db/bulk/snapshot`, `GET /mssql/db/bulk/snapshot/{id}`,\n  `GET /mssql/db/count`, `DELETE /mssql/db/{id}/recoverable_range/download`,\n  `GET /mssql/db/{id}/compatible_instance`, `GET /mssql/instance/count`,\n  `GET /mssql/db/{id}/restore_estimate`, `GET /mssql/db/{id}/restore_files`,\n  `GET /mssql/db/{id}/snappable_id`, `GET /mssql/db/defaults`,\n  `PATCH /mssql/db/defaults` and `GET /mssql/db/recoverable_range/download/{id}`\n   endpoints. Use the v1 version when possible.\n  ## Breaking changes:\n * Added new Boolean field `isLinkLocalIpv4Mode` to `AddNodesConfig` and\n   `ReplaceNodeConfig`.\n * Changed the type for ReplicationSnapshotLag, which is used by /report/{id} GET\n   and PATCH endpoints from integer to string.\n * Added new required field `objectStore` to DataSourceDownloadConfig used by\n   `POST /report/data_source/download`.\n * Removed the `storageClass` field from the DataSourceDownloadConfig object used\n   by the `POST /report/data_source/download` endpoint. The value was not used.\n * Removed endpoint `GET /mfa/rsa/server` and moved it to v1.\n * Removed endpoint `POST /mfa/rsa/server` and moved it to v1.\n * Removed endpoint `GET /mfa/rsa/server/{id}` and moved it to v1.\n * Removed endpoint `PATCH /mfa/rsa/server/{id}` and moved it to v1.\n * Removed endpoint `DELETE /mfa/rsa/server/{id}` and moved it to v1.\n * Removed endpoint `PUT /cluster/{id}/security/web_signed_cert`\n    and moved it to v1.\n * Removed endpoint `DELETE /cluster/{id}/security/web_signed_cert`\n    and moved it to v1\n * Removed endpoint `PUT /cluster/{id}/security/kmip/client` and added it\n    to v1.\n * Removed endpoint `GET /cluster/{id}/security/kmip/client` and added it\n    to v1.\n * Removed endpoint `GET /cluster/{id}/security/kmip/server` and added it\n    to v1.\n * Removed endpoint `PUT /cluster/{id}/security/kmip/server` and added it\n    to v1.\n * Removed endpoint `DELETE /cluster/{id}/security/kmip/server` and added\n    it to v1.\n * Removed endpoint `POST /replication/global_pause`. To toggle replication\n    pause between enabled and disabled, use\n    `POST /v1/replication/location_pause/disable` and\n    `POST /v1/replication/location_pause/enable` instead.\n * Removed `GET /replication/global_pause`. To retrieve replication pause\n    status, use `GET /internal/replication/source` and\n    `GET /internal/replication/source/{id}` instead.\n * Removed `GET /node_management/{id}/fetch_package` since it was never used.\n * Removed `GET /node_management/{id}/upgrade` since it was never used.\n * Removed `POST /node_management/{id}/fetch_package` since it was never used.\n * Removed `POST /node_management/{id}/upgrade` since it was never used.\n\n ## Feature additions/improvements:\n * Added new optional field `pubKey` to the GlobalManagerConnectionUpdate\n   object and the GlobalManagerConnectionInfo object used by\n   `GET /cluster/{id}/global_manager` and `PUT /cluster/{id}/global_manager`.\n * Added a new optional field `storageClass` to the `ArchivalLocationSummary`\n   type.\n * Added optional field `StartMethod` to the following components: \n   ChartSummary, TableSummary, ReportTableRequest, FilterSummary and\n   RequestFilters.\n * Added new enum field `StackedReplicationComplianceCountByStatus` to the\n   measure property in ChartSummary.\n * Added new enum fields `ReplicationInComplianceCount`,\n   `ReplicationNonComplianceCount` to the following properties:\n   measure property in ChartSummary, column property in TableSummary,\n   and sortBy property in ReportTableRequest.\n * Added the endpoint `GET /vmware/config/datastore_freespace_threshold` to\n   query the VMware datastore freespace threshold config.\n * Added the endpoint `PATCH /vmware/config/set_datastore_freespace_threshold`\n   to update the VMware datastore freespace threshold config.\n * Added two new optional query parameters `offset` and `limit` to\n    `GET /organization`.\n * Added two new optional query parameters `offset` and `limit` to\n    `GET /user/{id}/organization`.\n * Modified `SnapshotCloudStorageTier`, enum adding values AzureArchive, Glacier,\n   and GlacierDeepArchive.\n * Added the `lastValidationResult` field to the OracleDbDetail that the\n   `GET /oracle/db/{id}` and `PATCH /oracle/db/{id}` endpoints return.\n * Added `isValid` field to the OracleDbSnapshotSummary of\n   OracleRecoverableRange that the `GET /oracle/db/\n    {id}/recoverable_range` endpoint returns.\n * Added the `isRemoteGlobalBlackoutActive` field to the\n   ReplicationSourceSummary object that the\n   `GET /organization/{id}/replication/source` endpoint returns.\n * Added the `isRemoteGlobalBlackoutActive` field to the\n   ReplicationSourceSummary object that the\n   `GET /replication/source/{id}` endpoint returns.\n * Added the `isRemoteGlobalBlackoutActive` field to the\n   ReplicationSourceSummary object that the\n   `GET /replication/source` endpoint returns.\n * Added the `isReplicationTargetPauseEnabled` field to the\n   ReplicationSourceSummary object that the\n   `GET /organization/{id}/replication/source` endpoint returns.\n * Added the `isReplicationTargetPauseEnabled` field to the\n   ReplicationSourceSummary object that the\n   `GET /replication/source/{id}` endpoint returns.\n * Added the `isReplicationTargetPauseEnabled` field to the\n   ReplicationSourceSummary object that the\n   `GET /replication/source` endpoint returns.\n * Added new optional field `cloudRehydrationSpeed` to the\n   ObjectStoreLocationSummary, ObjectStoreUpdateDefinition,\n   PolarisAwsArchivalLocationSpec, and PolarisAzureArchivalLocationSpec\n   objects to specify the rehydration speed to use when performing cloud\n   rehydration on objects tiered cold storage.\n * Added new optional field earliestTimestamp to the `POST\n   /polaris/export_info` endpoint to enable incremental MDS synchronization.\n * Added new values `RetentionSlaDomainName` , `ObjectType`, `SnapshotCount`,\n   `AutoSnapshotCount` and  `ManualSnapshotCount` to\n   `UnmanagedObjectSortAttribute` field of the `GET /unmanaged_object` endpont.\n * Added new optional field `endpoint` to the ObjectStorageDetail\n   object used by several Polaris APIs.\n * Added new optional field `accessKey` to the ObjectStorageConfig\n   object used by several Polaris APIs.\n * Added new optional field `endpoint` to DataSourceDownloadConfig used by\n   `POST /report/data_source/download`.\n * Added new field `slaClientConfig` to the `ManagedVolumeUpdate`\n   object used by the `PATCH /managed_volume/{id}` endpoint to enable\n   edits to the configuration of SLA Managed Volumes.\n * Added new field `shouldSkipPrechecks` to DecommissionNodesConfig used by\n   `POST /cluster/{id}/decommission_nodes`.\n * Added new query parameter `managed_volume_type` to allow filtering\n   managed volumes based on their type using the `GET /managed_volume`\n   endpoint.\n * Added new query parameter `managed_volume_type` to allow filtering\n   managed volume exports based on their source managed volume type\n   using the `GET /managed_volume/snapshot/export` endpoint.\n * Added the new fields `mvType` and `slaClientConfig` to the\n   `ManagedVolumeConfig` object. These fields are used with the\n   `POST /managed_volume` endpoint to manage SLA Managed Volumes.\n * Added the new fields `mvType` and `slaManagedVolumeDetails` to the\n   `ManagedVolumeSummary` object returned by the `GET /managed_volume`,\n   `POST /managed_volume`, `GET /managed_volume/{id}` and\n   `POST /managed_volume/{id}` endpoints.\n * Added new field `mvType` to the `ManagedVolumeSnapshotExportSummary`\n   object returned by the `GET /managed_volume/snapshot/export` and\n   `GET /managed_volume/snapshot/export/{id}` endpoints.\n * Added optional field `hostMountPoint` in the `ManagedVolumeChannelConfig`.\n   `ManagedVolumeChannelConfig` is returned as part of\n   `ManagedVolumeSnapshotExportSummary`, which is returned\n   by the `GET /managed_volume/snapshot/export` and\n   `GET /managed_volume/snapshot/export/{id}` endpoints.\n * Added `POST /managed_volume/{id}/snapshot` method to take an on\n   demand snapshot for SLA Managed Volumes.\n * Added new field `isPrimary` to OracleDbSummary returned by\n   `GET /oracle/db`.\n * Added new field `isPrimary` to OracleDbDetail returned by\n   `GET /oracle/db/{id}` and `PATCH /oracle/db/{id}`.\n * Added new field `isOracleHost` to HostDetail\n   returned by `GET /host/{id}`.\n * Added optional isShareAutoDiscoveryAndAdditionEnabled in the\n   NasBaseConfig and NasConfig.\n   NasBaseConfig is returned as part of HostSummary, which is returned by the\n   `Get /host/envoy` and `Get /host` endpoints. NasConfig is used by\n   HostRegister and HostUpdate. The HostRegister field is used by the\n   `Post /host/bulk` endpoint and the HostUpdate is field used by the\n   `PATCH /host/bulk` endpoint.\n * Added new endpoint `POST /managed_volume/{id}/resize` to resize managed\n   volume to a larger size.\n * Added ReplicationComplianceStatus as an optional field to the TableSummary\n   which is used by /report/{id} GET and PATCH endpoints and to RequestFilters\n   which is used by /report/data_source/table.\n * Added `PATCH /cluster/{id}/trial_edge` endpoint to extend the trial period.\n * Added new optional fields `extensionsLeft` and `daysLeft` to\n   EdgeTrialStatus returned by `GET /cluster/{id}/trial_edge` and\n   `PATCH /cluster/{id}/trial_edge`.\n * Added new endpoint `POST /managed_volume/snapshot/{id}/restore` to export a\n   managed volume snapshot and mount it on a host.\n * Added new endpoints `PATCH /config/{component}/reset` to allow configs to\n   be reset to DEFAULT state.\n * Added a new field `logRetentionTimeInHours` to the `MssqlDbDefaults`\n   object returned by the `GET /mssql/db/defaults` and\n   `PATCH /mssql/db/defaults` endpoints.\n * Added new optional field `logRetentionTimeInHours` to `MssqlDbDefaultsUpdate`\n   object which is used by `PATCH /mssql/db/defaults`.\n * Added new optional field `unreadable` to `BrowseResponse` and\n   `SnapshotSearchResponse`, which are used by `GET /browse` and\n   `GET /search/snapshot_search` respectively.\n * Added MissedReplicationSnapshots as an optional field to the TableSummary\n   which is used by /report/{id} GET and PATCH endpoints.\n * Added new optional field `pitRecoveryInfo` to `ChildSnappableFailoverInfo`\n   object which is used by `PUT /polaris/failover/target/{id}/start`\n * Added ReplicationDataLag as an optional field to the TableSummary\n   which is used by /report/{id} GET and PATCH endpoints.\n * Added UnreplicatedSnapshots as an optional field to the TableSummary\n   which is used by /report/{id} GET and PATCH endpoints.\n * Added the field `networkAdapterType` to `VappVmNetworkConnection`.\n   `VappVmNetworkConnection` is returned by the\n   `GET /vcd/vapp/snapshot/{snapshot_id}/instant_recover/options` and\n   `GET /vcd/vapp/snapshot/{snapshot_id}/export/options` endpoints and is\n   used by the `POST /vcd/vapp/snapshot/{snapshot_id}/export` and\n   `POST /vcd/vapp/snapshot/{snapshot_id}/instant_recover` endpoints.\n   Also added `VcdVmSnapshotDetail`, which is returned by the\n   `GET /vcd/vapp/snapshot/{id}` endpoint.\n * Added new endpoint `GET /report/template` to return details\n   of a report template.\n * Added new endpoint `POST /report/{id}/send_email` to send an email of the report.\n ## Breaking changes:\n * Made field `restoreScriptSmbPath` optional in `VolumeGroupMountSummary`.\n   Endpoints `/volume_group/snapshot/mount` and\n   `/volume_group/snapshot/mount/{id}` are affected by this change.\n * Moved endpoints `GET /volume_group`, `GET /volume_group/{id}`,\n   `PATCH /volume_group/{id}`,  `GET /volume_group/{id}/snapshot`,\n   `POST /volume_group/{id}/snapshot`, `GET /volume_group/snapshot/{id}`,\n   `GET /volume_group/snapshot/mount`, and\n   `GET /volume_group/snapshot/mount/{id}` from internal to v1.\n * Moved endpoint `GET /host/{id}/volume` from internal to v1.\n\n ### Changes to Internal API in Rubrik version 5.2.2\n ## Feature Additions/improvements:\n * Added new field `exposeAllLogs` to ExportOracleTablespaceConfig\n   used by `POST /oracle/db/{id}/export/tablespace`.\n\n ### Changes to Internal API in Rubrik version 5.2.1\n ## Feature Additions/improvements:\n * Added new field `shouldBlockOnNegativeFailureTolerance` to\n   DecommissionNodesConfig used by `POST /cluster/{id}/decommission_nodes`.\n\n ### Changes to Internal API in Rubrik version 5.2.0\n ## Deprecation:\n * Deprecating `GET /replication/global_pause`. Use\n   `GET /internal/replication/source` and\n   `GET /internal/replication/source/{id}` to retrieve replication\n    pause status in CDM v5.3.\n * Deprecating `POST /replication/global_pause`. Use\n   `POST /v1/replication/location_pause/disable` and\n   `POST /v1/replication/location_pause/enable` to toggle replication\n    pause in CDM v5.3.\n * Deprecating `slaId` field returned by `GET /vcd/vapp/{id}/snapshot`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n * Deprecating `slaId` field returned by `GET /vcd/vapp/snapshot/{id}`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n * Deprecating `slaId` field returned by `GET /oracle/db/{id}/snapshot`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n * Deprecating `slaId` field returned by `GET /oracle/db/\n    {id}/recoverable_range`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n * Deprecating `slaId` field returned by `GET /oracle/db/snapshot/{id}`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n * Deprecating `slaId` field returned by `GET /hyperv/vm/{id}/snapshot`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n * Deprecating `slaId` field returned by `GET /hyperv/vm/snapshot/{id}`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n * Deprecating `slaId` field returned by `GET /volume_group/{id}/snapshot`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n * Deprecating `slaId` field returned by `GET /volume_group/snapshot/{id}`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n * Deprecating `slaId` field returned by `GET /storage/array_volume_group\n/{id}/snapshot`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n*  Deprecating `slaId` field returned by `GET /vcd/vapp/{id}`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n*  Deprecating `slaId` field returned by `GET /host_fileset/{id}`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n*  Deprecating `slaId` field returned by `GET /host_fileset/share/{id}`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n*  Deprecating `slaId` field returned by `GET /app_blueprint/{id}/snapshot`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n*  Deprecating `slaId` field returned by `GET /app_blueprint/snapshot/{id}`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n*  Deprecating `slaId` field returned by `GET /managed_volume/{id}/snapshot`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n*  Deprecating `slaId` field returned by `POST /managed_volume/{id\n}/end_snapshot`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n*  Deprecating `slaId` field returned by `GET /managed_volume/snapshot/{id}`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n*  Deprecating `slaId` field returned by `GET /aws/ec2_instance/{id}/snapshot`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n*  Deprecating `slaId` field returned by `GET /aws/ec2_instance/snapshot/{id}`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n*  Deprecating `slaId` field returned by `GET /nutanix/vm/{id}/snapshot`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n*  Deprecating `slaId` field returned by `GET /nutanix/vm/snapshot/{id}`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n*  Deprecating `slaId` field returned by `GET /fileset/bulk`.\n    See **snapshotRetentionInfo** to track retention for\n    snapshots.\n*  Added a new field `pendingSlaDomain` to `VirtualMachineDetail`\n    object referred by `VappVmDetail` returned by\n    `GET /vcd/vapp/{id}` and `PATCH /vcd/vapp/{id}`\n * Deprecated `POST /internal/vmware/vcenter/{id}/refresh_vm` endpoint. Use\n   `POST /v1/vmware/vcenter/{id}/refresh_vm` instead to refresh a\n   virtual machine by MOID.\n\n ## Breaking changes:\n* Rename the field configuredSlaDomainId in the OracleUpdate object to\n  configuredSlaDomainIdDeprecated and modify the behavior so\n  configuredSlaDomainIdDeprecated is only used to determine log backup\n  frequency and not to set retention time.\n* Removed `GET /event/count_by_status` endpoint and it will be\n   replaced by `GET /job_monitoring/summary_by_job_state`.\n* Removed `GET /event/count_by_job_type` endpoint and it will be\n   replaced by `GET /job_monitoring/summary_by_job_type`.\n* Removed `GET /event_series` endpoint and it will be replaced by\n   `GET /job_monitoring`.\n* Refactor `PUT /cluster/{id}/security/web_signed_cert` to accept\n   certificate_id instead of X.509 certificate text. Also removed\n   the `POST /cluster/{id}/security/web_csr` endpoint.\n * Refactor `GET /rsa-server`, `POST /rsa-server`, `GET /rsa-server/{id}`,\n   and `PATCH /rsa-server/{id}` to take in a certificate ID instead of\n   a certificate.\n * Changed definition of CloudInstanceUpdate by updating the enums ON/OFF\n   to POWERSTATUS_ON/POWERSTATUS_OFF\n * Removed `GET /event_series/{status}/csv_link` endpoint to download CSV\n   with job monitoring information. It has been replaced by the\n   `GET /job_monitoring//csv_download_link` v1 endpoint.\n * Removed GET `/report/summary/physical_storage_time_series`. Use\n   GET `/stats/total_physical_storage/time_series` instead.\n * Removed GET `/report/summary/average_local_growth_per_day`. Use\n   GET `/stats/average_storage_growth_per_day` instead.\n * Removed POST `/job/instances/`. Use GET `/job/{job_id}/instances` instead.\n * Removed the POST `/cluster/{id}/reset` endpoint.\n * Removed GET `/user`. Use the internal POST `/principal_search`\n   or the v1 GET `/principal` instead for querying any principals,\n   including users.\n\n ## Feature additions/improvements:\n  * Added the `GET /replication/global_pause` endpoint to return the current\n   status of global replication pause. Added the `POST /replication/global_pause`.\n   endpoint to toggle the replication target global pause jobs status. When\n   global replication pause is enabled, all replication jobs on the local\n   cluster are paused. When disabling global replication pause, optional\n   parameter `shouldOnlyReplicateNewSnapshots` can be set to `true` to only\n   replicate snapshots taken after disabling the pause. These endpoints must\n   be used at the target cluster.\n * Added new field `parentSnapshotId` to AppBlueprintSnapshotSummary returned\n   by `GET /app_blueprint/{id}/snapshot`.\n * Added new field `parentSnapshotId` to AppBlueprintSnapshotDetail returned\n   by `GET /app_blueprint/snapshot/{id}`.\n * Added new field `parentSnapshotId` to AwsEc2InstanceSummary returned by\n  `GET /aws/ec2_instance`.\n * Added new field `parentSnapshotId` to AwsEc2InstanceDetail returned by\n  `GET /aws/ec2_instance/{id}`.\n * Added new field `parentSnapshotId` to AwsEc2InstanceDetail returned by\n  `PATCH /aws/ec2_instance/{id}`.\n * Added new field `parentSnapshotId` to HypervVirtualMachineSnapshotSummary\n  returned by `GET /hyperv/vm/{id}/snapshot`.\n * Added new field `parentSnapshotId` to HypervVirtualMachineSnapshotDetail\n  returned by `GET /hyperv/vm/snapshot/{id}`.\n * Added new field `parentSnapshotId` to ManagedVolumeSnapshotSummary\n   returned by `GET /managed_volume/{id}/snapshot`.\n * Added new field `parentSnapshotId` to ManagedVolumeSnapshotSummary\n   returned by `POST /managed_volume/{id}/end_snapshot`.\n * Added new field `parentSnapshotId` to ManagedVolumeSnapshotDetail returned\n   by `GET /managed_volume/snapshot/{id}`.\n * Added new field `parentSnapshotId` to NutanixVmSnapshotSummary returned by\n  `GET /nutanix/vm/{id}/snapshot`.\n * Added new field `parentSnapshotId` to NutanixVmSnapshotDetail returned by\n  `GET /nutanix/vm/snapshot/{id}`.\n * Added new field `parentSnapshotId` to OracleDbSnapshotSummary returned by\n  `GET /oracle/db/{id}/snapshot`.\n * Added new field `parentSnapshotId` to OracleDbSnapshotDetail returned by\n  `GET /oracle/db/snapshot/{id}`.\n * Added new field `parentSnapshotId` to StorageArrayVolumeGroupSnapshotSummary\n  returned by `GET /storage/array_volume_group/{id}/snapshot`.\n * Added new field `parentSnapshotId` to StorageArrayVolumeGroupSnapshotDetail\n   returned by `GET /storage/array_volume_group/snapshot/{id}`.\n * Added new field `parentSnapshotId` to VcdVappSnapshotSummary returned by\n  `GET /vcd/vapp/{id}/snapshot`.\n * Added new field `parentSnapshotId` to VcdVappSnapshotDetail returned by\n  `GET /vcd/vapp/snapshot/{id}`.\n * Added new field `parentSnapshotId` to VolumeGroupSnapshotSummary returned by\n  `GET /volume_group/{id}/snapshot`.\n * Added new field `parentSnapshotId` to VolumeGroupSnapshotDetail returned by\n  `GET /volume_group/snapshot/{id}`.\n * Added new field `retentionSlaDomanId` to MssqlAvailabilityGroupSummary\n   returned by `GET /mssql/availability_group`.\n * Added new field `retentionSlaDomanId` to MssqlAvailabilityGroupDetail\n   returned by `GET /mssql/availability_group/{id}`.\n * Added new field `retentionSlaDomanId` to MssqlAvailabilityGroupDetail\n   returned by `PATCH /mssql/availability_group/{id}`.\n * Added new field `retentionSlaDomainId` to UnmanagedObjectSummary\n   returned by `GET /unmanaged_object`.\n * Added new field `retentionSlaDomainId` to ManagedVolumeSummary\n   returned by `GET /managed_volume`.\n * Added new field `retentionSlaDomainId` to AppBlueprintDetail\n   returned by `GET /app_blueprint/{id}`.\n * Added new field `retentionSlaDomainId` to AppBlueprintDetail\n   returned by `PATCH /polaris/app_blueprint/{id}`.\n * Added new field `retentionSlaDomainId` to AppBlueprintDetail\n   returned by `POST /polaris/app_blueprint`.\n * Added new field `retentionSlaDomainId` to AppBlueprintExportSnapshotJobConfig\n   returned by `POST /polaris/app_blueprint/snapshot/{id}/export`.\n * Added new field `retentionSlaDomainId` to AppBlueprintInstantRecoveryJobConfig\n   returned by `POST /polaris/app_blueprint/snapshot/{id}/instant_recover`.\n * Added new field `retentionSlaDomainId` to AppBlueprintMountSnapshotJobConfig\n   returned by `POST /polaris/app_blueprint/snapshot/{id}/mount`.\n * Added new field `retentionSlaDomainId` to AppBlueprintSummary\n   returned by `GET /app_blueprint`.\n * Added new field `retentionSlaDomainId` to AwsEc2InstanceDetail\n   returned by `GET /aws/ec2_instance/{id}`.\n * Added new field `retentionSlaDomainId` to AwsEc2InstanceDetail\n   returned by `PATCH /aws/ec2_instance/{id}`.\n * Added new field `retentionSlaDomainId` to AwsEc2InstanceSummary\n   returned by `GET /aws/ec2_instance`.\n * Added new field `retentionSlaDomainId` to AwsHierarchyObjectSummary\n   returned by `GET /aws/hierarchy/{id}/children`.\n * Added new field `retentionSlaDomainId` to AwsHierarchyObjectSummary\n   returned by `GET /aws/hierarchy/{id}/descendants`.\n * Added new field `retentionSlaDomainId` to AwsHierarchyObjectSummary\n   returned by `GET /aws/hierarchy/{id}`.\n * Added new field `retentionSlaDomainId` to HypervHierarchyObjectSummary\n   returned by `GET /hyperv/hierarchy/{id}/children`.\n * Added new field `retentionSlaDomainId` to HypervHierarchyObjectSummary\n   returned by `GET /hyperv/hierarchy/{id}/descendants`.\n * Added new field `retentionSlaDomainId` to HypervHierarchyObjectSummary\n   returned by `GET /hyperv/hierarchy/{id}`.\n * Added new field `retentionSlaDomainId` to HypervHierarchyObjectSummary\n   returned by `GET /organization/{id}/hyperv`.\n * Added new field `retentionSlaDomainId` to HypervVirtualMachineDetail\n   returned by `GET /hyperv/vm/{id}`.\n * Added new field `retentionSlaDomainId` to HypervVirtualMachineDetail\n   returned by `PATCH /hyperv/vm/{id}`.\n * Added new field `retentionSlaDomainId` to HypervVirtualMachineSummary\n   returned by `GET /hyperv/vm`.\n * Added new field `retentionSlaDomainId` to ManagedHierarchyObjectSummary\n   returned by `GET /hierarchy/{id}`.\n * Added new field `retentionSlaDomainId` to ManagedHierarchyObjectSummary\n   returned by `GET /hierarchy/{id}/sla_conflicts`.\n * Added new field `retentionSlaDomainId` to ManagedVolumeSummary\n   returned by `GET /managed_volume/{id}`.\n * Added new field `retentionSlaDomainId` to ManagedVolumeSummary\n   returned by `GET /organization/{id}/managed_volume`.\n * Added new field `retentionSlaDomainId` to ManagedVolumeSummary\n   returned by `PATCH /managed_volume/{id}`.\n * Added new field `retentionSlaDomainId` to ManagedVolumeSummary\n   returned by `POST /managed_volume`.\n * Added new field `retentionSlaDomainId` to MountDetail\n   returned by `GET /vmware/vm/snapshot/mount/{id}`.\n * Added new field `retentionSlaDomainId` to NutanixHierarchyObjectSummary\n   returned by `GET /nutanix/hierarchy/{id}/children`.\n * Added new field `retentionSlaDomainId` to NutanixHierarchyObjectSummary\n   returned by `GET /nutanix/hierarchy/{id}/descendants`.\n * Added new field `retentionSlaDomainId` to NutanixHierarchyObjectSummary\n   returned by `GET /nutanix/hierarchy/{id}`.\n * Added new field `retentionSlaDomainId` to NutanixHierarchyObjectSummary\n   returned by `GET /organization/{id}/nutanix`.\n * Added new field `retentionSlaDomainId` to OracleDbDetail\n   returned by `GET /oracle/db/{id}`.\n * Added new field `retentionSlaDomainId` to OracleDbDetail\n   returned by `PATCH /oracle/db/{id}`.\n * Added new field `retentionSlaDomainId` to OracleDbSummary\n   returned by `GET /oracle/db`.\n * Added new field `retentionSlaDomainId` to OracleHierarchyObjectSummary\n   returned by `GET /oracle/hierarchy/{id}/children`.\n * Added new field `retentionSlaDomainId` to OracleHierarchyObjectSummary\n   returned by `GET /oracle/hierarchy/{id}/descendants`.\n * Added new field `retentionSlaDomainId` to OracleHierarchyObjectSummary\n   returned by `GET /oracle/hierarchy/{id}`.\n * Added new field `retentionSlaDomainId` to OracleHierarchyObjectSummary\n   returned by `GET /organization/{id}/oracle`.\n * Added new field `retentionSlaDomainId` to SlaConflictsSummary\n   returned by `POST /hierarchy/bulk_sla_conflicts`.\n * Added new field `retentionSlaDomainId` to SnappableRecoverySpecDetails\n   returned by `POST /polaris/failover/recovery_spec/upsert`.\n * Added new field `retentionSlaDomainId` to SnappableRecoverySpec\n   returned by `POST /polaris/failover/recovery_spec/upsert`.\n * Added new field `retentionSlaDomainId` to Snappable\n   returned by `POST /polaris/failover/recovery_spec/upsert`.\n * Added new field `retentionSlaDomainId` to Snappable\n   returned by `POST /stats/snappable_storage`.\n * Added new field `retentionSlaDomainId` to StorageArrayHierarchyObjectSummary\n   returned by `GET /organization/{id}/storage/array`.\n * Added new field `retentionSlaDomainId` to StorageArrayHierarchyObjectSummary\n   returned by `GET /storage/array/hierarchy/{id}/children`.\n * Added new field `retentionSlaDomainId` to StorageArrayHierarchyObjectSummary\n   returned by `GET /storage/array/hierarchy/{id}/descendants`.\n * Added new field `retentionSlaDomainId` to StorageArrayHierarchyObjectSummary\n   returned by `GET /storage/array/hierarchy/{id}`.\n * Added new field `retentionSlaDomainId` to StorageArrayVolumeGroupDetail\n   returned by `GET /storage/array_volume_group/{id}`.\n * Added new field `retentionSlaDomainId` to StorageArrayVolumeGroupDetail\n   returned by `PATCH /storage/array_volume_group/{id}`.\n * Added new field `retentionSlaDomainId` to StorageArrayVolumeGroupDetail\n   returned by `POST /storage/array_volume_group`.\n * Added new field `retentionSlaDomainId` to StorageArrayVolumeGroupSummary\n   returned by `GET /storage/array_volume_group`.\n * Added new field `retentionSlaDomainId` to TriggerFailoverOnTargetDefinition\n   returned by `PUT /polaris/failover/target/{id}/resume`.\n * Added new field `retentionSlaDomainId` to TriggerFailoverOnTargetDefinition\n   returned by `PUT /polaris/failover/target/{id}/start`.\n * Added new field `retentionSlaDomainId` to UpsertSnappableRecoverySpecResponse\n   returned by `POST /polaris/failover/recovery_spec/upsert`.\n * Added new field `retentionSlaDomainId` to VcdHierarchyObjectSummary\n   returned by `GET /organization/{id}/vcd`.\n * Added new field `retentionSlaDomainId` to VcdHierarchyObjectSummary\n   returned by `GET /vcd/hierarchy/{id}/children`.\n * Added new field `retentionSlaDomainId` to VcdHierarchyObjectSummary\n   returned by `GET /vcd/hierarchy/{id}/descendants`.\n * Added new field `retentionSlaDomainId` to VcdHierarchyObjectSummary\n   returned by `GET /vcd/hierarchy/{id}`.\n * Added new field `retentionSlaDomainId` to VcdVappDetail\n   returned by `GET /vcd/vapp/{id}`.\n * Added new field `retentionSlaDomainId` to VcdVappDetail\n   returned by `PATCH /vcd/vapp/{id}`.\n * Added new field `retentionSlaDomainId` to VcdVappSnapshotDetail\n   returned by `GET /vcd/vapp/snapshot/{id}`.\n * Added new field `retentionSlaDomainId` to VolumeGroupDetail\n   returned by `GET /volume_group/{id}`.\n * Added new field `retentionSlaDomainId` to VolumeGroupDetail\n   returned by `PATCH /volume_group/{id}`.\n * Added new field `retentionSlaDomainId` to VolumeGroupSummary\n   returned by `GET /volume_group`.\n * Added new field `retentionSlaDomainId` to AwsHierarchyObjectSummary\n   returned by `GET /organization/{id}/aws`.\n * Added new field `retentionSlaDomainId` to VmwareVmMountSummary\n   returned by `GET /vmware/vm/snapshot/mount`.\n * Added new field `retentionSlaDomainId` to VcdVappSummary\n   returned by `GET /vcd/vapp`.\n * Added `isReplicationTargetPauseEnabled` to ReplicationTargetSummary\n   returned by `GET /replication/target`.\n * Added `isReplicationTargetPauseEnabled` to ReplicationTargetSummary\n   returned by `POST /replication/target`.\n * Added `isReplicationTargetPauseEnabled` to ReplicationTargetSummary\n   returned by `GET /replication/target/{id}`.\n * Added `isReplicationTargetPauseEnabled` to ReplicationTargetSummary\n   returned by `GET /replication/target/{id}`.\n * Added `isReplicationTargetPauseEnabled` to ReplicationTargetSummary\n   returned by `PATCH /replication/target/{id}`.\n * Added `isReplicationTargetPauseEnabled` to ReplicationTargetSummary\n   returned by `GET /organization/{id}/replication/target`.\n * Added new field `hasSnapshotsWithPolicy` to UnmanagedObjectSummary returned\n   by GET `/unmanaged_object`\n * Added new field `slaLastUpdateTime` to AppBlueprintDetail\n   returned by POST `/polaris/app_blueprint`.\n * Added new field `slaLastUpdateTime` to AppBlueprintDetail\n   returned by `GET /app_blueprint/{id}`.\n * Added new field `slaLastUpdateTime` to AppBlueprintDetail\n   returned by `PATCH /polaris/app_blueprint/{id}`.\n * Added new field `slaLastUpdateTime` to AppBlueprintExportSnapshotJobConfig\n   returned by POST `/polaris/app_blueprint/snapshot/{id}/export`.\n * Added new field `slaLastUpdateTime` to AppBlueprintInstantRecoveryJobConfig\n   returned by POST `/polaris/app_blueprint/snapshot/{id}/instant_recover`.\n * Added new field `slaLastUpdateTime` to AppBlueprintMountSnapshotJobConfig\n   returned by POST `/polaris/app_blueprint/snapshot/{id}/mount`.\n * Added new field `slaLastUpdateTime` to AppBlueprintSummary\n   returned by `GET /app_blueprint`.\n * Added new field `slaLastUpdateTime` to AwsAccountDetail\n   returned by `PATCH /aws/account/dca/{id}`.\n * Added new field `slaLastUpdateTime` to AwsAccountDetail\n   returned by `GET /aws/account/{id}`.\n * Added new field `slaLastUpdateTime` to AwsAccountDetail\n   returned by `PATCH /aws/account/{id}`.\n * Added new field `slaLastUpdateTime` to AwsEc2InstanceDetail\n   returned by `GET /aws/ec2_instance/{id}`.\n * Added new field `slaLastUpdateTime` to AwsEc2InstanceDetail\n   returned by `PATCH /aws/ec2_instance/{id}`.\n * Added new field `slaLastUpdateTime` to FilesetDetail\n   returned by POST `/fileset/bulk`.\n * Added new field `slaLastUpdateTime` to AwsEc2InstanceSummary\n   returned by `GET /aws/ec2_instance`.\n * Added new field `slaLastUpdateTime` to AwsHierarchyObjectSummary\n   returned by `GET /aws/hierarchy/{id}`.\n * Added new field `slaLastUpdateTime` to AwsHierarchyObjectSummary\n   returned by `GET /aws/hierarchy/{id}/children`.\n * Added new field `slaLastUpdateTime` to AwsHierarchyObjectSummary\n   returned by `GET /aws/hierarchy/{id}/descendants`.\n * Added new field `slaLastUpdateTime` to AwsHierarchyObjectSummary\n   returned by `GET /organization/{id}/aws`.\n * Added new field `slaLastUpdateTime` to DataCenterDetail\n   returned by `GET /vmware/data_center/{id}`.\n * Added new field `slaLastUpdateTime` to DataCenterSummary\n   returned by `GET /vmware/data_center`.\n * Added new field `slaLastUpdateTime` to DataStoreDetail\n   returned by `GET /vmware/datastore/{id}`.\n * Added new field `slaLastUpdateTime` to FolderDetail\n   returned by `GET /folder/host/{datacenter_id}`.\n * Added new field `slaLastUpdateTime` to FolderDetail\n   returned by `GET /folder/vm/{datacenter_id}`.\n * Added new field `slaLastUpdateTime` to FolderDetail\n   returned by `GET /folder/{id}`.\n * Added new field `slaLastUpdateTime` to HostFilesetDetail\n   returned by `GET /host_fileset/{id}`.\n * Added new field `slaLastUpdateTime` to HostFilesetShareDetail\n   returned by `GET /host_fileset/share/{id}`.\n * Added new field `slaLastUpdateTime` to HostFilesetShareSummary\n   returned by `GET /host_fileset/share`.\n * Added new field `slaLastUpdateTime` to HostFilesetSummary\n   returned by `GET /host_fileset`.\n * Added new field `slaLastUpdateTime` to HypervClusterDetail\n   returned by `GET /hyperv/cluster/{id}`.\n * Added new field `slaLastUpdateTime` to HypervClusterDetail\n   returned by `PATCH /hyperv/cluster/{id}`.\n * Added new field `slaLastUpdateTime` to HypervClusterSummary\n   returned by `GET /hyperv/cluster`.\n * Added new field `slaLastUpdateTime` to HypervHierarchyObjectSummary\n   returned by `GET /hyperv/hierarchy/{id}`.\n * Added new field `slaLastUpdateTime` to HypervHierarchyObjectSummary\n   returned by `GET /hyperv/hierarchy/{id}/children`.\n * Added new field `slaLastUpdateTime` to HypervHierarchyObjectSummary\n   returned by `GET /hyperv/hierarchy/{id}/descendants`.\n * Added new field `slaLastUpdateTime` to HypervHierarchyObjectSummary\n   returned by `GET /organization/{id}/hyperv`.\n * Added new field `slaLastUpdateTime` to HypervHostDetail\n   returned by `GET /hyperv/host/{id}`.\n * Added new field `slaLastUpdateTime` to HypervHostDetail\n   returned by `PATCH /hyperv/host/{id}`.\n * Added new field `slaLastUpdateTime` to HypervHostSummary\n   returned by `GET /hyperv/host`.\n * Added new field `slaLastUpdateTime` to HypervScvmmDetail\n   returned by `GET /hyperv/scvmm/{id}`.\n * Added new field `slaLastUpdateTime` to HypervScvmmDetail\n   returned by `PATCH /hyperv/scvmm/{id}`.\n * Added new field `slaLastUpdateTime` to HypervScvmmSummary\n   returned by `GET /hyperv/scvmm`.\n * Added new field `slaLastUpdateTime` to HypervVirtualMachineDetail\n   returned by `GET /hyperv/vm/{id}`.\n * Added new field `slaLastUpdateTime` to HypervVirtualMachineDetail\n   returned by `PATCH /hyperv/vm/{id}`.\n * Added new field `slaLastUpdateTime` to HypervVirtualMachineSummary\n   returned by `GET /hyperv/vm`.\n * Added new field `slaLastUpdateTime` to ManagedHierarchyObjectSummary\n   returned by `GET /hierarchy/{id}`.\n * Added new field `slaLastUpdateTime` to ManagedHierarchyObjectSummary\n   returned by `GET /hierarchy/{id}/sla_conflicts`.\n * Added new field `slaLastUpdateTime` to ManagedVolumeSummary\n   returned by `GET /managed_volume`.\n * Added new field `slaLastUpdateTime` to ManagedVolumeSummary\n   returned by POST `/managed_volume`.\n * Added new field `slaLastUpdateTime` to ManagedVolumeSummary\n   returned by `GET /managed_volume/{id}`.\n * Added new field `slaLastUpdateTime` to ManagedVolumeSummary\n   returned by `PATCH /managed_volume/{id}`.\n * Added new field `slaLastUpdateTime` to ManagedVolumeSummary\n   returned by `GET /organization/{id}/managed_volume`.\n * Added new field `slaLastUpdateTime` to MountDetail\n   returned by `GET /vmware/vm/snapshot/mount/{id}`.\n * Added new field `slaLastUpdateTime` to NutanixHierarchyObjectSummary\n   returned by `GET /nutanix/hierarchy/{id}`.\n * Added new field `slaLastUpdateTime` to NutanixHierarchyObjectSummary\n   returned by `GET /nutanix/hierarchy/{id}/children`.\n * Added new field `slaLastUpdateTime` to NutanixHierarchyObjectSummary\n   returned by `GET /nutanix/hierarchy/{id}/descendants`.\n * Added new field `slaLastUpdateTime` to NutanixHierarchyObjectSummary\n   returned by `GET /organization/{id}/nutanix`.\n * Added new field `slaLastUpdateTime` to OracleDbDetail\n   returned by `GET /oracle/db/{id}`.\n * Added new field `slaLastUpdateTime` to OracleDbDetail\n   returned by `PATCH /oracle/db/{id}`.\n * Added new field `slaLastUpdateTime` to OracleDbSummary\n   returned by `GET /oracle/db`.\n * Added new field `slaLastUpdateTime` to OracleHierarchyObjectSummary\n   returned by `GET /oracle/hierarchy/{id}`.\n * Added new field `slaLastUpdateTime` to OracleHierarchyObjectSummary\n   returned by `GET /oracle/hierarchy/{id}/children`.\n * Added new field `slaLastUpdateTime` to OracleHierarchyObjectSummary\n   returned by `GET /oracle/hierarchy/{id}/descendants`.\n * Added new field `slaLastUpdateTime` to OracleHierarchyObjectSummary\n   returned by `GET /organization/{id}/oracle`.\n * Added new field `slaLastUpdateTime` to OracleHostDetail\n   returned by `GET /oracle/host/{id}`.\n * Added new field `slaLastUpdateTime` to OracleHostDetail\n   returned by `PATCH /oracle/host/{id}`.\n * Added new field `slaLastUpdateTime` to OracleHostSummary\n   returned by `GET /oracle/host`.\n * Added new field `slaLastUpdateTime` to OracleRacDetail\n   returned by `GET /oracle/rac/{id}`.\n * Added new field `slaLastUpdateTime` to OracleRacDetail\n   returned by `PATCH /oracle/rac/{id}`.\n * Added new field `slaLastUpdateTime` to OracleRacSummary\n   returned by `GET /oracle/rac`.\n * Added new field `slaLastUpdateTime` to Snappable\n   returned by POST `/polaris/failover/recovery_spec/upsert`.\n * Added new field `slaLastUpdateTime` to SnappableRecoverySpec\n   returned by POST `/polaris/failover/recovery_spec/upsert`.\n * Added new field `slaLastUpdateTime` to SnappableRecoverySpecDetails\n   returned by POST `/polaris/failover/recovery_spec/upsert`.\n * Added new field `slaLastUpdateTime` to StorageArrayHierarchyObjectSummary\n   returned by `GET /organization/{id}/storage/array`.\n * Added new field `slaLastUpdateTime` to StorageArrayHierarchyObjectSummary\n   returned by `GET /storage/array/hierarchy/{id}`.\n * Added new field `slaLastUpdateTime` to StorageArrayHierarchyObjectSummary\n   returned by `GET /storage/array/hierarchy/{id}/children`.\n * Added new field `slaLastUpdateTime` to StorageArrayHierarchyObjectSummary\n   returned by `GET /storage/array/hierarchy/{id}/descendants`.\n * Added new field `slaLastUpdateTime` to StorageArrayVolumeGroupDetail\n   returned by POST `/storage/array_volume_group`.\n * Added new field `slaLastUpdateTime` to StorageArrayVolumeGroupDetail\n   returned by `GET /storage/array_volume_group/{id}`.\n * Added new field `slaLastUpdateTime` to StorageArrayVolumeGroupDetail\n   returned by `PATCH /storage/array_volume_group/{id}`.\n * Added new field `slaLastUpdateTime` to StorageArrayVolumeGroupSummary\n   returned by `GET /storage/array_volume_group`.\n * Added new field `slaLastUpdateTime` to VcdClusterDetail\n   returned by `GET /vcd/cluster/{id}`.\n * Added new field `slaLastUpdateTime` to VcdClusterDetail\n   returned by `PATCH /vcd/cluster/{id}`.\n * Added new field `slaLastUpdateTime` to VcdClusterSummary\n   returned by `GET /vcd/cluster`.\n * Added new field `slaLastUpdateTime` to VcdHierarchyObjectSummary\n   returned by `GET /organization/{id}/vcd`.\n * Added new field `slaLastUpdateTime` to VcdHierarchyObjectSummary\n   returned by `GET /vcd/hierarchy/{id}`.\n * Added new field `slaLastUpdateTime` to VcdHierarchyObjectSummary\n   returned by `GET /vcd/hierarchy/{id}/children`.\n * Added new field `slaLastUpdateTime` to VcdHierarchyObjectSummary\n   returned by `GET /vcd/hierarchy/{id}/descendants`.\n * Added new field `slaLastUpdateTime` to VcdVappDetail\n   returned by `GET /vcd/vapp/{id}`.\n * Added new field `slaLastUpdateTime` to VcdVappDetail\n   returned by `PATCH /vcd/vapp/{id}`.\n * Added new field `slaLastUpdateTime` to VcdVappSnapshotDetail\n   returned by `GET /vcd/vapp/snapshot/{id}`.\n * Added new field `slaLastUpdateTime` to VcdVappSummary\n   returned by `GET /vcd/vapp`.\n * Added new field `slaLastUpdateTime` to VmwareVmMountSummary\n   returned by `GET /vmware/vm/snapshot/mount`.\n * Added new field `slaLastUpdateTime` to VolumeGroupDetail\n   returned by `GET /volume_group/{id}`.\n * Added new field `slaLastUpdateTime` to VolumeGroupDetail\n   returned by `PATCH /volume_group/{id}`.\n * Added new field `slaLastUpdateTime` to VolumeGroupSummary\n   returned by `GET /volume_group`.\n * Added new field `slaLastUpdateTime` to VsphereCategory\n   returned by `GET /vmware/vcenter/{id}/tag_category`.\n * Added new field `slaLastUpdateTime` to VsphereCategory\n   returned by `GET /vmware/vcenter/tag_category/{tag_category_id}`.\n * Added new field `slaLastUpdateTime` to VsphereTag\n   returned by `GET /vmware/vcenter/{id}/tag`.\n * Added new field `slaLastUpdateTime` to VsphereTag\n   returned by `GET /vmware/vcenter/tag/{tag_id}`.\n * Added new Field `configuredSlaDomainType` to AppBlueprintDetail returned by\n   `POST /polaris/app_blueprint`.\n * Added new Field `configuredSlaDomainType` to AppBlueprintDetail returned by\n   `GET /app_blueprint/{id}`.\n * Added new Field `configuredSlaDomainType` to AppBlueprintDetail returned by\n  `PATCH /polaris/app_blueprint/{id}`.\n * Added new Field `configuredSlaDomainType` to\n   AppBlueprintExportSnapshotJobConfig returned by\n  `POST /polaris/app_blueprint/snapshot/{id}/export`.\n * Added new Field `configuredSlaDomainType` to\n   AppBlueprintInstantRecoveryJobConfig returned by\n    `POST /polaris/app_blueprint/snapshot/{id}/instant_recover`.\n * Added new Field `configuredSlaDomainType` to\n   AppBlueprintMountSnapshotJobConfig returned by\n    `POST /polaris/app_blueprint/snapshot/{id}/mount`.\n * Added new Field `configuredSlaDomainType` to AppBlueprintSummary returned by\n   `GET /app_blueprint`.\n * Added new Field `configuredSlaDomainType` to AwsAccountDetail returned by\n   `PATCH /aws/account/dca/{id}`.\n * Added new Field `configuredSlaDomainType` to AwsAccountDetail returned by\n   `GET /aws/account/{id}`.\n * Added new Field `configuredSlaDomainType` to AwsAccountDetail returned by\n   `PATCH /aws/account/{id}`.\n * Added new Field `configuredSlaDomainType` to AwsEc2InstanceDetail returned\n   by `GET /aws/ec2_instance/{id}`.\n * Added new Field `configuredSlaDomainType` to AwsEc2InstanceDetail returned\n   by `PATCH /aws/ec2_instance/{id}`.\n * Added new Field `configuredSlaDomainType` to AwsEc2InstanceSummary returned\n   by `GET /aws/ec2_instance`.\n * Added new Field `configuredSlaDomainType` to AwsHierarchyObjectSummary\n   returned by `GET /aws/hierarchy/{id}`.\n * Added new Field `configuredSlaDomainType` to AwsHierarchyObjectSummary\n   returned by `GET /aws/hierarchy/{id}/children`.\n * Added new Field `configuredSlaDomainType` to AwsHierarchyObjectSummary\n   returned by `GET /aws/hierarchy/{id}/descendants`.\n * Added new Field `configuredSlaDomainType` to AwsHierarchyObjectSummary\n   returned by `GET /organization/{id}/aws`.\n * Added new Field `configuredSlaDomainType` to DataCenterDetail returned by\n   `GET /vmware/data_center/{id}`.\n * Added new Field `configuredSlaDomainType` to DataCenterSummary returned by\n   `GET /vmware/data_center`.\n * Added new Field `configuredSlaDomainType` to DataStoreDetail returned by\n   `GET /vmware/datastore/{id}`.\n * Added new Field `configuredSlaDomainType` to FilesetDetail returned by\n   `POST /fileset/bulk`.\n * Added new Field `configuredSlaDomainType` to FolderDetail returned by\n   `GET /folder/host/{datacenter_id}`.\n * Added new Field `configuredSlaDomainType` to FolderDetail returned by\n   `GET /folder/vm/{datacenter_id}`.\n * Added new Field `configuredSlaDomainType` to FolderDetail returned by\n   `GET /folder/{id}`.\n * Added new Field `configuredSlaDomainType` to HostFilesetDetail returned by\n   `GET /host_fileset/{id}`.\n * Added new Field `configuredSlaDomainType` to HostFilesetShareDetail returned\n   by `GET /host_fileset/share/{id}`.\n * Added new Field `configuredSlaDomainType` to HostFilesetShareSummary\n   returned by `GET /host_fileset/share`.\n * Added new Field `configuredSlaDomainType` to HostFilesetSummary returned by\n   `GET /host_fileset`.\n * Added new Field `configuredSlaDomainType` to HypervClusterDetail returned by\n   `GET /hyperv/cluster/{id}`.\n * Added new Field `configuredSlaDomainType` to HypervClusterDetail returned by\n   `PATCH /hyperv/cluster/{id}`.\n * Added new Field `configuredSlaDomainType` to HypervClusterSummary returned\n   by `GET /hyperv/cluster`.\n * Added new Field `configuredSlaDomainType` to HypervHierarchyObjectSummary\n   returned by `GET /hyperv/hierarchy/{id}`.\n * Added new Field `configuredSlaDomainType` to HypervHierarchyObjectSummary\n   returned by `GET /hyperv/hierarchy/{id}/children`.\n * Added new Field `configuredSlaDomainType` to HypervHierarchyObjectSummary\n   returned by `GET /hyperv/hierarchy/{id}/descendants`.\n * Added new Field `configuredSlaDomainType` to HypervHierarchyObjectSummary\n   returned by `GET /organization/{id}/hyperv`.\n * Added new Field `configuredSlaDomainType` to HypervHostDetail returned by\n   `GET /hyperv/host/{id}`.\n * Added new Field `configuredSlaDomainType` to HypervHostDetail returned by\n   `PATCH /hyperv/host/{id}`.\n * Added new Field `configuredSlaDomainType` to HypervHostSummary returned by\n   `GET /hyperv/host`.\n * Added new Field `configuredSlaDomainType` to HypervScvmmDetail returned by\n   `GET /hyperv/scvmm/{id}`.\n * Added new Field `configuredSlaDomainType` to HypervScvmmDetail returned by\n   `PATCH /hyperv/scvmm/{id}`.\n * Added new Field `configuredSlaDomainType` to HypervScvmmSummary returned by\n   `GET /hyperv/scvmm`.\n * Added new Field `configuredSlaDomainType` to HypervVirtualMachineDetail\n   returned by `GET /hyperv/vm/{id}`.\n * Added new Field `configuredSlaDomainType` to HypervVirtualMachineDetail\n   returned by `PATCH /hyperv/vm/{id}`.\n * Added new Field `configuredSlaDomainType` to HypervVirtualMachineSummary\n   returned by `GET /hyperv/vm`.\n * Added new Field `configuredSlaDomainType` to ManagedHierarchyObjectSummary\n   returned by `GET /hierarchy/{id}`.\n * Added new Field `configuredSlaDomainType` to ManagedHierarchyObjectSummary\n   returned by `GET /hierarchy/{id}/sla_conflicts`.\n * Added new Field `configuredSlaDomainType` to ManagedVolumeSummary returned\n   by `GET /managed_volume`.\n * Added new Field `configuredSlaDomainType` to ManagedVolumeSummary returned\n   by `POST /managed_volume`.\n * Added new Field `configuredSlaDomainType` to ManagedVolumeSummary returned\n   by `GET /managed_volume/{id}`.\n * Added new Field `configuredSlaDomainType` to ManagedVolumeSummary returned\n   by `PATCH /managed_volume/{id}`.\n * Added new Field `configuredSlaDomainType` to ManagedVolumeSummary returned\n   by `GET /organization/{id}/managed_volume`.\n * Added new Field `configuredSlaDomainType` to MountDetail returned by\n   `GET /vmware/vm/snapshot/mount/{id}`.\n * Added new Field `configuredSlaDomainType` to NutanixHierarchyObjectSummary\n   returned by `GET /nutanix/hierarchy/{id}`.\n * Added new Field `configuredSlaDomainType` to NutanixHierarchyObjectSummary\n   returned by `GET /nutanix/hierarchy/{id}/children`.\n * Added new Field `configuredSlaDomainType` to NutanixHierarchyObjectSummary\n   returned by `GET /nutanix/hierarchy/{id}/descendants`.\n * Added new Field `configuredSlaDomainType` to NutanixHierarchyObjectSummary\n   returned by `GET /organization/{id}/nutanix`.\n * Added new Field `configuredSlaDomainType` to OracleDbDetail returned by\n   `GET /oracle/db/{id}`.\n * Added new Field `configuredSlaDomainType` to OracleDbDetail returned by\n   `PATCH /oracle/db/{id}`.\n * Added new Field `configuredSlaDomainType` to OracleDbSummary returned by\n   `GET /oracle/db`.\n * Added new Field `configuredSlaDomainType` to OracleHierarchyObjectSummary\n   returned by `GET /oracle/hierarchy/{id}`.\n * Added new Field `configuredSlaDomainType` to OracleHierarchyObjectSummary\n   returned by `GET /oracle/hierarchy/{id}/children`.\n * Added new Field `configuredSlaDomainType` to OracleHierarchyObjectSummary\n   returned by `GET /oracle/hierarchy/{id}/descendants`.\n * Added new Field `configuredSlaDomainType` to OracleHierarchyObjectSummary\n   returned by `GET /organization/{id}/oracle`.\n * Added new Field `configuredSlaDomainType` to OracleHostDetail returned by\n   `GET /oracle/host/{id}`.\n * Added new Field `configuredSlaDomainType` to OracleHostDetail returned by\n   `PATCH /oracle/host/{id}`.\n * Added new Field `configuredSlaDomainType` to OracleHostSummary returned by\n   `GET /oracle/host`.\n * Added new Field `configuredSlaDomainType` to OracleRacDetail returned by\n   `GET /oracle/rac/{id}`.\n * Added new Field `configuredSlaDomainType` to OracleRacDetail returned by\n   `PATCH /oracle/rac/{id}`.\n * Added new Field `configuredSlaDomainType` to OracleRacSummary returned by\n   `GET /oracle/rac`.\n * Added new Field `configuredSlaDomainType` to SlaConflictsSummary returned by\n   `POST /hierarchy/bulk_sla_conflicts`.\n * Added new Field `configuredSlaDomainType` to Snappable returned by\n   `POST /polaris/failover/recovery_spec/upsert`.\n * Added new Field `configuredSlaDomainType` to SnappableRecoverySpec returned\n   by `POST /polaris/failover/recovery_spec/upsert`.\n * Added new Field `configuredSlaDomainType` to SnappableRecoverySpecDetails\n   returned by `POST /polaris/failover/recovery_spec/upsert`.\n * Added new Field `configuredSlaDomainType` to\n   StorageArrayHierarchyObjectSummary returned by\n   `GET /organization/{id}/storage/array`.\n * Added new Field `configuredSlaDomainType` to\n   StorageArrayHierarchyObjectSummary returned by\n    `GET /storage/array/hierarchy/{id}`.\n * Added new Field `configuredSlaDomainType` to\n   StorageArrayHierarchyObjectSummary returned by\n    `GET /storage/array/hierarchy/{id}/children`.\n * Added new Field `configuredSlaDomainType` to\n   StorageArrayHierarchyObjectSummary returned by\n   `GET /storage/array/hierarchy/{id}/descendants`.\n * Added new Field `configuredSlaDomainType` to StorageArrayVolumeGroupDetail\n   returned by `POST /storage/array_volume_group`.\n * Added new Field `configuredSlaDomainType` to StorageArrayVolumeGroupDetail\n   returned by `GET /storage/array_volume_group/{id}`.\n * Added new Field `configuredSlaDomainType` to StorageArrayVolumeGroupDetail\n   returned by `PATCH /storage/array_volume_group/{id}`.\n * Added new Field `configuredSlaDomainType` to StorageArrayVolumeGroupSummary\n   returned by `GET /storage/array_volume_group`.\n * Added new Field `configuredSlaDomainType` to\n   TriggerFailoverOnTargetDefinition returned by\n   `PUT /polaris/failover/target/{id}/start`.\n * Added new Field `configuredSlaDomainType` to\n   TriggerFailoverOnTargetDefinition returned by\n    `PUT /polaris/failover/target/{id}/resume`.\n * Added new Field `configuredSlaDomainType` to\n   UnmanagedObjectSummary returned by `GET /unmanaged_object`.\n * Added new Field `configuredSlaDomainType` to\n   UpsertSnappableRecoverySpecResponse returned by\n   `POST /polaris/failover/recovery_spec/upsert`.\n * Added new Field `configuredSlaDomainType` to VcdClusterDetail returned by\n   `GET /vcd/cluster/{id}`.\n * Added new Field `configuredSlaDomainType` to VcdClusterDetail returned by\n   `PATCH /vcd/cluster/{id}`.\n * Added new Field `configuredSlaDomainType` to VcdClusterSummary returned by\n   `GET /vcd/cluster`.\n * Added new Field `configuredSlaDomainType` to VcdHierarchyObjectSummary\n   returned by `GET /organization/{id}/vcd`.\n * Added new Field `configuredSlaDomainType` to VcdHierarchyObjectSummary\n   returned by `GET /vcd/hierarchy/{id}`.\n * Added new Field `configuredSlaDomainType` to VcdHierarchyObjectSummary\n   returned by `GET /vcd/hierarchy/{id}/children`.\n * Added new Field `configuredSlaDomainType` to VcdHierarchyObjectSummary\n   returned by `GET /vcd/hierarchy/{id}/descendants`.\n * Added new Field `configuredSlaDomainType` to VcdVappDetail returned by\n   `GET /vcd/vapp/{id}`.\n * Added new Field `configuredSlaDomainType` to VcdVappDetail returned by\n   `PATCH /vcd/vapp/{id}`.\n * Added new Field `configuredSlaDomainType` to VcdVappSnapshotDetail returned\n   by `GET /vcd/vapp/snapshot/{id}`.\n * Added new Field `configuredSlaDomainType` to VcdVappSummary returned by\n   `GET /vcd/vapp`.\n * Added new Field `configuredSlaDomainType` to VmwareVmMountSummary returned\n   by `GET /vmware/vm/snapshot/mount`.\n * Added new Field `configuredSlaDomainType` to VolumeGroupDetail returned by\n   `GET /volume_group/{id}`.\n * Added new Field `configuredSlaDomainType` to VolumeGroupDetail returned by\n   `PATCH /volume_group/{id}`.\n * Added new Field `configuredSlaDomainType` to VolumeGroupSummary returned by\n   `GET /volume_group`.\n * Added new Field `configuredSlaDomainType` to VsphereCategory returned by\n   `GET /vmware/vcenter/{id}/tag_category`.\n * Added new Field `configuredSlaDomainType` to VsphereCategory returned by\n  `GET /vmware/vcenter/tag_category/{tag_category_id}`.\n * Added new Field `configuredSlaDomainType` to VsphereTag returned by\n   `GET /vmware/vcenter/{id}/tag`.\n * Added new Field `configuredSlaDomainType` to VsphereTag returned by\n  `GET /vmware/vcenter/tag/{tag_id}`.\n * Added a new optional query parameter `name` to\n   `GET /user/{id}/organization`.\n * Added new field `hostLogRetentionHours` to OracleDbSummary returned by\n   `GET /oracle/db`.\n * Added new field `isCustomRetentionApplied` to AppBlueprintSnapshotSummary\n   returned by `GET /app_blueprint/{id}/snapshot`.\n * Added new field `isCustomRetentionApplied` to AppBlueprintSnapshotDetail\n   returned by `GET /app_blueprint/snapshot/{id}` .\n * Added new field `isCustomRetentionApplied` to AwsEc2InstanceSummary returned\n   by `GET /aws/ec2_instance`.\n * Added new field `isCustomRetentionApplied` to AwsEc2InstanceDetail returned\n   by `GET /aws/ec2_instance/{id}`.\n * Added new field `isCustomRetentionApplied` to AwsEc2InstanceDetail returned\n   by `PATCH /aws/ec2_instance/{id}`.\n * Added new field `isCustomRetentionApplied` to\n   HypervVirtualMachineSnapshotSummary returned by\n  `GET /hyperv/vm/{id}/snapshot`.\n * Added new field `isCustomRetentionApplied` to\n   HypervVirtualMachineSnapshotDetail returned by\n   `GET /hyperv/vm/snapshot/{id}`.\n * Added new field `isCustomRetentionApplied` to ManagedVolumeSnapshotSummary\n   returned by `GET /managed_volume/{id}/snapshot`.\n * Added new field `isCustomRetentionApplied` to ManagedVolumeSnapshotSummary\n   returned by `POST /managed_volume/{id}/end_snapshot`.\n * Added new field `isCustomRetentionApplied` to ManagedVolumeSnapshotDetail\n   returned by `GET /managed_volume/snapshot/{id}`.\n * Added new field `isCustomRetentionApplied` to NutanixVmSnapshotSummary\n   returned by `GET /nutanix/vm/{id}/snapshot`.\n * Added new field `isCustomRetentionApplied` to NutanixVmSnapshotDetail\n   returned by `GET /nutanix/vm/snapshot/{id}`.\n * Added new field `isCustomRetentionApplied` to OracleDbSnapshotSummary\n   returned by `GET /oracle/db/{id}/snapshot`.\n * Added new field `isCustomRetentionApplied` to OracleDbSnapshotDetail returned\n   by `GET /oracle/db/snapshot/{id}`.\n * Added new field `isCustomRetentionApplied` to\n   StorageArrayVolumeGroupSnapshotSummary returned by\n   `GET /storage/array_volume_group/{id}/snapshot`.\n * Added new field `isCustomRetentionApplied` to\n   StorageArrayVolumeGroupSnapshotDetail returned by\n   `GET /storage/array_volume_group/snapshot/{id}`.\n * Added new field `isCustomRetentionApplied` to VcdVappSnapshotSummary returned\n   by `GET /vcd/vapp/{id}/snapshot`.\n * Added new field `isCustomRetentionApplied` to VcdVappSnapshotDetail returned\n   by `GET /vcd/vapp/snapshot/{id}`.\n * Added new field `isCustomRetentionApplied` to VolumeGroupSnapshotSummary\n   returned by `GET /volume_group/{id}/snapshot`.\n * Added new field `isCustomRetentionApplied` to VolumeGroupSnapshotDetail\n   returned by `GET /volume_group/snapshot/{id}`.\n * Added optional field `isQueuedSnapshot` to the response of\n   GET `/managed_volume/{id}/snapshot`, GET `/managed_volume/snapshot/{id}`.\n   and POST `/managed_volume/{id}/end_snapshot`.\n   The field specifies if ManagedVolume snapshots are in queue to be stored\n   as patch file.\n * Added new field `securityLevel` to `SnmpTrapReceiverConfig` object as\n   optional input parameter for SNMPv3, which is used in\n   `PATCH /cluster/{id}/snmp_configuration` and\n   `GET /cluster/{id}/snmp_configuration`.\n * Added new field `advancedRecoveryConfigBase64` to `ExportOracleDbConfig`.\n   and `MountOracleDbConfig` objects as optional input parameter\n   during Oracle recovery.\n * Added new optional field `isRemote` to UnmanagedObjectSummary object, which\n   is returned from a `GET /unmanaged_object` call.\n * Added new field `hostLogRetentionHours` to OracleRacDetail returned by\n   `GET /oracle/rac/{id}` and `PATCH /oracle/rac/{id}`.\n * Added new field `hostLogRetentionHours` to OracleHostDetail returned by\n   `GET /oracle/host/{id}` and `PATCH /oracle/host/{id}`.\n * Added new field `hostLogRetentionHours` to OracleDbDetail returned by\n   `GET /oracle/db/{id}` and `PATCH /oracle/db/{id}`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of AppBlueprintSnapshotSummary returned\n   by `GET /app_blueprint/{id}/snapshot`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of AppBlueprintSnapshotDetail returned by\n   `GET /app_blueprint/snapshot/{id}` .\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of AwsEc2InstanceSummary returned by\n   `GET /aws/ec2_instance`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of AwsEc2InstanceDetail returned by\n   `GET /aws/ec2_instance/{id}`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of AwsEc2InstanceDetail returned by\n   `PATCH /aws/ec2_instance/{id}`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of HypervVirtualMachineSnapshotSummary\n   returned by `GET /hyperv/vm/{id}/snapshot`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of HypervVirtualMachineSnapshotDetail\n   returned by `GET /hyperv/vm/snapshot/{id}`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of ManagedVolumeSnapshotSummary returned\n   by `GET /managed_volume/{id}/snapshot`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of ManagedVolumeSnapshotSummary returned by\n   `POST /managed_volume/{id}/end_snapshot`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of ManagedVolumeSnapshotDetail returned\n    by `GET /managed_volume/snapshot/{id}`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of NutanixVmSnapshotSummary returned by\n   `GET /nutanix/vm/{id}/snapshot`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of NutanixVmSnapshotDetail returned by\n   `GET /nutanix/vm/snapshot/{id}`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of OracleDbSnapshotSummary returned by\n   `GET /oracle/db/{id}/snapshot`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of OracleDbSnapshotDetail returned by\n   `GET /oracle/db/snapshot/{id}`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of StorageArrayVolumeGroupSnapshotSummary\n   returned by `GET /storage/array_volume_group/{id}/snapshot`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of StorageArrayVolumeGroupSnapshotDetail\n   returned by `GET /storage/array_volume_group/snapshot/{id}`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of VcdVappSnapshotSummary returned by\n   `GET /vcd/vapp/{id}/snapshot`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of VcdVappSnapshotDetail returned by\n   `GET  /vcd/vapp/snapshot/{id}`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of VolumeGroupSnapshotSummary returned by\n   `GET /volume_group/{id}/snapshot`.\n * Added new field `snapshotFrequency` to `snapshotLocationRetentionInfo` field\n   of `SnapshotRetentionInfo` field of VolumeGroupSnapshotDetail returned by\n   `GET /volume_group/snapshot/{id}`.\n * Added new field `SnapshotRetentionInfo` to AppBlueprintSnapshotSummary\n   returned by `GET /app_blueprint/{id}/snapshot`.\n * Added new field `SnapshotRetentionInfo` to AppBlueprintSnapshotDetail\n   returned by `GET /app_blueprint/snapshot/{id}` .\n * Added new field `SnapshotRetentionInfo` to AwsEc2InstanceSummary returned\n   by `GET /aws/ec2_instance`.\n * Added new field `SnapshotRetentionInfo` to AwsEc2InstanceDetail returned\n   by `GET /aws/ec2_instance/{id}`.\n * Added new field `SnapshotRetentionInfo` to AwsEc2InstanceDetail returned\n   by `PATCH /aws/ec2_instance/{id}`.\n * Added new field `SnapshotRetentionInfo` to\n   HypervVirtualMachineSnapshotSummary returned by\n   `GET /hyperv/vm/{id}/snapshot`.\n * Added new field `SnapshotRetentionInfo` to\n   HypervVirtualMachineSnapshotDetail returned by\n   `GET /hyperv/vm/snapshot/{id}`.\n * Added new field `SnapshotRetentionInfo` to ManagedVolumeSnapshotSummary\n   returned by `GET /managed_volume/{id}/snapshot`.\n * Added new field `SnapshotRetentionInfo` to ManagedVolumeSnapshotSummary\n   returned by `POST /managed_volume/{id}/end_snapshot`.\n * Added new field `SnapshotRetentionInfo` to ManagedVolumeSnapshotDetail\n   returned by `GET /managed_volume/snapshot/{id}`.\n * Added new field `SnapshotRetentionInfo` to NutanixVmSnapshotSummary\n   returned by `GET /nutanix/vm/{id}/snapshot`.\n * Added new field `SnapshotRetentionInfo` to NutanixVmSnapshotDetail\n   returned by `GET /nutanix/vm/snapshot/{id}`.\n * Added new field `SnapshotRetentionInfo` to OracleDbSnapshotSummary\n   returned by `GET /oracle/db/{id}/snapshot`.\n * Added new field `SnapshotRetentionInfo` to OracleDbSnapshotDetail returned\n   by `GET /oracle/db/snapshot/{id}`.\n * Added new field `SnapshotRetentionInfo` to\n   StorageArrayVolumeGroupSnapshotSummary returned by\n   `GET /storage/array_volume_group/{id}/snapshot`.\n * Added new field `SnapshotRetentionInfo` to\n   StorageArrayVolumeGroupSnapshotDetail returned by\n   `GET /storage/array_volume_group/snapshot/{id}`.\n * Added new field `SnapshotRetentionInfo` to VcdVappSnapshotSummary returned\n   by `GET /vcd/vapp/{id}/snapshot`.\n * Added new field `SnapshotRetentionInfo` to VcdVappSnapshotDetail returned\n   by `GET /vcd/vapp/snapshot/{id}`.\n * Added new field `SnapshotRetentionInfo` to VolumeGroupSnapshotSummary\n   returned by `GET /volume_group/{id}/snapshot`.\n * Added new field `SnapshotRetentionInfo` to VolumeGroupSnapshotDetail\n   returned by `GET /volume_group/snapshot/{id}`.\n * Added optional field `networkInterface` to `NetworkThrottleUpdate`. The\n   field allows users to specify non standard network interfaces. This applies\n   to the `PATCH /network_throttle/{id}` endpoint.\n * Added mandatory field `networkInterface` to `NetworkThrottleSummary`.\n   This applies to the endpoints `GET /network_throttle` and\n   `GET /network_throttle/{id}`.\n * Added endpoint `POST /cluster/{id}/manual_discover`, which allows\n   the customer to manually input data that would be learned using\n   mDNS discovery. Returns same output as discover.\n * `PATCH /cluster/{id}/snmp_configuration` will now use\n   `SnmpConfigurationPatch` as a parameter.\n * Added optional field `user` to `SnmpTrapReceiverConfig`. The field\n   specifies which user to use for SNMPv3 traps.\n * Added optional field `users` to `SnmpConfiguration`. The field contains\n   usernames of users configured for SNMPv3.\n * Added two new models `SnmpUserConfig` to store user credentials and\n   `SnmpConfigurationPatch`.\n * Added new endpoint `POST /role/authorization_query` to get authorizations\n   granted to roles.\n * Added new endpoint `GET /role/{id}/authorization` to get authorizations\n   granted to a role.\n * Added new endpoint `POST /role/{id}/authorization` to grant authorizations\n   to a role.\n * Added new endpoint `POST /role/{id}/authorization/bulk_revoke` to revoke\n   authorizations from a role.\n * Added optional field `recoveryInfo` to UnmanagedObjectSummary.\n * Added optional field `isRetentionLocked` to SlaInfo.\n   The parameter indicates that the SLA Domain associated with the job is a\n   Retention Lock SLA Domain.\n * Added optional field `legalHoldDownloadConfig` to\n   `FilesetDownloadFilesJobConfig`,`HypervDownloadFileJobConfig`,\n   `DownloadFilesJobConfig`,`ManagedVolumeDownloadFileJobConfig`,\n   `NutanixDownloadFilesJobConfig`,`StorageArrayDownloadFilesJobConfig`,\n   `VolumeGroupDownloadFilesJobConfig`.This is an optional argument\n   containing a Boolean parameter to depict if the download is being\n   triggered for Legal Hold use case. This change applies to\n   /fileset/snapshot/{id}/download_files,\n   /hyperv/vm/snapshot/{id}/download_file,\n   /vmware/vm/snapshot/{id}/download_files,\n   /managed_volume/snapshot/{id}/download_file,\n   /nutanix/vm/snapshot/{id}/download_files,\n   /storage/array_volume_group/snapshot/{id}/download_files and\n   /volume_group/snapshot/{id}/download_files endpoints.\n * Added optional field isPlacedOnLegalHold to BaseSnapshotSummary.\n   The Boolean parameter specifies whether the snapshot is placed under a\n   Legal Hold.\n * Added new endpoint `GET /ods_configuration`.\n   Returns the current configuration of on-demand snapshot handling.\n * Added new endpoint `PUT /ods_configuration`.\n   Update the configuration of on-demand snapshot handling.\n * Added two new models `OdsConfigurationSummary`,  `OdsPolicyOnPause` and a new\n   enum `SchedulingType`.\n * Added `odsPolicyOnPause` field in `OdsConfigurationSummary` to include the\n   policy followed by the on-demand snapshots, during an effective pause.\n * Added new enum field `schedulingType` in `OdsPolicyOnPause` to support\n   deferring the on-demand snapshots during an effective pause.\n * Added optional query parameter `show_snapshots_legal_hold_status` to\n   `GET /archive/location` endpoint, indicating if `isLegalHoldSnapshotPresent`.\n   field should be populated in response.\n * Added storage array volume group asynchronous request status endpoint\n   `GET /storage/array_volume_group/request/{id}`. Request statuses for\n   storage array volume groups which previously used\n   `/storage/array/request/{id}` must now use this new endpoint.\n * Added forceFull parameter to the properties of patch volume group object\n   to permit forcing a full snapshot for a specified volume group.\n * Added `isDcaAccountInstance` field to `AwsEc2InstanceSummary` to indicate\n   whether the EC2 instance belongs to a DCA account. This impacts the endpoints\n   `GET /aws/ec2_instance` and `GET /aws/ec2_instance/{id}`.\n * Added `encryptionKeyId` as an optional field in CreateCloudInstanceRequest\n   definition used in the on-demand API conversion API `/cloud_on/aws/instance`.\n   to support KMS encryption for CloudOn conversion in AWS.\n * Added new endpoint `GET /job/{id}/child_job_instance`.\n   Returns the child job instances (if any) spawned by the given parent job\n   instance. This endpoint requires a support token to access.\n * Updated `ArchivalLocationSummary` returned by `GET /archive/location`.\n   endpoint to include the `isConsolidationEnabled` field, to indicate\n   if consolidation is enabled for the given archival location.\n * Changed `encryptionPassword` parameter to optional in\n   `NfsLocationCreationDefinition` to support creating NFS archival location\n   without encryption via `POST /archive/nfs`.\n * Added an optional parameter `disabledEncryption` to\n   `NfsLocationCreationDefinition` with a default value of false, to enable or\n   disable encryption via `POST /archive/nfs`.\n * Added a new model `ValidationResponse` and REST API endpoints\n   `/cloud_on/validate/instantiate_on_cloud` and\n   `/cloud_on/validate/cloud_image_conversion` for validation of cloud\n   conversion.\n * Added `sortBy` and `sortOrder` parameters to `GET /hyperv/vm/snapshot/mount`.\n   to allow  sorting of Hyper-V mounts.\n   Added the enum `HypervVirtualMachineMountListSortAttribute`, defining which\n   properties of Hyper-V mounts are sortable.\n * Added an optional field `shouldApplyToExistingSnapshots` in\n   `SlaDomainAssignmentInfo` to apply the new SLA configuration to existing\n   snapshots of protected objects.\n * Added a new optional field `isOracleHost` to `HostRegister` in\n   `POST /host/bulk` and `HostUpdate` in `PATCH /host/bulk` to indicate if we\n   should discover Oracle information during registration and host refresh.\n * Added a new model `NutanixVirtualDiskSummary` that is returned by\n   `GET /nutanix/vm/{id}` to include the disks information for a Nutanix\n   virtual machine.\n * Added mandatory field `pendingSnapshot` to `SystemStorageStats`, which is\n   returned by `GET /stats/system_storage`.\n * Added optional isIsilonChangelistEnabled in the NasBaseConfig and NasConfig.\n   NasBaseConfig is returned as part of HostSummary, which is returned by the\n   `Get /host/envoy` and `Get /host` endpoints. NasConfig is used by\n   HostRegister and HostUpdate. The HostRegister is used by the\n   `Post /host/bulk` endpoint and the HostUpdate is used by the\n   `PATCH /host/bulk` endpoint.\n * Added a new model `HostShareParameters`. This model has two fields,\n   isNetAppSnapDiffEnabled and isIsilonChangelistEnabled. The\n   isNetAppSnapDiffEnabled is a Boolean value that specifies whether the\n   SnapDiff feature of NetApp NAS is used to back up the NAS share. The\n   isIsilonChangelistEnabled is a Boolean value that specifies whether\n   the Changelist feature of Isilon NAS is used to back up the NAS share.\n * Added optional field `HostShareParameters` in `HostFilesetShareSummary`,\n   `HostFilesetShareDetail` and `HostShareDetail`. The HostShareDetail impacts\n   the endpoints `Get /host/share` and `Post /host/share`. The\n   `HostFilesetShareDetail` impacts the endpoint `Get /host_fileset/share/{id}`.\n   . The HostFilesetShareSummary impacts the endpoint\n   `Get /host_fileset/share`.\n * Added `isInVmc` in `GET /vcd/vapp/{id}`, and `PATCH /vcd/vapp/{id}`.\n   to return whether the virtual machine is in a VMC setup.\n * Added new endpoint `GET /vmware/hierarchy/{id}/export`. Returns the\n   VmwareHierarchyInfo object with the given ID.\n * Added optional field `platformDetails` to `PlatformInfo`, which is returned\n   by `GET /cluster/{id}/platforminfo`.\n * Added optional field `cpuCount` to `PlatformInfo`, which is returned by\n   `GET /cluster/{id}/platforminfo`.\n * Added optional field `ramSize` to `PlatformInfo`, which is returned by\n   `GET /cluster/{id}/platforminfo`.\n * Added new value `RangeInTime` to `RecoveryPointType` enum, which is used in\n  the `ReportTableRequest` object for the POST `/report/{id}/table` and POST\n  `/report/data_source/table` endpoints.\n * Added the optional field `shouldForceFull` to `MssqlDbUpdate` object,\n   which is referred by `MssqlDbUpdateId`, which is referred as the\n   body parameter of `PATCH /mssql/db/bulk`.\n\n ### Changes to Internal API in Rubrik version 5.1.1\n ## Breaking changes:\n * Changed response code of a successful\n   `POST /managed_volume/{id}/begin_snapshot` API from 201 to 200.\n\n ### Changes to Internal API in Rubrik version 5.1.0\n ## Breaking changes:\n * Changed response type of percentInCompliance and percentOutOfCompliance\n   in ComplianceSummary to double.\n * Renamed new enum field `MissedSnapshots` to `MissedLocalSnapshots`.\n   and `LastSnapshot` to `LatestLocalSnapshot`, in the\n   following properties:\n   measure property in ChartSummary, column property in TableSummary,\n   and sortBy property in ReportTableRequest.\n * Renamed effectiveThroughput to throughput in EventSeriesMonitoredJobSummary.\n * Renamed realThroughput to throughput in EventSeriesSummary.\n * Updated response of GET /event_series/{id} to remove effectiveThroughput.\n * Renamed paths `/storage/array/volume/group` to `/storage/array_volume_group`.\n * Renamed the field cassandraSetup in ReplaceNodeStatus to metadataSetup\n * Renamed the field cassandraSetup in RecommisionNodeStatus to metadataSetup\n * Renamed the field cassandraSetup in AddNodesStatus to metadataSetup\n * Renamed the field cassandraSetup in ClusterConfigStatus to metadataSetup\n * Renamed the field removeCassandra in RemoveNodeStatus to removeMetadatastore\n   for the GET /cluster/{id}/remove_node endpoint.\n * Moved the `GET /blackout_window` endpoint from internal to V1.\n * Moved the `PATCH /blackout_window` endpoint from internal to V1.\n * Removed endpoint POST /report/global_object endpoint.\n   /report/data_source/table can be used to get the same information.\n * Made accessKey optional in ObjectStoreLocationDetail as accessKey is not\n   defined in Cross Account Role Based locations. Also made accessKey required\n   again in ObjectStoreLocationDefinition.\n * Removed `progressPercentage` from `EventSeriesMonitoredJobSummary` object.\n * Removed endpoint `POST cluster-id-security-password-strength` since it is\n   no longer used at bootstrap.\n * Moved the GET `/mssql/hierarchy/{id}/descendants` and\n   GET `/mssql/hierarchy/{id}/children` endpoints from internal to v1.\n\n ## Feature Additions/improvements:\n * GET POST /cluster/{id}/node now accepts an optional encryption\n   password in the encryptionPassword field.\n * GET /node_management/replace_node now accepts an optional encryption\n   password in the encryptionPassword field.\n * Added optional field `shouldSkipScheduleRecoverArchivedMetadataJob` to\n   the body parameter of `POST /archive/object_store/reader/connect`, to\n   determine whether to schedule the archival recovery job.\n   When the value is 'false,' the recovery job is scheduled normally.\n   When the value is 'true,' the recovery job is not scheduled.\n   The default behavior is to schedule the recovery job.\n * Added mandatory field `cdp` to SystemStorageStats.\n * Added optional field `agentStatus` to NutanixHierarchyObjectSummary.\n   The field indicates whether a Rubrik backup agent is registered to the\n   Nutanix object.\n * Added optional field `shouldUseAgent` to `RestoreFilesJobConfig`.\n   in `POST /vmware/vm/snapshot/{id}/restore_files` to specify\n   whether to use Rubrik Backup Service to restore files. Default value is true.\n * GET /managed_object/bulk/summary and GET\n   /managed_object/{managed_id}/summary no longer include archived objects\n   with no unexpired snapshots in their results.\n * Added new required Boolean field `isDbLocalToTheCluster` to\n   `OracleDbSummary` and `OracleDbDetail`.\n * Added optional field `awsAccountId` to ObjectStoreLocationSummary.\n * Added optional field `shouldRecoverSnappableMetadataOnly` to all the\n   reader location connect definitions.\n * Added new enum value `ArchivalComplianceStatus` to the following properties:\n   attribute property in ChartSummary and column property in TableSummary\n * Added new enum fields `ArchivalInComplianceCount`,\n   `ArchivalNonComplianceCount` and `MissedArchivalSnapshots` to the\n   following properties:\n   measure property in ChartSummary, column property in TableSummary,\n   and sortBy property in ReportTableRequest.\n * GET /managed_object/bulk/summary and GET\n   /managed_object/{managed_id}/summary will always include the correct relic\n   status for hosts and their descendants.\n * Added field `isLocked` to PrincipalSummary.\n * Added optional query parameter `snappableStatus` to /vmware/data_center and\n   /vmware/host. This parameter enables a user to fetch the set of protectable\n   objects from the list of objects visible to that user.\n * Added optional field `archivalComplianceStatus` to RequestFilters\n * Added optional field `archivalComplianceStatus` to FilterSummary\n * Added optional field `alias` to HostSummary, HostRegister, and HostUpdate\n   schemas. This field will allow the user to specify an alias for each host\n   which can be used for search.\n * Added optional field `subnet` to ManagedVolumeExportConfig\n * Added optional field `status` to oracle/hierarchy/{id}/children\n * Added optional field `status` to oracle/hierarchy/{id}/descendants\n * Added optional field `status` to hyperv/hierarchy/{id}/children\n * Added optional field `status` to hyperv/hierarchy/{id}/descendants\n * Added optional field `numNoSla` to ProtectedObjectsCount\n * Added optional field `numDoNotProtect` to ProtectedObjectsCount\n * Added optional field `limit`, `offset`, `sort_by`, `sort_order` to\n   /node/stats\n * Added optional field encryptionAtRestPassword to configure password-based\n   encryption for an edge instance.\n * Added new endpoint GET /report/data_source/{data_source_name}/csv.\n * Added new endpoint POST /report-24_hour_complianace_summary.\n * Added new endpoint POST /report/data-source/{data_source_name} to get\n   columns directly from report data source.\n * Added optional field compliance24HourStatus to RequestFilters object.\n * Added the `port` optional field to QstarLocationDefinition. The `port` field\n   enables a user to specify the server port when adding a new location or\n   editing an existing location.\n * Added optional field archivalTieringSpec to ArchivalSpec and ArchivalSpecV2\n   to support archival tiering. This enables the user to configure either\n   Instant Tiering or Smart Tiering (with a corresponding minimum accessible\n   duration) on an SLA domain with archival configured to an Azure archival\n   location.\n * Updated endpoints /vcd/vapp, /oracle/db and /aws/ec2_instance\n   to have a new optional query paramter, indicating if backup task information\n   should be included.\n * Added optional field logConfig to SlaDomainSummaryV2, SlaDomainDefinitionV2\n   and SlaDomainPatchDefintionV2 to support CDP (ctrlc). The parameters\n   distinguish SLAs with CDP enabled from SLAs with CDP disabled, and enable\n   users to specify log retention time. The field also provides an optional\n   frequency parameter whhich can be used by Oracle and SQL Server log backups.\n * Added optional field logRetentionLimit to ReplicationSpec to support\n   CDP replication. The field gives the retention limit for logs at the\n   specified location.\n * Moved the `GET /vmware/compute_cluster` endpoint from internal to V1.\n * Moved the `GET /vmware/compute_cluster/{id}` endpoint from internal to V1.\n * Changed the existing `PATCH mssql/db/bulk` endpoint to return an\n   unprotectable reason as a string in the `unprotectableReason` field instead\n   of a JSON struct.\n * Added optional field `kmsMasterKeyId` and changed the existing field\n   `pemFileContent` to optional field in `DcaLocationDefinition`.\n * Added new optional field `enableHardlinkSupport` to FilesetSummary and\n   FilesetCreate in `POST /fileset`, \"GET /fileset\" and \"PATCH /fileset/{id}\"\n   endpoints to enable recognition and deduplication of hardlinks in\n   fileset backup.\n * Added optional query parameter to `GET /archive/location` endpoint,\n   indicating if `isRetentionLockedSnapshotProtectedPresent` field should\n   be populated in response.\n * Added continuous data protection state for each VMware virtual machine\n * Added new endpoint `PUT /polaris/archive/proxy_setting`.\n * Added new endpoint `GET /polaris/archive/proxy_setting/{id}`.\n * Added new endpoint `DELETE /polaris/archive/proxy_setting/{id}`.\n * Added new endpoint `PUT /polaris/archive/aws_compute_setting`.\n * Added new endpoint `GET /polaris/archive/aws_compute_setting/{id}`.\n * Added new endpoint `DELETE /polaris/archive/aws_compute_setting/{id}`.\n * Added new endpoint `PUT /polaris/archive/azure_compute_setting`.\n * Added new endpoint `GET /polaris/archive/azure_compute_setting/{id}`.\n * Added new endpoint `DELETE /polaris/archive/azure_compute_setting/{id}`.\n * Added new endpoint `PUT /polaris/archive/aws_iam_location`.\n * Added new endpoint `GET /polaris/archive/aws_iam_location/{id}`.\n * Added new endpoint `PUT /polaris/archive/azure_oauth_location`.\n * Added new endpoint `GET /polaris/archive/azure_oauth_location/{id}`.\n * Added new endpoint `PUT /polaris/archive/aws_iam_customer_account`.\n * Added new endpoint `GET /polaris/archive/aws_iam_customer/{id}`.\n * Added new endpoint `DELETE /polaris/archive/aws_iam_customer/{id}`.\n * Added new endpoint `PUT /polaris/archive/azure_oauth_customer`.\n * Added new endpoint `GET /polaris/archive/azure_oauth_customer/{id}`.\n * Added new endpoint `DELETE /polaris/archive/azure_oauth_customer/{id}`.\n * Updated `ArchivalLocationSummary` returned by `GET /archive/location`.\n   endpoint to include `currentState` field, to indicate whether the archival\n   location is connected or temporarily disconnected.\n * Updated `ArchivalLocationSummary` returned by `GET /archive/location`.\n   endpoint to include `isComputeEnabled` field, to indicate whether the\n   archival location has cloud compute enabled.\n * Added optional field `cloudStorageTier` to `BaseSnapshotSummary`, to indicate\n   the current storage tier of the archived copy of a snapshot.\n * Added endpoint `PUT /polaris/archive/aws_iam_location/reader_connect`.\n   to connect as a reader to an IAM based AWS archival location.\n * Added endpoint `PUT /polaris/archive/azure_oauth_location/reader_connect`.\n   to connect as a reader to an OAuth based Azure archival location.\n * Added endpoint `POST polaris/archive/location/{id}/reader/promote`.\n   to promote the current cluster to be the owner of a specified IAM based AWS\n   archival location that is currently connected as a reader location.\n * Added endpoint `POST polaris/archive/location/{id}/reader/refresh`.\n   to sync the current reader cluster with the contents on the IAM based AWS\n   archival location.\n * Added effectiveSlaDomainName and effectiveSlaDomainSourceId fields\n   to `GET /vmware/vcenter/{id}/tag_category` response object.\n * Added effectiveSlaDomainName and effectiveSlaDomainSourceId fields\n   to `GET /vmware/vcenter/{id}/tag` response object.\n * Added continuous data protection status for reporting.\n * Added optional field `localCdpStatus` to the following components:\n   ChartSummary, TableSummary, ReportTableRequest, RequestFilters and\n   FilterSummary.\n * Added `ReportSnapshotIndexState` and `ReportObjectIndexType` to\n   `/internal_report_models/internal/definitions/enums/internal_report.yml`.\n * Added optional field `latestSnapshotIndexState` and `objectIndexType` to\n   the following components:\n   TableSummary, ReportTableRequest, RequestFilters and FilterSummary.\n * Added 24 hour continuous data protection healthy percentage for reporting.\n * Added optional field `PercentLocal24HourCdpHealthy` to the following\n   components: TableSummary, ReportTableRequest.\n * Added optional field `replicas` to MssqlHierarchyObjectSummary.\n * Added optional field `hosts` to MssqlHierarchyObjectSummary.\n * Added continuous data protection local log storage size and local throughput\n   consumption for reporting.\n * Added optional fields `localCdpThroughput` and `localCdpLogStorage` to the\n   following components: ChartSummary, TableSummary and ReportTableRequest.\n * Added optional field requestExclusionFilters to ReportTableRequest.\n * Added an optional field to ManagedVolumeSummary to retrieve the associated\n   subnet.\n * Added optional field isEffectiveSlaDomainRetentionLocked to Snappable.\n   The parameter depicts if the effective SLA domain for the snappable is\n   a Retention Lock SLA Domain.\n * Updated the set of possible continuous data protection statuses for each\n   VmwareVirtualMachine.\n * Added the optional field isEffectiveSlaDomainRetentionLocked to\n   FilesetSummary. The field is a Boolean that specifies whether the effective\n   SLA Domain of a fileset is retention locked.\n * Added optional field iConfiguredSlaDomainRetentionLocked to SlaAssignable.\n   The parameter depicts if the configured SLA domain for the object is a\n   Retention Lock SLA Domain.\n * Updated `ArchivalLocationSummary` returned by `GET /archive/location`.\n   endpoint to include the `isTieringSupported` field, to indicate\n   whether a given archival location supports tiering.\n * Added continuous data protection replication status for reporting.\n * Added CdpReplicationStatus as an optional field to the TableSummary and\n   ReportTableRequest components.\n * Added optional CdpReplicationStatus field to RequestFilters and\n   FiltersSummary.\n * Added optional field isEffectiveSlaDomainRetentionLocked to\n   SearchItemSummary. The Boolean parameter specifies whether the effective\n   SLA Domain for the search item is a Retention Lock SLA Domain.\n * Updated `OracleMountSummary` returned by GET /oracle/db/mount\n   endpoint to include the isInstantRecovered field, to indicate\n   whether the mount was created during an Instant Recovery or Live Mount.\n * Added optional field isEffectiveSlaDomainRetentionLocked to\n   ManagedObjectSummary. The Boolean parameter specifies whether the effective\n   SLA Domain for the search item is a Retention Lock SLA Domain.\n * Added optional field `isRetentionSlaDomainRetentionLocked` to\n   UnmanagedSnapshotSummary. The parameter indicates that the retention SLA\n   Domain associated with the snapshot is a Retention Lock SLA Domain.\n * Added optional field `isSlaRetentionLocked` to EventSeriesSummary.\n   The parameter indicates that the SLA Domain associated with the event\n   series is a Retention Lock SLA Domain.\n * Updated `ArchivalLocationSummary` returned by `GET /archive/location`.\n   endpoint to include the `isConsolidationEnabled` field, to indicate\n   if consolidation is enabled for the given archival location.\n * Added the `hasUnavailableDisks` field to `NodeStatus` to indicate whether a\n   node has unavailable (failed or missing) disks. This change affects the\n   endpoints `GET /cluster/{id}/node`, `GET /node`, `GET /node/{id}`, `GET\n   /node/stats`, and `GET /node/{id}/stats`.\n * Added optional NAS vendor type to the HostShareDetail\n   This change affectes the endpoints `Get /host/share`, `Post /host/share` and\n   `Get /host/share/{id}`.\n * Added optional isSnapdiffEnabled in the NasBaseConfig and NasConfig\n   NasBaseConfig is returned as part of HostSummary, which is returned by the\n   `Get /host/envoy` and `Get /host` endpoints. NasConfig is used by\n   HostRegister and HostUpdate. The HostRegister field is used by the\n   `Post /host/bulk` endpoint and the HostUpdate is field used by the\n   `PATCH /host/bulk` endpoint.\n * Added optional snapdiffUsed in the FilesetSnapshotSummary\n   The FilesetSnapshotSummary is used by FilesetDetail and\n   FilesetSnapshotDetail. This change affects the endpoints `Post\n   /fileset/bulk`, `Get /host_fileset/share/{id}` and\n   `Get /fileset/snapshot/{id}`.\n\n ### Changes to Internal API in Rubrik version 5.0.4\n ## Feature Additions/improvements:\n * Added objectState to FilterSummary which is part of body parameter of\n   PATCH/report/{id}\n * Added objectState to RequestFilters which is part of body parameter of\n   POST /report/data_source/table\n\n ### Changes to Internal API in Rubrik version 5.0.3\n ## Breaking changes:\n * Removed fields 'virtualMedia' and 'ssh' from IpmiAccess and\n   IpmiAccessUpdate.\n\n ## Feature Additions/improvements:\n * Added a new optional field 'oracleQueryUser' to HostRegister, HostUpdate\n   and HostDetail objects, for setting the Oracle username for account with\n   query privileges on the host. This applies to the following endpoints:\n   `POST /host/bulk`, `PATCH /host/{id}`, and `GET /host/{id}`.\n * Added a field `affectedNodeIds` to the `SystemStatus` object. This object is\n   returned by `GET /cluster/{id}/system_status`.\n * Made `nodeId` a required field of the `DiskStatus` object. This object, or\n   an object containing this object, is returned by the following endpoints:\n   `GET /cluster/{id}/disk`, `PATCH /cluster/{id}/disk/{disk_id}`, and\n   `GET /node/{id}`.\n\n ### Changes to Internal API in Rubrik version 5.0.2\n ## Feature Additions/improvements:\n * Added an optional fields `subnet` to `ManagedVolumeSummary` to retrieve the associated\n   subnet.\n * Added `tablespaces` field in `OracleDbSnapshotSummary` to include the list\n   of tablespaces in the Oracle database snapshot.\n * Added new endpoint `POST /hierarchy/bulk_sla_conflicts`.\n * Added optional field `limit`, `offset`, `sort_by`, `sort_order` to\n   `GET /node/stats`.\n * Added optional field `numNoSla` to `ProtectedObjectsCount`.\n * Added optional field `numDoNotProtect` to `ProtectedObjectsCount`.\n * Introduced optional field `logicalSize` to `VirtualMachineDetail`. This\n   field gives the sum of logical sizes of all the disks in the virtual\n   machine.\n * Added optional fields `nodeIds`, `slaId`, `numberOfRetries`, and\n   `isFirstFullSnapshot` to the response of `GET /event_series/{id}`.\n * Added `SapHanaLog` tag in `applicationTag` field of `ManagedVolumeConfig`.\n   for SAP HANA log managed volumes.\n * Added required field `dbSnapshotSummaries` in `OracleRecoverableRange` to include\n   the list of database snapshots in each Oracle recoverable range.\n * Added field `isOnline` to MssqlDbSummary and changed `hasPermissions` to\n   required field.\n * Added `DbTransactionLog` tag, in applicationTag field of\n   `ManagedVolumeConfig`, for generic log managed volumes. ApplicationTag has\n   to be specified in the request field of POST /managed_volume.\n\n ### Changes to Internal API in Rubrik version 5.0.1\n ## Breaking changes:\n * Removed `GET/POST /smb/enable_security` endpoints.\n * Changed the `objectId` type in `EventSeriesMonitoredJobSummary` and\n   `EventSeriesSummary` to a user-visible ID instead of a simple ID.\n * Updated endpoint `POST /smb/domain` to accept a list of domain controllers.\n * Removed endpoint `POST /report/global_object`.\n * Added optional field `kmsMasterKeyId` and changed the existing field\n   `pemFileContent` to optional field in `DcaLocationDefinition`.\n * Removed `progressPercentage` from `EventSeriesMonitoredJobSummary` object.\n\n ## Feature Additions/improvements:\n * Updated `ArchivalLocationSummary` returned by `GET /archive/location`.\n   endpoint to include `currentState` field, to indicate whether the archival\n   location is connected or temporarily disconnected.\n * Added optional field `subnet` to ManagedVolumeExportConfig.\n * Added the`PUT /smb/config` endpoint to manage SMB configuration.\n * Added the following two endpoints.\n   - `GET /stats/per_vm_storage`.\n   - `GET /stats/per_vm_storage/{vm_id}`.\n * Added optional field `isStickySmbService` to the response of\n   `GET /smb/domain` and `POST /smb/domain`.\n * Added new endpoint `GET /report/data_source/{data_source_name}/csv`.\n * Added new endpoint `POST /report_24_hour_complianace_summary`.\n * Added new endpoint `POST /report/data-source/{data_source_name}` to get\n   columns directly from report data source.\n * Added new report API endpoints:\n   - `GET /report/summary/physical_storage_time_series`.\n   - `GET /report/summary/average_local_growth_per_day`.\n * Added `GET /node/stats` which returns stats for all nodes.\n * Added `GET /cluster/{id}/security/password/zxcvbn` to return\n   the enabled or disabled status of ZXCVBN validation for new passwords.\n * Added `POST /cluster/{id}/security/password/zxcvbn` to toggle\n   ZXCVBN validation for new passwords.\n\n ### Changes to Internal API in Rubrik version 5.0.0\n ## Breaking changes:\n * Removed `/user_notification` endpoints.\n * Added `rawName` field in `ArchivalLocationSummary`, which contains the\n   raw name of the archival location.\n * Removed `shareType` from config field in PATCH /managedvolume request.\n * Changed `/cluster/me/ntp_server` endpoint to accept symmetric keys\n   and the corresponding hashing algorithm.\n * Removed `/job/type/prune_job_instances` endpoint.\n * Removed `/kmip/configuration` endpoint.\n * Removed `/session/api_token` endpoint.\n * Added `subnet` field in `ManagedVolumeConfig`, which specifies an outgoing\n   VLAN interface for a Rubrik node. This is a required value when creating a\n   managed volume on a Rubrik node that has multiple VLAN interfaces.\n * Removed the `VolumeGroupVolumeSummary`, and replaced it with\n   `HostVolumeSummary`.\n * Removed `volumeIdsIncludedInSnapshots` from `VolumeGroupDetail`.\n * Added new optional fields `mssqlCbtEnabled`, `mssqlCbtEffectiveStatus`,\n   `mssqlCbtDriverInstalled`, `hostVfdEnabled` and `hostVfdDriverState` to\n   GET /host/{id} response.\n * Responses for `/cluster/{id}/dns_nameserver` and\n   `/cluster/{id}/dns_search_domain` changed to be array of strings.\n * Added new required field `language` in `UserPreferencesInfo` for\n   GET /user/{id}/preferences and PATCH /user/{id}/preferences\n * Added new field `missedSnapshotTimeUnits` in `MissedSnapshot`.\n * Removed `localStorage` and `archiveStorage` from `UnmanagedSnapshotSummary`.\n * Moved the `Turn on or off a given AWS cloud instance` endpoint from PATCH of\n   `/cloud_on/aws/instance` to PATCH of `/cloud_on/aws/instance/{id}/cloud_vm`.\n   Also removed the `id` field from the definition of `CloudInstanceUpdate`.\n * Moved the `Turn on or off a given Azure cloud instance` endpoint from PATCH\n   of `/cloud_on/azure/instance` to PATCH of\n   `/cloud_on/azure/instance/{id}/cloud_vm`. Also removed the `id` field from\n   the definition of `CloudInstanceUpdate`.\n * Moved the `Delete a given AWS cloud instance` endpoint from DELETE of\n   `/cloud_on/aws/instance/{id}` to DELETE of\n   `/cloud_on/aws/instance/{id}/cloud_vm`.\n * Moved the `Delete a given Azure cloud instance` endpoint from DELETE of\n   `/cloud_on/azure/instance/{id}` to DELETE of\n   `/cloud_on/azure/instance/{id}/cloud_vm`.\n * Modified the existing endpoint DELETE `/cloud_on/aws/instance/{id}` to\n   remove entry of a given AWS cloud instance instead of terminating the\n   instance.\n * Modified the existing endpoint DELETE `/cloud_on/azure/instance/{id}` to\n   remove entry of a given Azure cloud instance instead of terminating the\n   instance.\n * Removed `/job/type/job-schedule_gc_job_start_time_now` endpoint. Use\n   endpoint POST `/job/type/garbageCollection` to schedule a GC job to\n   run now.\n * Removed `config` parameter from `/job/type/garbageCollection`.\n * Added optional parameter `jobInstanceId` to `EventSummary`.\n * Added `jobInstanceId` as a new optional query parameter for\n   GET /event_series/{id}/status endpoint.\n * Modified the endpoint GET /event_series/status to a POST and changed the\n   input parameter to a request body of type `EventSeriesDetail`.\n * Modified the endpoint PATCH /replication/target/{id} to take a request body\n   of type ReplicationTargetUpdate instead of ReplicationTargetDefinition.\n * Added Discovery EventType.\n * Added `name` and deprecated `hostname` in `HostSummary` and `HostDetail`.\n   response.\n * Added `isDeleted` and deprecated `isArchived` in MssqlDbReplica response.\n * Removed `GET /stats/cloud_storage` endpoint.\n * Removed DELETE /oracle/db/{id} endpoint to delete an Oracle database.\n * By default, a volume group is not associated with any volumes at creation\n   time. This default is a change from the 4.2 implementation, where newly\n   created volume groups contain all of the host volumes. On 5.0 clusters,\n   use the `GET /host/{id}/volume` endpoint to query all host volumes.\n\n ## Feature Additions/improvements:\n * Added new endpoint POST/report/data-source/{data_source_name} to get columns\n   directly from report data source.\n * Added optional field compliance24HourStatus to RequestFilters object.\n * Added GET /event/event_count-by-status to get job counts based on job status.\n * Added GET /event/event_count-by-job-type to get job counts based on job type.\n * Added GET /event_series endpoint to get all event series information in the\n   past 24 hours.\n * Added `oracleDatabase` to ManagedObjectDescendantCounts.\n * Introduced `POST /session/realm/{name}` endpoint to generate session\n   tokens in the LDAP display name of {name}.\n * Added optional `storageClass` field to `ObjectStoreReaderConnectDefinition`.\n   to store `storageClass` field for the newly connected reader location.\n * Added optional `encryptionType` field to `ObjectStoreLocationSummary` to\n   return encryption type used for an object store archival location.\n * Added a new endpoint POST /oracle/db/download/{snapshot_id} to download\n   a particular snapshot (and corresponding logs) for Oracle.\n * Added optional `ownerId` and `reference` fields to\n   `/managed_volume/{id}/begin_snapshot`.\n * Added new endpoints regarding references to Managed Volumes, which track\n   the processes writing to the Managed Volume.\n   - GET `/managed_volume/{id}/snapshot/{snapshot_id}/reference/{reference_id}`.\n     PUT `/managed_volume/{id}/snapshot/{snapshot_id}/reference/{reference_id}`.\n     PATCH\n     `/managed_volume/{id}/snapshot/{snapshot_id}/reference/{reference_id}`.\n     DELETE\n     `/managed_volume/{id}/snapshot/{snapshot_id}/reference/{reference_id}`.\n     are the endpoints for viewing, adding, editing and deleting a Managed\n     Volume snapshot reference respectively.\n * Added optional `apiToken` and `apiEndpoint` fields to NasConfig to support\n   Pure FlashBlade devices.\n * Added optional `smbValidIps`, `smbDomainName` and `smbValidUsers` fields\n   to `VolumeGroupMountSnapshotJobConfig` to support secure SMB.\n * Added optional `smbDomainName`, `smbValidIps`, `smbValidUsers` fields to\n   ManagedVolumeExportConfig to support secure SMB.\n * Added a new optional field `oracleSysDbaUser` to /host/{id} POST endpoint\n   during register host for setting the Oracle username for account with sysdba\n   privileges on this host.\n * Added a new endpoint DELETE /smb/domain/{domain_name} to delete the\n   SMB Domain.\n * Added a new endpoint POST /smb/domain/{domain_name}/join to configure\n   SMB Domain.\n * Added a new optional filed `oracleSysDbaUser` to /host/{id} endpoint for\n   changing the Oracle username for account with sysdba privileges on this\n   host.\n * Added a new endpoint POST /smb/enable_security to enable Live Mount\n   security\n * Made the `numChannels` field in ManagedVolumeConfig optional.\n * Added `applicationTag` field to ManagedVolumeConfig to specify workload\n   type for a managed volume.\n * Added Maintenance EventType\n * Added POST `/report/global_object` endpoint to directly query table data\n   from GlobalObject based on ReportTableRequest\n * Added new API endpoint GET `/diagnostic/snappable/{id}` returns\n   diagnostic information of all backup tasks of a data source.\n * Added new API endpoint GET `/diagnostic/snappable/{id}/latest` returns\n   diagnostic information of the most recent backup task of a data source.\n * Added `shareType` field to ManagedVolumeSummary and ManagedVolumeDetail.\n * Added oracle instant recovery API to trigger instant recovery of a\n   database.\n * Added RAC, Oracle host and Oracle database fields to the the oracle\n   hierarchy API\n * Added a new endpoint GET /smb/domain to get a list of discovered\n   SMB domains in the environment.\n * Added a new endpoint GET /notification_setting to get all Notification\n   Settings.\n * Added a new endpoint POST /notification_setting to create a new\n   Notification Setting.\n * Added a new endpoint GET /notification_setting/{id} to get a Notification\n   Setting specified by the input id.\n * Added a new endpoint PATCH /notification_setting/{id} to update the values\n   for a specified Notification Setting.\n * Added a new endpoint DELTE /notification_setting/{id} to delete a\n   specified Notification Setting.\n * Introduced `POST /oracle/db/snapshot/{id}/export/tablespace` endpoint to\n   trigger the export of a single tablespace in an Oracle database.\n * Added a new optional field `shouldRestoreFilesOnly` to POST\n   /oracle/db/snapshot/{id}/export endpoint, used when exporting an Oracle\n   database, to specify whether the user requires a full recovery of the\n   database or a restoration of the database files.\n * Added /oracle/hierarchy/{id}/children endpoint to get children of\n   object in Oracle hierarchy\n * Added /oracle/hierarchy/{id}/descendants endpoint to get descendants of\n   object in Oracle hierarchy\n * Added a new endpoint POST /fileset/{id}/unprotect, which can be used to\n   unprotect a fileset and specify a retention policy to apply to existing\n   snapshots.\n * Added a new optional field `existingSnapshotRetention` to POST\n   /sla_domain/{id}/assign, used when unprotecting an object, to specify whether\n   to retain existing snapshots according to the current SLA domain, keep\n   existing snapshots forever, or expire all snapshots immediately. If not\n   specified, this field will default to the existing behavior of keeping\n   snapshots forever.\n * Introduced `GET /kmip/client` endpoint to get the stored KMIP client\n   configuration.\n * Introduced `PUT /kmip/client` endpoint to set the KMIP client configuration.\n * Introduced `GET /kmip/server` endpoint to get stored KMIP server\n   information.\n * Introduced `PUT /kmip/server` endpoint to add a a KMIP server.\n * Introduced `DELETE /kmip/server` endpoint to remove a a KMIP server.\n * Introduced `POST /session` endpoint to generate session tokens.\n * Added a new optional field `mfaServerId` to /user endpoint for\n   associating a configured MFA server.\n * Added REST support for Oracle RAC, Oracle Host.\n   Updated the detail and summary for Oracle Database.\n * Added support to run on-demand backup jobs, export snapshots, live\n   mount for Oracle Database.\n * Introduced `POST /mfa/rsa/server` endpoint to\n   create a new RSA server configuration for MFA integration.\n * Introduced `GET /mfa/rsa/server` endpoint to\n   get a list of RSA server configured for MFA integration.\n * Introduced `PATCH /mfa/rsa/server/{id}` endpoint to\n   modify RSA server configuration.\n * Introduced `GET /mfa/rsa/server/{id}` endpoint to\n   get RSA server configuration.\n * Introduced `POST /mfa/initialize` to initialize an attempt\n   to perform Multifactor authentication for a user.\n * Introduced `POST /mfa/session` to perform Multifactor\n   authentication for a user.\n * Introduced `POST /session/api_token` to create an API Token.\n * Added a new optional field `isArrayEnabled` to `FilesetTemplateCreate`.\n   for creation of storage array-enabled fileset templates. We also include\n   this new field in `FilesetTemplateDetail`.\n * Added a new optional field `arraySpec` to `FilesetCreate` for\n   creation of storage array-enabled filesets. We also include\n   this new field in `FilesetSummary` and `FilesetDetail`.\n * Introduced `GET /cluster/{id}/is_azure_cloud_only` to query if the cluster\n   supports only Azure public cloud.\n * Introduced `POST /unmanaged_object/assign_retention_sla` to set Retention\n   SLA of unmanaged objects.\n * Introduced `POST /unmanaged_object/snapshot/assign_sla` to set Retention\n   SLA of unmanaged snapshots.\n * Introduced `POST /mssql/db/bulk/snapshot/{id}` to take an on-demand snapshot\n   of multiple SQL Server databases. The result of this asynchronous request\n   can be obtained from `GET /mssql/db/bulk/snapshot/{id}`.\n * Added a new field unprotectable_reasons to GET /mssql/db/{id} and\n   GET /mssql/instance/{id}. This field keeps track of the reasons that a\n   SQL Server database or instance cannot be protected by Rubrik.\n * Introduced a new `GET /cluster/me/login_banner` and\n   `PUT /cluster/me/login_banner` endpoints to get and set the banner\n   that displays after each successful login.\n * Introduced a new `GET /cluster/me/security_classification` and\n   `PUT /cluster/me/security_classification` endpoints to get and set\n   the security classification banner for the cluster. The cluster UI\n   displays the banner in the specified color.\n * Introduced `GET /cluster/{id}/security/rksupport_cred` to provide\n   the status of the rksupport credentials.\n * Introduced  `POST /cluster/{id}/security/rksupport_cred` to update\n   the cluster-wide credentials for the specified cluster.\n * Introduced `POST /vmware/vm/snapshot/{id}/mount_disks` to attach VMDKs\n   from a mount snapshot to an existing virtual machine\n * Introduced new `GET /host/{id}/volume` endpoint to query the HostVolume\n   from the host.\n * Added the `HostVolumeSummary`, which is the response of the endpoint\n   `GET /host/{id}/volume` and a part of `VolumeGroupDetail`.\n * Introduced a new `GET /volume_group/host_layout/{snapshot_id}` and\n   `GET /volume_group/{host_id}/host_layout` to get the Windows host layout\n   of all disks and volumes.\n * Added `WindowsHostLayout` which is the response of\n   `GET /volume_group/host_layout/{snapshot_id}` and\n   `GET /volume_group/{host_id}/host_layout`.\n * Added support for Blueprint.\n * Added new fields `retentionSlaDomainId` and `retentionSlaDomainName` to\n   UnmanagedObjectSummary object, which is returned from a\n   `GET /unmanaged_object` call.\n * Removed `unmanagedSnapshotCount` and added new fields `autoSnapshotCount`.\n   and `manualSnapshotCount` to UnmanagedObjectSummary object, which is\n   returned from a `GET /unmanaged_object` call.\n * Added new fields `retentionSlaDomainId` and `retentionSlaDomainName` to\n   UnmanagedSnapshotSummary object, which is returned from a\n   `GET /unmanaged_object/{id}/snapshot` call.\n * Added a new field `hasAttachingDisk` to `GET /vmware/vm/snapshot/mount` and\n   `GET /vmware/vm/snapshot/mount/{id}` that indicates to the user whether\n   this is an attaching disk mount job.\n * Added a new field `attachingDiskCount` to `GET /vmware/vm/snapshot/mount`.\n   and `GET /vmware/vm/snapshot/mount/{id}` that indicate to the user how many\n   disks are attached.\n * Added field `RetentionSlaDomainName` to sort_by of a\n   `GET * /unmanaged_object/{id}/snapshot` call.\n * Added field `excludedDiskIds` to NutanixVmDetail which is returned from a\n   `GET /nutanix/vm/{id}` to exclude certain disks from backup. Also added\n   field to NutanixVmPatch via `PATCH /nutanix/vm/{id}` to allow the field\n   to be updated.\n * Introduced the `PATCH /aws/ec2_instance/indexing_state` endpoint for\n   enabling/disabling indexing per EC2 instance.\n * Added new optional fields `organizationId` and `organizationName` to\n   `/host/{id}` and `/host` endpoints to get the organization a host is\n   assigned to due to Envoy.\n * Introduced a new `GET /host/envoy` endpoint. Acts similar to queryHost but\n   also includes Envoy organization info if Envoy is enabled.\n * Added a new endpoint `GET /vmware/vcenter/{id}/tag_category` to get a list of\n   Tag Categories associated with a vCenter.\n * Added a new endpoint `Get /vmware/vcenter/tag_category/{tag_category_id}` to\n   get a specific Tag Category associated with a vCenter.\n * Added a new endpoint `GET /vmware/vcenter/{id}/tag` to get a list of Tags\n   associated with a vCenter. The optional category_id parameter allow the\n   response to be filtered by Tag Category.\n * Added a new endpoint `GET /vmware/vcenter/tag/{tag_id}` to get a\n   specific Tag associated with a vCenter.\n * Introduced `GET /cluster/{id}/global_manager_connectivity` to\n   retrieve a set of URLs that are pingable from the CDM cluster.\n * Added optional field `instanceName` in `ManagedObjectProperties`.\n * Added new endpoint GET `/cloud_on/aws/app_image/{id}` to retrieve a specified\n   AWS AppBlueprint image.\n * Added new endpoint DELETE `/cloud_on/aws/app_image/{id}` to delete the\n   given AWS AppBlueprint image.\n * Added new endpoint GET `/cloud_on/azure/app_image/{id}` to retrieve a\n   specified Azure AppBlueprint image.\n * Added new endpoint DELETE `/cloud_on/azure/app_image/{id}` to delete the\n   given Azure AppBlueprint image.\n * Added organization endpoint for Oracle.\n * Added new endpoint GET `/cloud_on/aws/app_image` to retrieve all\n   AWS AppBlueprint images.\n * Added new endpoints `GET /stats/cloud_storage/physical`, `GET\n   /stats/cloud_storage/ingested` and `GET /stats/cloud_storage/logical` which\n   return respective stats aggregated across all archival locations\n * Added a new endpoint `POST /vmware/standalone_host/datastore` to get a list\n   of datastore names for a given ESXi host.\n * Added a new optional field `apiEndpoint` to `NasBaseConfig`.\n\n ### Changes to Internal API in Rubrik version 4.2\n ## Breaking changes:\n * Introduced a new `GET /cluster/{id}/ipv6` endpoint for getting all IPv6\n   addresses configured on a specific or all network interfaces.\n * Introduced a new `PATCH /cluster/{id}/ipv6` endpoint for configuring IPv6\n   addresses on a specific network interface for each nodes in cluster.\n * Introduced a new `GET /cluster/{id}/trial_edge` for getting whether the\n   cluster is a trial edge.\n * Moved the /auth_domain/ endpoint from internal APIs to the v1 APIs.\n * Deprecated `POST /archive/nfs/reconnect` endpoint. Use\n   `POST /archive/nfs/reader/connect` instead to connect as a reader to an\n   existing NFS archival location.\n * Deprecated `POST /archive/object_store/reconnect` endpoint. Use\n   `POST /archive/object_store/reader/connect` instead to connect as a reader to\n   an existing object store location.\n * Deprecated `POST /archive/qstar/reconnect` endpoint. Use\n   `POST /archive/qstar/reader/connect` instead to connect as a reader to an\n   existing QStar archival location.\n * Deprecated `POST /archive/dca/reconnect` endpoint. Use\n   `POST /archive/dca/reader/connect` instead to connect as a reader to an\n   existing DCA archival location.\n * Removed `POST /hyperv/vm/snapshot/{id}/restore_file` endpoint. Use\n   `POST /hyperv/vm/snapshot/{id}/restore_files` instead to support\n   multi-files restore for Hyper-V vm.\n * Removed `POST /nutanix/vm/snapshot/{id}/restore_file` endpoint. Use\n   `POST /nutainx/vm/snapshot/{id}/restore_files` instead to support\n   multi-files restore for Nutanix vm.\n * Removed `search_timezone_offset` parameter from\n   `GET /unmanaged_object/{id}/snapshot` endpoint. The endpoint will now\n   use configured timezone on the cluster.\n * Renamed the field `id` in `UserDefinition` to `username` for `POST /user`.\n   endpoint.\n * Removed the `/mssql/db/sla/{id}/availability_group_conflicts` endpoint.\n * Removed the `/mssql/db/sla/{id}/assign` endpoint.\n * Added support for Envoy VMs for Organization.\n * Modified the `DELETE /storage/array/{id}` endpoint so that it now triggers\n   an asynchronous deletion job, responds with an async request object, and\n   archives the storage array's hierarchy.\n * Added `numStorageArrayVolumeGroupsArchived` to `DataLocationUsage` which\n   is the response of the `GET /stats/data_location/usage` endpoint.\n * Modified `POST /storage/array` endpoint so that it now triggers an\n   asynchronous refresh job, and responds with an async request object.\n * Modified the `GET /storage/array/{id}` and `DELETE /storage/array/{id}`.\n   endpoints so that the `id` field now corresponds to the managed ID\n   instead of the simple ID. The `managed ID` is the ID assigned to the\n   storage array object by the Rubrik REST API server.\n * Moved /throttle endpoint to /backup_throttle.\n * Introduced a new `EmailSubscriptionUpdate` object for the request of the\n   `PATCH /report/email_subscription/{subscription_id}` endpoint.\n * Introduced a new `ReportSubscriptionOwner` object for the response of\n   `GET /report/email_subscription/{subscription_id}` and\n   `GET /report/{id}/email_subscription` endpoints.\n * Added the envoyStatus field to the response of the GET /organization\n   endpoint.\n * Added new `attachments` field to the `POST /report/{id}/email_subscription`.\n   and `PATCH /report/email_subscription/{subscription_id}` endpoints.\n * Removed fields `length` and `isLog` in response of\n   `/mssql/db/{id}/restore_files`.\n * Moved the `/cluster/decommissionNode` endpoint to\n   `/cluster/decommissionNodes`. The `DecommissionNodeConfig` object is renamed\n   as `DecommissionNodesConfig` and now takes in a list of strings which\n   correspond to the IDs of the nodes that are to be decommissioned.\n * Moved the `POST /vmware/vm/{id}/register_agent` endpoint from internal\n   APIs to the v1 APIs.\n * Added a required field for environment in AzureComputeSummary to support\n   Azure Gov Cloud.\n * Remove `POST internal/vmware/vm/snapshot/{id}/mount` endpoint. Use public\n   API of `POST v1/vmware/vm/snapshot/{id}/mount`.\n * The input field OperatingSystemType value `Linux` is replaced by `UnixLike`.\n   in FilesetTemplateCreateDefinition, used by POST /fileset-template, and\n   in FilesetTemplatePatchDefinition, used by PATCH /fileset_template/{id}.\n * The input field operating_system_type value `Linux` is replaced by `UnixLike`.\n   in GET /host-fileset and GET /host-count.\n * Added `snmpAgentPort` field to SnmpConfig object.\n\n ## Feature Additions/improvements:\n * Introduced the `GET /node_management/default_gateway` and `POST\n   /node_management/default_gateway` endpoint to get and set default gateway.\n * Introduced the `GET cloud_on/aws/instance_type_list` and `GET\n   cloud_on/azure/instance_type_list` endpoint to fetch list of instance types\n   for aws and azures.\n * Introduced the `GET /aws/account/{id}/subnet` endpoint to fetch an\n   information summary for each of the subnets available in an AWS account.\n * Introduced the `GET /aws/account/{id}/security_group` endpoint to fetch an\n   information summary for each of the security groups belonging to a particular\n   virtual network in an AWS account.\n * Moved definitions `Subnet` and `SecurityGroup` of `definitions/cloud_on.yml`.\n   to `definitions/cloud_common.yml` so that both the CloudOn and CloudNative\n   features can use them.\n * Introduced the `GET /host/{id}/diagnose` endpoint to support target host\n   diagnosis features. Network connectivity (machine/agent ping) implemented\n   in the current version.\n * Added vCD endpoints to support vCloud Director. The following endpoints\n   have been added to the vcdCluster object:\n   - `POST /vcd/cluster` to add a new vCD cluster object.\n * Added support for CRUD operations on vCloud Director cluster objects.\n   - POST /vcd/cluster, PATCH /vcd/cluster/{id}, DELETE /vcd/cluster/{id},\n     POST /vcd/cluster/{id}/refresh are the endpoints for adding, editing,\n     deleting and refreshing a vCD cluster object respectively.\n * Introduced endpoint `GET /search/snapshot_search` to search files in a\n   given snapshot. The search supports prefix search only.\n * Introduced the new `POST /storage/array/{id}/refresh` endpoint to\n   create a new refresh job to update the Storage Array metadata.\n * Introduced the new `GET /storage/array/request/{id}` endpoint to\n   get status of a storage array-related asynchronous request.\n * Introduced the new `POST /storage/array/volume/group` endpoint\n   to add a new storage array volume group.\n * Introduced the new `GET /storage/array/volume/group/{id}` endpoint\n   to get details of a storage array volume group.\n * Introduced the new `DELETE /storage/array/volume/group/{id}` endpoint\n   to remove a storage array volume group.\n * Introduced the new `GET /storage/array/hierarchy/{id}` endpoint\n   to get a summary of an object in the storage array hierarchy.\n * Introduced the new `GET /storage/array/hierarchy/{id}/children` endpoint\n   to get the children of an object in the storage array hierarchy.\n * Introduced the new `GET /storage/array/hierarchy/{id}/descendants` endpoint\n   to get the descendants of an object in the storage array hierarchy.\n * Introduced the new `GET /storage/array/volume` endpoint to get\n   summary information of all storage array volumes.\n * Introduced the new `GET /storage/array/volume/{id}` endpoint to get\n   details of a storage array volume.\n * Introduced the new `POST /storage/array/volume/group/{id}/snapshot`.\n   endpoint to create a new on-demand backup job for a storage array\n   volume group.\n * Introduced the new `PATCH /storage/array/volume/group/{id}` endpoint to\n   update the properties of a storage array volume group object.\n * Introduced the new `GET /storage/array/volume/group` endpoint to\n   get all storage array volume groups subject to specified filters.\n * Introduced endpoint `POST /archive/location/{id}/owner/pause` to pause\n   archiving to a given archival location that is owned by the current cluster.\n * Introduced endpoint `POST /archive/location/{id}/owner/resume` to resume\n   archiving to a given archival location that is owned by the current cluster.\n * Introduced endpoint `POST /archive/location/{id}/reader/promote` to promote\n   the current cluster to be the owner of a specified archival location that is\n   currently connected as a reader location.\n * Introduced endpoint `POST /archive/location/{id}/reader/refresh` to sync the\n   current reader cluster with the contents on the archival location. This pulls\n   in any changes made by the owner cluster to the archival location since the\n   last time the current cluster was synced.\n * Introduced endpoint `POST /archive/dca/reader/connect` to connect as a reader\n   to a DCA archival location.\n * Introduced endpoint `POST /archive/nfs/reader/connect` to connect as a reader\n   to an NFS archival location.\n * Introduced endpoint `POST /archive/object_store/reader/connect` to connect as\n   a reader to an object store location.\n * Introduced endpoint `POST /archive/dca/qstar/connect` to connect as a reader\n   to a QStar archival location.\n * Updated `ArchivalLocationSummary` returned by `GET /archive/location`.\n   endpoint to include `ownershipStatus` field, to indicate whether the current\n   cluster is connected to the archival location as an owner (active or paused),\n   as a reader, or if the archival location is deleted.\n * Added the `ca_certs` field to `StorageArrayDefinition` to allow admins\n   to specify certificates used for validation when making network\n   requests to the storage array API service. This effects endpoints\n   `POST /storage/array`, `GET /storage/array/{id}`, and\n   `PUT /storage/array/{id}`.\n * Introduced the `POST /vmware/vm/snapshot/{id}/download_files` endpoint to\n   download multiple files/folders from a given vm snapshot. The URL to\n   download the zip file including the files will be presented to the users.\n * Introduced the `POST /fileset/snapshot/{id}/download_files` endpoint to\n   download multiple files/folders from a given fileset snapshot. The URL to\n   download the zip file including the specific files/folders will be presented\n   to the users.\n * Introduced the `POST /nutanix/vm/snapshot/{id}/download_files` endpoint to\n   download multiple files/folders from a given nutanix snapshot. The URL to\n   download the zip file including the specific files/folders will be presented\n   to the users.\n * Removed the `POST /nutanix/vm/snapshot/{id}/download_file` endpoint as\n   downloading a single file/folder from the nutanix backup is just a special\n   case of downloading multiple files/folders.\n * Introduced the `POST /hyperv/snapshot/{id}/download_files` endpoint to\n   download multiple files/folders from a given Hyper-V snapshot. The URL to\n   download the zip file including the specific files/folders will be presented\n   to the users.\n * Introduced the POST /managed_volume/snapshot/{id}/download_files endpoint\n   to download multiple files and/or folders from a given managed volume\n   snapshot. This endpoint returns the URL to download the ZIP file that\n   contains the specified files and/or folders.\n * Introduced the new `GET /storage/array/volume/group/{id}/search` endpoint to\n   search storage array volume group for a file.\n * Introduced the new `GET /storage/array/volume/group/snapshot/{id}`.\n   endpoint to retrieve details of a storage array volume group snapshot.\n * Introduced the new `DELETE /storage/array/volume/group/snapshot/{id}`.\n   endpoint to remove a storage array volume group snapshot.\n * Introduced the new `DELETE /storage/array/volume/group/{id}` endpoint\n   to delete all snapshots of a storage array volume group.\n * Introduced the new `POST /storage/array/volume/group/{id}/download`.\n   endpoint to download a storage array volume group snapshot from archival.\n * Introduced new `GET/storage/array/volume/group/snapshot/{id}/restore_files`.\n   endpoint to restore files from snapshot of a storage array volume group.\n * Added storage volume endpoints for AWS cloud native workload protection.\n   Endpoints added:\n   - GET /aws/ec2_instance/{id}/storage_volume/ to retrieve\n     all storage volumes details attached to an ec2 instance object.\n   - GET /aws/ec2_instance/{ec2_instance_id}/storage_volume/{id} to retrieve\n     details of a storage volume attached to an ec2 instance object.\n   - POST /aws/ec2_intance/snapshot/{id}/export to export the snapshot of\n     an ec2 instance object to a new ec2 instance object.\n * Introduced the new `POST /storage/array/volume/group/{id}/download_file`.\n   endpoint to download a file from an archived storage array volume group\n   snapshot.\n * Introduced the new `GET /storage/array/volume/group/{id}/missed_snapshot`.\n   endpoint to get details about all missed snapshots of a storage array volume\n   group.\n * Introduced the `GET /network_throttle` endpoint for retrieving the list of\n   network throttles.\n * Introduced the `PATCH /network_throttle/{id}` endpoint for updating\n   network throttles.\n * Introduced the new `GET /storage/array/host/{id}` endpoint to get details\n   about all storage array volumes connected to a host.\n * Introduced the `GET /organization/{id}/storage/array` endpoint for getting\n   information for authorized storage array resources in an organization.\n * Introduced the `GET /organization/{id}/storage/array/volume_group/metric`.\n   endpoint for getting storage array volume groups metrics in an\n   organization.\n * Introduced the new POST /vmware/vm/snapshot/mount/{id}/rollback endpoint to\n   rollback the datastore used by a virtual machine, after an Instant Recovery\n   that used the preserve MOID setting. This endpoint `rolls back` the\n   recovered virtual machine's datastore from the Rubrik cluster to the\n   original datastore.\n * Added `owner` and `status` fields to the `EmailSubscriptionSummary`.\n   object used in responses for many `/report/{id}/email_subscription`.\n   and `/report/email_subscription/{subscription_id}` endpoints.\n * Added `availableSpace` and `readerLocationSummary` fields to the\n   `NfsLocationDetail` object used in responses for `/archive/nfs` and\n   `/archive/nfs/{id}` endpoints.\n * Added `availableSpace` and `readerLocationSummary` fields to the\n   `QstarLocationSummary` object used in responses for the `/archive/qstar`.\n   endpoint.\n * Added `availableSpace` and `readerLocationSummary` fields to the\n   `QstarLocationDetail` object used in responses for the `/archive/qstar/{id}`.\n   endpoint.\n * Added `readerLocationSummary` field to the `ObjectStoreLocationDetail`.\n   object used in responses for the `/archive/object_store` and\n   `/archive/object_store/{id}` endpoints.\n * Added `readerLocationSummary` field to the `DcaLocationDetail` object\n   used in responses for the `/archive/dca` and `/archive/dca/{id}` endpoints.\n * Added a new field `guestOsType` to `HypervVirtualMachineDetail`.\n   object used in response of `GET /hyperv/vm/{id}`.\n * Added a new field `guestOsType` to `VirtualMachineDetail`.\n   object referred by `VappVmDetail`.\n * Added new field `fileType` in response of `/mssql/db/{id}/restore_files`.\n * Added an optional field `agentStatus` to `VirtualMachineSummary` object used\n   in response of `GET /vmware/vm` endpoint. This allows user to check the\n   Rubrik Backup Service connection status of the corresponding VMware VM.\n * Introduced the new `POST /fileset/snapshot/{id}/export_files` endpoint to\n   export multiple files or directories to destination host.\n * Introduced the new `GET /vmware/config/esx_subnets` endpoint to get the\n   the preferred subnets to reach ESX hosts.\n * Introduced the new `PATCH /vmware/config/reset_esx_subnets` endpoint to\n   reset the preferred subnets to reach ESX hosts.\n * Changed the `PATCH /vmware/config/reset_esx_subnets` endpoint to\n   `PATCH /vmware/config/set_esx_subnets`.\n * Removed the `needsInspection` field from the NodeStatus object returned in\n   the `/cluster/{id}/node` and `/node` endpoints.\n * Introduced the new `PATCH /auth_domain/{id}` endpoint to update the Active\n   Directory configuration parameters.\n * Introduced the new `GET /cluster/{id}/auto_removed_node` endpoint to\n   query for unacknowledged automatic node removals by the Rubrik cluster.\n * Introduced the new\n   `DELETE /cluster/{id}/auto_removed_node/{node_id}/acknowledge` endpoint to\n   acknowledge an automatic node removal.\n * Introduced the new `GET /cluster/{id}/system_status` endpoint to retrieve\n   information about the status of the Rubrik cluster.\n * Changed the `POST /cloud_on/azure/subscription` endpoint to to take\n   the parameter `AzureSubscriptionRequest` instead of\n   `AzureSubscriptionCredential` in body.\n * Changed the `POST /cloud_on/azure/storage_account` endpoint to to take\n   the parameter `AzureStorageAccountRequest` instead of\n   `AzureStorageAccountCredential` in body.\n * Changed the `POST /cloud_on/azure/resource_group` endpoint to take\n   the parameter `AzureResourceGroupRequest` instead of\n   `AzureResourceGroupCredential` in body.\n * Added a `reportTemplate` field to the response of both the\n   `GET /report/{id}/table` and `GET /report/{id}/chart` endpoints.\n\n ### Changes to Internal API in Rubrik version 4.1\n ## Changes to support instance from image\n * POST /aws/instance and /azure/instance was supported only from a Rubrik\n   snapshot. Now it is changed to support instantiation from Rubrik snapshot as\n   well as pre-existing image. Rest end point is same, we just changed the\n   CreateCloudInstanceRequest object type.\n * Add a new field `ignoreErrors` to POST /vmware/vm/snapshot/{id}/restore_files\n   that will let job restore ignore file errors during restore job.\n ## Breaking changes:\n * None is removed as a Nutanix snapshot consistency mandate so it is no\n   longer valid in GET /nutanix/vm, GET /nutanix/vm/{id}, and\n   PATCH /nutanix/vm/{id}.\n * computeSecurityGroupId is replaced by the object defaultComputeNetworkConfig\n   in ObjectStoreLocationSummary ,ObjectStoreUpdateDefinition and\n   ObjectStoreReconnectDefinition which are used by\n   GET /archive/object_store/{id}, PATCH /archive/object_store/{id} and\n   POST /archive/object_store/reconnect respectively.\n * The PUT /throttle endpoint was changed to provide configuration for\n   Hyper-V adaptive throttling. Three parameters were added:\n   hypervHostIoLatencyThreshold, hypervHostCpuUtilizationThreshold, and\n   hypervVmCpuUtilizationThreshold. To differentiate between the multiple\n   hypervisors, the existing configuration parameters for VMware were renamed\n   VmwareVmIoLatencyThreshold, VmwareDatastoreIoLatencyThreshold and\n   VmwareCpuUtilizationThreshold. These changes also required modifications\n   and additions to the GET /throttle endpoint.\n * For `POST /cluster/{id}/node` endpoint, it gets now `AddNodesConfig` in body\n   instead of `Map_NodeConfig` directly.\n * For `POST /node_management/replace_node` endpoint, added the `ipmiPassword`.\n   field to the `ReplaceNodeConfig` object.\n * For `POST /stats/system_storage` endpoint, added the miscellaneous, liveMount\n   and snapshot field to `SystemStorageStats` object.\n * For `POST /principal_search`, removed `managedId` field from the\n   `PrincipalSummary` object and changed the `id` field of the\n   `PrincipalSummary` object to correspond to the managed id instead of the\n   simple id.\n * For `GET /cluster/{id}/timezone` and `PATCH /cluster/{id}/timezone`, the\n   functionality has merged into `GET /cluster/{id}` and `PATCH /cluster/{id}`.\n   in v1.\n * Removed the `GET /cluster/{id}/decommissionNodeStatus` endpoint.\n   Decommission status is now available through queries of the `jobId` that is\n   returned by a decommission request. Queries can be performed at the\n   `GET /job/{id}` endpoint.\n * For `GET /api/internal/managed_volume/?name=<name>`, the name match is now\n   exact instead of infix\n * Updated the list of available attribute and measure values for the `chart0`.\n   and `chart1` parameters for the `PATCH /report/{id}` endpoint.\n * Updated the list of available column values for the `table` parameter for the\n   `PATCH /report/{id}` endpoint.\n * Updated the `FolderHierarchy` response object to include\n   `effectiveSlaDomainId`, `effectiveSlaDomainName`,\n   `effectiveSlaSourceObjectId`, and `effectiveSlaSourceObjectName`.\n\n ## Feature Additions/improvements:\n * Added the field `pendingSnapshotCount` to ManagedVolumeSummary and\n   ManagedVolumeDetail objects used in responses for endpoints\n   `GET /managed_volume`, `POST /managed_volume`, `GET /managed_volume/{id}`,\n   `PATCH /managed_volume/{id}`, `GET /organization/{id}/managed_volume`.\n * Introduced the `GET /managed_volume/snapshot/export/{id}` endpoint\n   to retrieve details of a specific managed volume snapshot export.\n * Added the `name` filter for GET requests on the /replication/target endpoint.\n   This filter allows users to filter results based on the name of a\n   replication target.\n * Added the `name` filter for GET requests on the /archive/location endpoint.\n   This filter allows users to filter results based on the name of an\n   archival location.\n * Added new fields `replicas` and `availabilityGroupId` on GET /mssql\n   and GET /mssql/{id}. If a database is an availability database,\n   it will have some number of replicas, which are copies of the database\n   running on different instances. Otherwise, there will only be one\n   replica, which represents the single copy of the database. The field\n   `availabilityGroupId` will be set only for availability databases\n   and points to the availability group of the database. Also deprecated\n   several fields on these endpoints, as they should now be accessed via\n   the `replicas` field.\n * Added `Cluster` notification type.\n * Added optional `organizationId` parameter to to the grant/revoke and get\n  authorization endpoints. This parameter can be used to\n   grant/revoke/get authorizations with respect to a specific Organization.\n * Added endpoint to get/set whether the Rubrik Backup Service is automatically\n   deployed to a guest OS.\n * Added cloudInstantiationSpec field to Hyper-V VM endpoint for configuring\n   automatic cloud conversion\n * Introduced a new end point /cluster/{id}/platforminfo to GET information\n   about the platform the current software is running on\n * Introduced the `GET /organization` and `GET /organization/{id}` endpoints\n   for retrieving the list of organizations and a single organization.\n * Introduced the `POST /organization` endpoint for creating organizations,\n   the `PATCH /organization/{id}` endpoint for updating organizations and the\n   `DELETE /organization/{id}` endpoint for deleting organizations.\n * Introduced the `GET /organization/{id}/stats/storage_growth_timeseries`.\n   endpoint and the `GET /organization/{id}/stats/total_storage_usage` for\n   getting Physical Storage Growth over Time and Total Physical Storage Usage\n   on a per Organization basis.\n * Introduced a number of endpoints of the format\n   `GET /organization/{id}/<resource-type>` for retrieving all the resources of\n   the corresponding type in a given organization.\n * Introduced a number of endpoints of the format\n   `GET /organization/{id}/<resource-type>/metric` for retrieving the protection\n   counts of the resources of the corresponding type in a given organization.\n * Added the `reportTemplate` filter for GET requests on the /report endpoint.\n   This allows queried reports to be filtered and sorted by report template.\n * Introduced the `POST /cluster/{id}/security/password/strength` endpoint\n   for assessing the strength of passwords during bootstrap through rkcli.\n * Added a new `ipv6` field in the response of the `GET /cluster/{id}/discover`.\n   endpoint.\n * Added relatedIds field for EventSummary object to give more context about\n   the event.\n * Added operatingSystemType field for NutanixSummary object. This field\n   represents the type of operating system on the Nutanix virtual machine.\n\n ### Changes to Internal API in Rubrik version 4.0\n ## Breaking changes:\n * For `GET /unmanaged_object` endpoint, replaced the `Fileset` of object_type\n   filter with more specific object types: `WindowsFileset`, `LinuxFileset` and\n   `ShareFileset`. Also added filter value for additional unmanaged objects\n   we now support.\n * For /mssql/db/{id}/compatible_instance added recoveryType as mandatory\n   query parameter\n\n ## Feature Additions/improvements:\n * Added QStar end points to support it as an archival location. The location\n   is always encrypted and an encryption password must be set while adding the\n   location. End points added:\n   - `DELETE /archive/qstar` to clean up the data in the bucket in the QStar\n     archival location.\n   - `GET /archive/qstar` to retrieve a summary of all QStar archival locations.\n   - `POST /archive/qstar` to add a QStar archival location.\n   - `POST /archive/qstar/reconnect` to reconnect to a specific QStar archival\n     location.\n   - `POST /archive/qstar/remove_bucket` to remove buckets matching a prefix\n      from QStar archival location.\n   - `GET /archive/qstar/{id}` to retrieve a summary information from a specific\n     QStar archival location.\n   - `PATCH /archive/qstar/{id}` to update a specific QStar archival location.\n * Added the `name` filter for GET requests on the /archive/location endpoint.\n   This filter allows users to filter results based on the name of an\n   archival location.\n * Introduced an optional parameter `encryptionPassword` for the\n   `/data_location/nfs` `POST` endpoint. This password is used for\n   deriving the master key for encrypting the NFS archival location.\n * Introduced /managed\\_volume, /managed\\_volume/snapshot/export/{id},\n   and other child endpoints for creating, deleting, and updating\n   Managed Volumes and its exports and snapshots.\n * Added support for Hyper-V.\n * Add new /hierarchy endpoint to support universal hierarchy view.\n * Added support for Nutanix.\n * Moved and merged vCenter refresh status and delete status from independent\n   internal endpoints to a single status field in v1 vCenter detail.\n * Added endpoint to get/set whether the Rubrik Backup Service is automatically\n   deployed to a guest OS.\n * Introduced an optional parameter `minTolerableNodeFailures` for the\n   `/cluster/decommissionNode` `POST` endpoint. This parameter specifies the\n   minimum fault tolerance to node failures that must exist when a node is\n   decommissioned.\n * Added `nodeId` to `AsyncRequestStatus` to improve debugging job failures.\n\n ### Changes to Internal API in Rubrik version 3.2.0\n ## Breaking changes:\n * Introduced endpoint /host/share/id/search to search for\n   files on the network share.\n * Introduced endpoints /host/share and /host/share/id to\n   support native network shares under /host endpoint.\n * For /unmanaged_object endpoints, change sort_attr to sort_by\n   sort_attr used to accept a comma separated list of column names to sort.\n   Now sort_by only accepts a single column name.\n * For /unmanaged_object endpoints, removed the need for object type when\n   deleting unmanaged objects and its snapshots.\n\n ## Feature Additions/improvements:\n * Added internal local_<component> end points. These are used for\n   handling operations on per-node auto-scaling config values.\n   Please see src/spec/local-config/comments for details.\n * For the response of /mssql/db/{id}/restore_files, added two more fields\n   for each file object. They are the original file name and file length\n   of the file to be restore.\n * Introduced a new end point /cluster/{id}/is_registered to GET registration\n   status. With this change, we can query if the cluster is registered in the\n   Rubrik customer database.\n * Introduced a new end point /cluster/{id}/registration_details to POST\n   registration details. Customers are expected to get the registration details\n   from the support portal. On successful submission of registration details\n   with a valid registration id, the cluster will mark itself as registered.\n * For the /mssql/instance/{id} end point, added fields configuredSlaDomainId,\n   configuredSlaDomainName, logBackupFrequencyInSeconds, logRetentionHours,\n   and copyOnly.\n * Introduced optional parameter keepMacAddresses to\n   POST /vmware/vm/snapshot/{id}/mount, /vmware/vm/snapshot/{id}/export, and\n   /vmware/vm/snapshot/{id}/instant_recovery endpints.\n   This allows new VMs to have the same MAC address as their source VMs.\n\n ## Bug fixes:\n * Made path parameter required in GET /browse. Previously, an error was\n   thrown when path was not passed in. This solves that bug.\n",
+    "x-logo": {
+      "url": "https://www.rubrik.com/wp-content/uploads/2016/11/Rubrik-Snowflake-small.png"
+    }
+  },
+  "paths": {
+    "/polaris/replication/source/replicate_app/{snappable_id}": {
+      "post": {
+        "parameters": [
+          {
+            "name": "snappable_id",
+            "in": "path",
+            "description": "Snappable ID of which we are replicating snapshots.",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "in": "body",
+            "name": "definition",
+            "description": "Polaris source pull replicate definition.",
+            "required": true,
+            "schema": {
+              "$ref": "#/definitions/PolarisPullReplicateDefinition"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "OK"
+          }
+        }
+      }
+    }
+  },
+  "definitions": {
+    "PolarisPullReplicateDefinition": {
+      "type": "object",
+      "required": [
+        "accessKey",
+        "isOnDemand",
+        "polarisId",
+        "secretKey",
+        "snapshotInfo"
+      ],
+      "properties": {
+        "polarisId": {
+          "type": "string",
+          "description": "Managed ID of the Polaris source cluster."
+        },
+        "snapshotInfo": {
+          "description": "Info of the snapshot which this cluster is replicating from Polaris.",
+          "$ref": "#/definitions/ReplicationSnapshotInfo"
+        },
+        "accessKey": {
+          "type": "string",
+          "description": "The access key used for accessing customer's volumes to pull replicate snapshots."
+        },
+        "secretKey": {
+          "type": "string",
+          "description": "The secret key used for accessing customer's volumes to pull replicate snapshots.",
+          "x-secret": true
+        },
+        "isOnDemand": {
+          "type": "boolean",
+          "description": "Indicates if snapshot is on-demand."
+        }
+      }
+    },
+    "ReplicationSnapshotInfo": {
+      "type": "object",
+      "required": ["snappableId", "snapshotId"],
+      "properties": {
+        "snappableId": {
+          "type": "string",
+          "description": "The ID of the snappable stored on this cluster."
+        },
+        "snapshotId": {
+          "type": "string",
+          "description": "The ID of the snapshot that is being replicated."
+        },
+        "snapshotDate": {
+          "type": "integer",
+          "format": "int64",
+          "description": "The date when the snapshot was taken in number of milliseconds since the UNIX epoch. This is a required field when the replication source is Polaris."
+        },
+        "snapshotDiskInfos": {
+          "type": "array",
+          "description": "An array of the details of the snapshot disks that need to be replicated. This is a required field when the replication source is Polaris.",
+          "items": {
+            "$ref": "#/definitions/ReplicationSnapshotDiskInfo"
+          }
+        },
+        "appMetadata": {
+          "type": "string",
+          "description": "Serialized metadata specific to the snappable which is being replicated. This is a required field when the replication source is Polaris."
+        },
+        "childSnapshotInfos": {
+          "type": "array",
+          "description": "An array of child snapshots information.",
+          "items": {
+            "$ref": "#/definitions/ReplicationSnapshotInfo"
+          }
+        }
+      }
+    },
+    "ReplicationSnapshotDiskInfo": {
+      "type": "object",
+      "required": [
+        "diskFailoverInfo",
+        "diskId",
+        "isOsDisk",
+        "logicalSizeInBytes",
+        "snapshotDiskId"
+      ],
+      "properties": {
+        "diskId": {
+          "type": "string",
+          "description": "The ID of the disk/volume that is being replicated."
+        },
+        "snapshotDiskId": {
+          "type": "string",
+          "description": "The ID of the snapshot of the disk/volume taken on the source that needs to be replicated."
+        },
+        "logicalSizeInBytes": {
+          "type": "integer",
+          "format": "int64",
+          "description": "Size of the disk/volume that is being replicated."
+        },
+        "isOsDisk": {
+          "type": "boolean",
+          "description": "Flag to specify if the disk is OS disk."
+        },
+        "diskFailoverInfo": {
+          "description": "Details specific to the target snappable required to failover the EBS volumes.",
+          "$ref": "#/definitions/InstanceFailoverInfo"
+        }
+      }
+    },
+    "InstanceFailoverInfo": {
+      "type": "object",
+      "required": ["originalDiskIdentifier"],
+      "properties": {
+        "originalDiskIdentifier": {
+          "type": "string",
+          "description": "The identifier used to map the original disks before failover to the disks being replicated. For vmware to AWS, this would be the deviceKey of the vmware virtual disk this EBS volume corresponds to."
+        }
+      }
+    }
+  }
+}
diff --git a/openapi3filter/middleware_test.go b/openapi3filter/middleware_test.go
index c6a5e9b..ff6059c 100644
--- a/openapi3filter/middleware_test.go
+++ b/openapi3filter/middleware_test.go
@@ -328,6 +328,27 @@ func TestValidator(t *testing.T) {
 			body:       `{"id": "42", "contents": {"name": "foo", "expected": 9, "actual": 10}, "extra": true}`,
 		},
 		strict: false,
+	}, {
+		name: "POST response status code not in spec (return 200, spec only has 201)",
+		handler: validatorTestHandler{
+			postBody:      `{"id": "42", "contents": {"name": "foo", "expected": 9, "actual": 10}, "extra": true}`,
+			errStatusCode: 200,
+			errBody:       `{"id": "42", "contents": {"name": "foo", "expected": 9, "actual": 10}, "extra": true}`,
+		}.withDefaults(),
+		options: []openapi3filter.ValidatorOption{openapi3filter.ValidationOptions(openapi3filter.Options{
+			IncludeResponseStatus: true,
+		})},
+		request: testRequest{
+			method:      "POST",
+			path:        "/test?version=1",
+			body:        `{"name": "foo", "expected": 9, "actual": 10}`,
+			contentType: "application/json",
+		},
+		response: testResponse{
+			statusCode: 200,
+			body:       `{"id": "42", "contents": {"name": "foo", "expected": 9, "actual": 10}, "extra": true}`,
+		},
+		strict: false,
 	}}
 	for i, test := range tests {
 		t.Logf("test#%d: %s", i, test.name)
diff --git a/openapi3filter/validate_set_default_test.go b/openapi3filter/validate_set_default_test.go
index 4071405..4550b51 100644
--- a/openapi3filter/validate_set_default_test.go
+++ b/openapi3filter/validate_set_default_test.go
@@ -245,6 +245,78 @@ func TestValidateRequestBodyAndSetDefault(t *testing.T) {
                         }
                       }
                     }
+                  },
+                  "social_network": {
+                    "oneOf": [
+                      {
+                        "type": "object",
+                        "required": ["platform"],
+                        "properties": {
+                          "platform": {
+                            "type": "string",
+                            "enum": [
+                              "twitter"
+                            ]
+                          },
+                          "tw_link": {
+                            "type": "string",
+                            "default": "www.twitter.com"
+                          }
+                        }
+                      },
+                      {
+                        "type": "object",
+                        "required": ["platform"],
+                        "properties": {
+                          "platform": {
+                            "type": "string",
+                            "enum": [
+                              "facebook"
+                            ]
+                          },
+                          "fb_link": {
+                            "type": "string",
+                            "default": "www.facebook.com"
+                          }
+                        }
+                      }
+                    ]
+                  },
+                  "social_network_2": {
+                    "anyOf": [
+                      {
+                        "type": "object",
+                        "required": ["platform"],
+                        "properties": {
+                          "platform": {
+                            "type": "string",
+                            "enum": [
+                              "twitter"
+                            ]
+                          },
+                          "tw_link": {
+                            "type": "string",
+                            "default": "www.twitter.com"
+                          }
+                        }
+                      },
+                      {
+                        "type": "object",
+                        "required": ["platform"],
+                        "properties": {
+                          "platform": {
+                            "type": "string",
+                            "enum": [
+                              "facebook"
+                            ]
+                          },
+                          "fb_link": {
+                            "type": "string",
+                            "default": "www.facebook.com"
+                          }
+                        }
+                      }
+                    ]
                   }
                 }
               }
@@ -281,13 +353,20 @@ func TestValidateRequestBodyAndSetDefault(t *testing.T) {
 		OP    string `json:"op,omitempty"`
 		Value int    `json:"value,omitempty"`
 	}
+	type socialNetwork struct {
+		Platform string `json:"platform,omitempty"`
+		FBLink   string `json:"fb_link,omitempty"`
+		TWLink   string `json:"tw_link,omitempty"`
+	}
 	type body struct {
-		ID      string   `json:"id,omitempty"`
-		Name    string   `json:"name,omitempty"`
-		Code    int      `json:"code,omitempty"`
-		All     bool     `json:"all,omitempty"`
-		Page    *page    `json:"page,omitempty"`
-		Filters []filter `json:"filters,omitempty"`
+		ID             string         `json:"id,omitempty"`
+		Name           string         `json:"name,omitempty"`
+		Code           int            `json:"code,omitempty"`
+		All            bool           `json:"all,omitempty"`
+		Page           *page          `json:"page,omitempty"`
+		Filters        []filter       `json:"filters,omitempty"`
+		SocialNetwork  *socialNetwork `json:"social_network,omitempty"`
+		SocialNetwork2 *socialNetwork `json:"social_network_2,omitempty"`
 	}
 
 	testCases := []struct {
@@ -531,6 +610,52 @@ func TestValidateRequestBodyAndSetDefault(t *testing.T) {
       "value": 456
     }
   ]
+}
+        `, body)
+			},
+		},
+		{
+			name: "social_network(oneOf)",
+			body: body{
+				ID: "bt6kdc3d0cvp6u8u3ft0",
+				SocialNetwork: &socialNetwork{
+					Platform: "facebook",
+				},
+			},
+			bodyAssertion: func(t *testing.T, body string) {
+				require.JSONEq(t, `
+{
+  "id": "bt6kdc3d0cvp6u8u3ft0",
+  "name": "default",
+  "code": 123,
+  "all": false,
+  "social_network": {
+    "platform": "facebook",
+    "fb_link": "www.facebook.com"
+  }
+}
+        `, body)
+			},
+		},
+		{
+			name: "social_network_2(anyOf)",
+			body: body{
+				ID: "bt6kdc3d0cvp6u8u3ft0",
+				SocialNetwork2: &socialNetwork{
+					Platform: "facebook",
+				},
+			},
+			bodyAssertion: func(t *testing.T, body string) {
+				require.JSONEq(t, `
+{
+  "id": "bt6kdc3d0cvp6u8u3ft0",
+  "name": "default",
+  "code": 123,
+  "all": false,
+  "social_network_2": {
+    "platform": "facebook",
+    "fb_link": "www.facebook.com"
+  }
 }
         `, body)
 			},