rubrikinc / rubrik-powershell-sdk

The Rubrik Security Cloud SDK
https://www.powershellgallery.com/packages/RubrikSecurityCloud
MIT License
7 stars 8 forks source link

Get-RscMssqlInstance - Issues after upgrading to 0.24 #41

Closed smasterson closed 6 months ago

smasterson commented 6 months ago

After upgrading to 0.24 I am receiving the following error when running Get-RscMssqlInstance

PS C:\Users\me> # Get Rubrik Cluster info
PS C:\Users\me> $rscCluster = Get-RscCluster -Name $RubrikCluster
PS C:\Users\me> # Get Source DB Host info
PS C:\Users\me> $rscSourceHost = Get-RscHost -Name $sourceHost -OsType Windows
PS C:\Users\me> # Get Source Instance info
PS C:\Users\me> $rscSourceInstance = Get-RscMssqlInstance -RscCluster $rscCluster -RscHost $rscSourceHost -InstanceName $sourceInstance
InvalidOperation: C:\Users\me\Documents\PowerShell\Modules\RubrikSecurityCloud\0.24\Toolkit\Public\Get-RscMssqlInstance.ps1:115
Line |
 115 |  …             $nameFilter.Field = [RubrikSecurityCloud.Types.HierarchyF …
     |                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The property 'Field' cannot be found on this object. Verify that the property exists and can be set.
InvalidOperation: C:\Users\me\Documents\PowerShell\Modules\RubrikSecurityCloud\0.24\Toolkit\Public\Get-RscMssqlInstance.ps1:116
Line |
 116 |                  $nameFilter.texts = $RscHost.Name
     |                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The property 'texts' cannot be found on this object. Verify that the property exists and can be set.
InvalidOperation: C:\Users\me\Documents\PowerShell\Modules\RubrikSecurityCloud\0.24\Toolkit\Public\Get-RscMssqlInstance.ps1:132
Line |
 132 |              $query.Var.filter += $clusterFilter
     |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Method invocation failed because [RubrikSecurityCloud.Types.HierarchyObjectTypeEnum] does not contain a method
     | named 'op_Addition'.
MethodInvocationException: C:\Users\me\Documents\PowerShell\Modules\RubrikSecurityCloud\0.24\Toolkit\Public\Get-RscMssqlInstance.ps1:136
Line |
 136 |          $result = $query.Invoke()
     |          ~~~~~~~~~~~~~~~~~~~~~~~~~
     | Exception calling "Invoke" with "0" argument(s): " One or more errors occurred. (The request generated an error.
     | Query: query QueryMssqlTopLevelDescendants($first: Int,$after: String,$sortBy: HierarchySortByField,$sortOrder:
     | SortOrder,$typeFilter: [HierarchyObjectTypeEnum!],$filter: [Filter!]) {   mssqlTopLevelDescendants   (   first:
     | $first   after: $after   sortBy: $sortBy   sortOrder: $sortOrder   typeFilter: $typeFilter   filter: $filter   )
     | {   nodes {      ... on MssqlAvailabilityGroup {       objectType       slaAssignment       effectiveSlaDomain {
     | ... on ClusterSlaDomain {           cdmId           fid           id           isRetentionLockedSla
     | name           polarisManagedId           version          __typename }          ... on GlobalSlaReply {
     | clusterUuid           description           id           isArchived           isDefault
     | isRetentionLockedSla           name           stateVersion           version          __typename }
     | __typename }       hasLogConfigFromSla       id       name       numWorkloadDescendants       slaPauseStatus
     | __typename }      ... on MssqlDatabase {       objectType       slaAssignment       effectiveSlaDomain {
     | ... on ClusterSlaDomain {           cdmId           fid           id           isRetentionLockedSla
     | name           polarisManagedId           version          __typename }          ... on GlobalSlaReply {
     | clusterUuid           description           id           isArchived           isDefault
     | isRetentionLockedSla           name           stateVersion           version          __typename }
     | __typename }       cdmId       dagId       hasLogConfigFromSla       hasPermissions       id
     | isInAvailabilityGroup       isLogShippingSecondary       isMount       isOnline       isRelic       name
     | numWorkloadDescendants       slaPauseStatus      __typename }      ... on MssqlInstance {       objectType
     | slaAssignment       effectiveSlaDomain {          ... on ClusterSlaDomain {           cdmId           fid
     | id           isRetentionLockedSla           name           polarisManagedId           version
     | __typename }          ... on GlobalSlaReply {           clusterUuid           description           id
     | isArchived           isDefault           isRetentionLockedSla           name           stateVersion
     | version          __typename }        __typename }       hasLogConfigFromSla       id       name
     | numWorkloadDescendants       slaPauseStatus      __typename }      ... on PhysicalHost {       objectType
     | slaAssignment       effectiveSlaDomain {          ... on ClusterSlaDomain {           cdmId           fid
     | id           isRetentionLockedSla           name           polarisManagedId           version
     | __typename }          ... on GlobalSlaReply {           clusterUuid           description           id
     | isArchived           isDefault           isRetentionLockedSla           name           stateVersion
     | version          __typename }        __typename }       agentId       cbtStatus       cdmId       id
     | isArchived       isChangelistEnabled       isOracleHost       name       numWorkloadDescendants
     | slaPauseStatus       vfdState       physicalChildConnection {         nodes {            ... on ExchangeServer {
     | objectType             slaAssignment             effectiveSlaDomain {                ... on ClusterSlaDomain {
     | cdmId                 fid                 id                 isRetentionLockedSla                 name
     | polarisManagedId                 version                __typename }                ... on GlobalSlaReply {
     | clusterUuid                 description                 id                 isArchived                 isDefault
     | isRetentionLockedSla                 name                 stateVersion                 version
     | __typename }              __typename }             cdmId             hasVgConflict             id
     | name             numWorkloadDescendants             primaryClusterUuid             slaPauseStatus
     | version            __typename }            ... on HostShare {             objectType             slaAssignment
     | effectiveSlaDomain {                ... on ClusterSlaDomain {                 cdmId                 fid
     | id                 isRetentionLockedSla                 name                 polarisManagedId
     | version                __typename }                ... on GlobalSlaReply {                 clusterUuid
     | description                 id                 isArchived                 isDefault
     | isRetentionLockedSla                 name                 stateVersion                 version
     | __typename }              __typename }             id             isChangelistEnabled             name
     | numWorkloadDescendants             slaPauseStatus            __typename }            ... on HyperVSCVMM {
     | connectionStatus             objectType             slaAssignment             effectiveSlaDomain {
     | ... on ClusterSlaDomain {                 cdmId                 fid                 id
     | isRetentionLockedSla                 name                 polarisManagedId                 version
     | __typename }                ... on GlobalSlaReply {                 clusterUuid                 description
     | id                 isArchived                 isDefault                 isRetentionLockedSla
     | name                 stateVersion                 version                __typename }              __typename }
     | id             name             numWorkloadDescendants             slaPauseStatus            __typename }
     | ... on HypervServer {             connectionStatus             objectType             slaAssignment
     | effectiveSlaDomain {                ... on ClusterSlaDomain {                 cdmId                 fid
     | id                 isRetentionLockedSla                 name                 polarisManagedId
     | version                __typename }                ... on GlobalSlaReply {                 clusterUuid
     | description                 id                 isArchived                 isDefault
     | isRetentionLockedSla                 name                 stateVersion                 version
     | __typename }              __typename }             id             name             numWorkloadDescendants
     | slaPauseStatus            __typename }            ... on LinuxFileset {             objectType
     | slaAssignment             effectiveSlaDomain {                ... on ClusterSlaDomain {                 cdmId
     | fid                 id                 isRetentionLockedSla                 name
     | polarisManagedId                 version                __typename }                ... on GlobalSlaReply {
     | clusterUuid                 description                 id                 isArchived                 isDefault
     | isRetentionLockedSla                 name                 stateVersion                 version
     | __typename }              __typename }             cdmId             id             isPassThrough
     | isRelic             name             numWorkloadDescendants             slaPauseStatus            __typename }
     | ... on MssqlInstance {             objectType             slaAssignment             effectiveSlaDomain {
     | ... on ClusterSlaDomain {                 cdmId                 fid                 id
     | isRetentionLockedSla                 name                 polarisManagedId                 version
     | __typename }                ... on GlobalSlaReply {                 clusterUuid                 description
     | id                 isArchived                 isDefault                 isRetentionLockedSla
     | name                 stateVersion                 version                __typename }              __typename }
     | hasLogConfigFromSla             id             name             numWorkloadDescendants
     | slaPauseStatus            __typename }            ... on ShareFileset {             objectType
     | slaAssignment             effectiveSlaDomain {                ... on ClusterSlaDomain {                 cdmId
     | fid                 id                 isRetentionLockedSla                 name
     | polarisManagedId                 version                __typename }                ... on GlobalSlaReply {
     | clusterUuid                 description                 id                 isArchived                 isDefault
     | isRetentionLockedSla                 name                 stateVersion                 version
     | __typename }              __typename }             cdmId             id             isPassThrough
     | isRelic             name             numWorkloadDescendants             slaPauseStatus            __typename }
     | ... on WindowsFileset {             objectType             slaAssignment             effectiveSlaDomain {
     | ... on ClusterSlaDomain {                 cdmId                 fid                 id
     | isRetentionLockedSla                 name                 polarisManagedId                 version
     | __typename }                ... on GlobalSlaReply {                 clusterUuid                 description
     | id                 isArchived                 isDefault                 isRetentionLockedSla
     | name                 stateVersion                 version                __typename }              __typename }
     | cdmId             id             isPassThrough             isRelic             name
     | numWorkloadDescendants             slaPauseStatus            __typename }          __typename }         count
     | pageInfo {           endCursor           hasNextPage           hasPreviousPage           startCursor
     | __typename }        __typename }      __typename }      ... on WindowsCluster {       objectType
     | slaAssignment       effectiveSlaDomain {          ... on ClusterSlaDomain {           cdmId           fid
     | id           isRetentionLockedSla           name           polarisManagedId           version
     | __typename }          ... on GlobalSlaReply {           clusterUuid           description           id
     | isArchived           isDefault           isRetentionLockedSla           name           stateVersion
     | version          __typename }        __typename }       id       name       numWorkloadDescendants
     | slaPauseStatus      __typename }    __typename }   count   pageInfo {     endCursor     hasNextPage
     | hasPreviousPage     startCursor    __typename }    __typename }  __typename }  Variables:
     | {"filter":"ACTIVE_DIRECTORY_DOMAIN","first":50,"typeFilter":[]} Operation Name: QueryMssqlTopLevelDescendants
     | GraphQLResponse<JObject>: Data: null Errors: null HTTP Status Code: 400 BadRequest   [QueryAnalysisError] [Mssql
     | Team] Encountered Client error (400) executing query with operations: [QueryMssqlTopLevelDescendants] and
     | variables {"filter":"ACTIVE_DIRECTORY_DOMAIN","first":50,"typeFilter":[]}. Error: Error during variable
     | coercion. Violations:  Variable '$filter' expected value of type '[Filter!]' but got: "ACTIVE_DIRECTORY_DOMAIN".
     | Reason: '[0]' Expected 'Filter', found not an object. (line 1, column 156): query
     | QueryMssqlTopLevelDescendants($first: Int,$after: String,$sortBy: HierarchySortByField,$sortOrder:
     | SortOrder,$typeFilter: [HierarchyObjectTypeEnum!],$filter: [Filter!])
     | ^) The request generated an error.  Query: query QueryMssqlTopLevelDescendants($first: Int,$after:
     | String,$sortBy: HierarchySortByField,$sortOrder: SortOrder,$typeFilter: [HierarchyObjectTypeEnum!],$filter:
     | [Filter!]) {   mssqlTopLevelDescendants   (   first: $first   after: $after   sortBy: $sortBy   sortOrder:
     | $sortOrder   typeFilter: $typeFilter   filter: $filter   )   {   nodes {      ... on MssqlAvailabilityGroup {
     | objectType       slaAssignment       effectiveSlaDomain {          ... on ClusterSlaDomain {           cdmId
     | fid           id           isRetentionLockedSla           name           polarisManagedId           version
     | __typename }          ... on GlobalSlaReply {           clusterUuid           description           id
     | isArchived           isDefault           isRetentionLockedSla           name           stateVersion
     | version          __typename }        __typename }       hasLogConfigFromSla       id       name
     | numWorkloadDescendants       slaPauseStatus      __typename }      ... on MssqlDatabase {       objectType
     | slaAssignment       effectiveSlaDomain {          ... on ClusterSlaDomain {           cdmId           fid
     | id           isRetentionLockedSla           name           polarisManagedId           version
     | __typename }          ... on GlobalSlaReply {           clusterUuid           description           id
     | isArchived           isDefault           isRetentionLockedSla           name           stateVersion
     | version          __typename }        __typename }       cdmId       dagId       hasLogConfigFromSla
     | hasPermissions       id       isInAvailabilityGroup       isLogShippingSecondary       isMount       isOnline
     | isRelic       name       numWorkloadDescendants       slaPauseStatus      __typename }      ... on MssqlInstance
     | {       objectType       slaAssignment       effectiveSlaDomain {          ... on ClusterSlaDomain {
     | cdmId           fid           id           isRetentionLockedSla           name           polarisManagedId
     | version          __typename }          ... on GlobalSlaReply {           clusterUuid           description
     | id           isArchived           isDefault           isRetentionLockedSla           name           stateVersion
     | version          __typename }        __typename }       hasLogConfigFromSla       id       name
     | numWorkloadDescendants       slaPauseStatus      __typename }      ... on PhysicalHost {       objectType
     | slaAssignment       effectiveSlaDomain {          ... on ClusterSlaDomain {           cdmId           fid
     | id           isRetentionLockedSla           name           polarisManagedId           version
     | __typename }          ... on GlobalSlaReply {           clusterUuid           description           id
     | isArchived           isDefault           isRetentionLockedSla           name           stateVersion
     | version          __typename }        __typename }       agentId       cbtStatus       cdmId       id
     | isArchived       isChangelistEnabled       isOracleHost       name       numWorkloadDescendants
     | slaPauseStatus       vfdState       physicalChildConnection {         nodes {            ... on ExchangeServer {
     | objectType             slaAssignment             effectiveSlaDomain {                ... on ClusterSlaDomain {
     | cdmId                 fid                 id                 isRetentionLockedSla                 name
     | polarisManagedId                 version                __typename }                ... on GlobalSlaReply {
     | clusterUuid                 description                 id                 isArchived                 isDefault
     | isRetentionLockedSla                 name                 stateVersion                 version
     | __typename }              __typename }             cdmId             hasVgConflict             id
     | name             numWorkloadDescendants             primaryClusterUuid             slaPauseStatus
     | version            __typename }            ... on HostShare {             objectType             slaAssignment
     | effectiveSlaDomain {                ... on ClusterSlaDomain {                 cdmId                 fid
     | id                 isRetentionLockedSla                 name                 polarisManagedId
     | version                __typename }                ... on GlobalSlaReply {                 clusterUuid
     | description                 id                 isArchived                 isDefault
     | isRetentionLockedSla                 name                 stateVersion                 version
     | __typename }              __typename }             id             isChangelistEnabled             name
     | numWorkloadDescendants             slaPauseStatus            __typename }            ... on HyperVSCVMM {
     | connectionStatus             objectType             slaAssignment             effectiveSlaDomain {
     | ... on ClusterSlaDomain {                 cdmId                 fid                 id
     | isRetentionLockedSla                 name                 polarisManagedId                 version
     | __typename }                ... on GlobalSlaReply {                 clusterUuid                 description
     | id                 isArchived                 isDefault                 isRetentionLockedSla
     | name                 stateVersion                 version                __typename }              __typename }
     | id             name             numWorkloadDescendants             slaPauseStatus            __typename }
     | ... on HypervServer {             connectionStatus             objectType             slaAssignment
     | effectiveSlaDomain {                ... on ClusterSlaDomain {                 cdmId                 fid
     | id                 isRetentionLockedSla                 name                 polarisManagedId
     | version                __typename }                ... on GlobalSlaReply {                 clusterUuid
     | description                 id                 isArchived                 isDefault
     | isRetentionLockedSla                 name                 stateVersion                 version
     | __typename }              __typename }             id             name             numWorkloadDescendants
     | slaPauseStatus            __typename }            ... on LinuxFileset {             objectType
     | slaAssignment             effectiveSlaDomain {                ... on ClusterSlaDomain {                 cdmId
     | fid                 id                 isRetentionLockedSla                 name
     | polarisManagedId                 version                __typename }                ... on GlobalSlaReply {
     | clusterUuid                 description                 id                 isArchived                 isDefault
     | isRetentionLockedSla                 name                 stateVersion                 version
     | __typename }              __typename }             cdmId             id             isPassThrough
     | isRelic             name             numWorkloadDescendants             slaPauseStatus            __typename }
     | ... on MssqlInstance {             objectType             slaAssignment             effectiveSlaDomain {
     | ... on ClusterSlaDomain {                 cdmId                 fid                 id
     | isRetentionLockedSla                 name                 polarisManagedId                 version
     | __typename }                ... on GlobalSlaReply {                 clusterUuid                 description
     | id                 isArchived                 isDefault                 isRetentionLockedSla
     | name                 stateVersion                 version                __typename }              __typename }
     | hasLogConfigFromSla             id             name             numWorkloadDescendants
     | slaPauseStatus            __typename }            ... on ShareFileset {             objectType
     | slaAssignment             effectiveSlaDomain {                ... on ClusterSlaDomain {                 cdmId
     | fid                 id                 isRetentionLockedSla                 name
     | polarisManagedId                 version                __typename }                ... on GlobalSlaReply {
     | clusterUuid                 description                 id                 isArchived                 isDefault
     | isRetentionLockedSla                 name                 stateVersion                 version
     | __typename }              __typename }             cdmId             id             isPassThrough
     | isRelic             name             numWorkloadDescendants             slaPauseStatus            __typename }
     | ... on WindowsFileset {             objectType             slaAssignment             effectiveSlaDomain {
     | ... on ClusterSlaDomain {                 cdmId                 fid                 id
     | isRetentionLockedSla                 name                 polarisManagedId                 version
     | __typename }                ... on GlobalSlaReply {                 clusterUuid                 description
     | id                 isArchived                 isDefault                 isRetentionLockedSla
     | name                 stateVersion                 version                __typename }              __typename }
     | cdmId             id             isPassThrough             isRelic             name
     | numWorkloadDescendants             slaPauseStatus            __typename }          __typename }         count
     | pageInfo {           endCursor           hasNextPage           hasPreviousPage           startCursor
     | __typename }        __typename }      __typename }      ... on WindowsCluster {       objectType
     | slaAssignment       effectiveSlaDomain {          ... on ClusterSlaDomain {           cdmId           fid
     | id           isRetentionLockedSla           name           polarisManagedId           version
     | __typename }          ... on GlobalSlaReply {           clusterUuid           description           id
     | isArchived           isDefault           isRetentionLockedSla           name           stateVersion
     | version          __typename }        __typename }       id       name       numWorkloadDescendants
     | slaPauseStatus      __typename }    __typename }   count   pageInfo {     endCursor     hasNextPage
     | hasPreviousPage     startCursor    __typename }    __typename }  __typename }  Variables:
     | {"filter":"ACTIVE_DIRECTORY_DOMAIN","first":50,"typeFilter":[]} Operation Name: QueryMssqlTopLevelDescendants
     | GraphQLResponse<JObject>: Data: null Errors: null HTTP Status Code: 400 BadRequest   [QueryAnalysisError] [Mssql
     | Team] Encountered Client error (400) executing query with operations: [QueryMssqlTopLevelDescendants] and
     | variables {"filter":"ACTIVE_DIRECTORY_DOMAIN","first":50,"typeFilter":[]}. Error: Error during variable
     | coercion. Violations:  Variable '$filter' expected value of type '[Filter!]' but got: "ACTIVE_DIRECTORY_DOMAIN".
     | Reason: '[0]' Expected 'Filter', found not an object. (line 1, column 156): query
     | QueryMssqlTopLevelDescendants($first: Int,$after: String,$sortBy: HierarchySortByField,$sortOrder:
     | SortOrder,$typeFilter: [HierarchyObjectTypeEnum!],$filter: [Filter!])
     | ^"
PS C:\Users\me>
smasterson commented 6 months ago

Note - This does work in 0.23

smasterson commented 6 months ago

Interestingly...I am also testing permissions/roles with Service Accounts. Using 0.23, if I change my role from Administrator to SQL DBA (custom role, can do everything needed in the gui), I get the same error message above when using 0.24 + Administrator role.

0.23/Administrator - works 0.23/SQL DBA - does not work 0.24/Administrator - does not work

clumnah commented 6 months ago

I do not think the issue is related to being a non-admin service account. It appears to be an issue with the schema. I have found the issue and think I have it fixed. I will be submitting a PR to get it corrected.

clumnah commented 6 months ago

Can you please double check this on .26 please?

I have checked the error you initially reported and that does not happen on .26 and I could not get a different result on .26 from what an admin would get.

smasterson commented 6 months ago

yup, .26 fixed the issue - thanks!