Skip to content

Commit

Permalink
Address Polaris GCP API changes (#89)
Browse files Browse the repository at this point in the history
  • Loading branch information
johan3141592 authored May 6, 2022
1 parent 5a9e352 commit 81e575b
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 11 deletions.
32 changes: 29 additions & 3 deletions pkg/polaris/graphql/gcp/cloud.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,8 @@ func (a API) CloudAccountDeleteProject(ctx context.Context, id uuid.UUID) error
query := gcpCloudAccountDeleteProjectsQuery
if graphql.VersionOlderThan(a.Version, "master-47076", "v20220426") {
query = gcpCloudAccountDeleteProjectsV0Query
} else if graphql.VersionOlderThan(a.Version, "master-47412", "v20220509") {
query = gcpCloudAccountDeleteProjectsV1Query
}
buf, err := a.GQL.Request(ctx, query, struct {
ID uuid.UUID `json:"nativeProtectionProjectId"`
Expand All @@ -137,24 +139,48 @@ func (a API) CloudAccountDeleteProject(ctx context.Context, id uuid.UUID) error

a.GQL.Log().Printf(log.Debug, "%s(%q): %s", graphql.QueryName(query), id, string(buf))

// An additional level has been introduced to the GraphQL result structure.
// The Projects part is the old structure and the Result part is the new
// structure.
var payload struct {
Data struct {
Projects []struct {
ProjectUUID string `json:"projectUuid"`
Success bool `json:"success"`
Error string `json:"error"`
} `json:"gcpCloudAccountDeleteProjects"`
Result struct {
Status []struct {
ProjectUUID string `json:"projectUuid"`
Success bool `json:"success"`
Error string `json:"error"`
} `json:"gcpProjectDeleteStatuses"`
} `json:"result"`
} `json:"data"`
}
if err := json.Unmarshal(buf, &payload); err != nil {
return fmt.Errorf("failed to unmarshal CloudAccountDeleteProject: %v", err)
}
if len(payload.Data.Projects) != 1 {

// Look at the old GraphQL result structure.
if len(payload.Data.Projects) > 1 {
return errors.New("expected a single result")
}

if len(payload.Data.Projects) == 1 {
if !payload.Data.Projects[0].Success {
return errors.New(payload.Data.Projects[0].Error)
}
return nil
}

// Look at the new GraphQL result structure.
if len(payload.Data.Result.Status) != 1 {
return errors.New("expected a single result")
}

if !payload.Data.Projects[0].Success {
return errors.New(payload.Data.Projects[0].Error)
if !payload.Data.Result.Status[0].Success {
return errors.New(payload.Data.Result.Status[0].Error)
}

return nil
Expand Down
24 changes: 20 additions & 4 deletions pkg/polaris/graphql/gcp/queries.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
mutation RubrikPolarisSDKRequest($nativeProtectionProjectId: UUID!) {
gcpCloudAccountDeleteProjects(input: {
result: gcpCloudAccountDeleteProjects(input: {
nativeProtectionProjectIds: [$nativeProtectionProjectId],
sharedVpcHostProjectIds: [],
cloudAccountsProjectIds: [],
skipResourceDeletion: true,
}) {
projectUuid
success
error
gcpProjectDeleteStatuses {
projectUuid
success
error
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
mutation RubrikPolarisSDKRequest($nativeProtectionProjectId: UUID!) {
gcpCloudAccountDeleteProjects(input: {
nativeProtectionProjectIds: [$nativeProtectionProjectId],
sharedVpcHostProjectIds: [],
cloudAccountsProjectIds: [],
skipResourceDeletion: true,
}) {
projectUuid
success
error
}
}

0 comments on commit 81e575b

Please sign in to comment.