Skip to content

Commit

Permalink
CLOUDP-195419: Improve Cloud Provider Access reconciliation flow (#1092)
Browse files Browse the repository at this point in the history
  • Loading branch information
helderjs authored Aug 18, 2023
1 parent de6a6bb commit 5f175fc
Show file tree
Hide file tree
Showing 7 changed files with 1,383 additions and 283 deletions.
67 changes: 9 additions & 58 deletions pkg/api/v1/status/cloud_provider_access.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
package status

import (
"go.mongodb.org/atlas/mongodbatlas"
)

type CloudProviderAccessRole struct {
AtlasAWSAccountArn string `json:"atlasAWSAccountArn,omitempty"`
AtlasAssumedRoleExternalID string `json:"atlasAssumedRoleExternalId"`
Expand All @@ -23,69 +19,24 @@ type FeatureUsage struct {
}

const (
CloudProviderAccessStatusNew = "NEW"
CloudProviderAccessStatusCreated = "CREATED"
CloudProviderAccessStatusAuthorized = "AUTHORIZED"
CloudProviderAccessStatusDeAuthorize = "DEAUTHORIZE"
CloudProviderAccessStatusFailedToCreate = "FAILED_TO_CREATE"
CloudProviderAccessStatusFailedToAuthorize = "FAILED_TO_AUTHORIZE"
CloudProviderAccessStatusFailedToDeAuthorize = "FAILED_TO_DEAUTHORIZE"

StatusFailed = "FAILED"
StatusCreated = "CREATED"
StatusReady = "READY"
StatusEmptyARN = "EMPTY_ARN"
)

func NewCloudProviderAccessRole(providerName, assumedRoleArn string) CloudProviderAccessRole {
if assumedRoleArn == "" {
return CloudProviderAccessRole{
ProviderName: providerName,
Status: StatusEmptyARN,
}
}
return CloudProviderAccessRole{
ProviderName: providerName,
IamAssumedRoleArn: assumedRoleArn,
Status: StatusCreated,
}
}

func (c *CloudProviderAccessRole) IsEmptyARN() bool {
return c.Status == StatusEmptyARN
}

func (c *CloudProviderAccessRole) Failed(errorMessage string) {
c.Status = StatusFailed
c.ErrorMessage = errorMessage
}

func (c *CloudProviderAccessRole) FailedToAuthorise(errorMessage string) {
c.ErrorMessage = errorMessage
}

func (c *CloudProviderAccessRole) Update(role mongodbatlas.CloudProviderAccessRole, isEmptyArn bool) {
c.RoleID = role.RoleID
c.AtlasAssumedRoleExternalID = role.AtlasAssumedRoleExternalID
c.AtlasAWSAccountArn = role.AtlasAWSAccountARN
c.AuthorizedDate = role.AuthorizedDate
c.CreatedDate = role.CreatedDate
for _, featureUsage := range role.FeatureUsages {
if featureUsage != nil {
featureUsageID, ok := featureUsage.FeatureID.(string)
if ok {
c.FeatureUsages = append(c.FeatureUsages, FeatureUsage{
FeatureType: featureUsage.FeatureType,
FeatureID: featureUsageID,
})
}
}
}

if isEmptyArn {
c.Status = StatusEmptyARN
} else {
switch role.IAMAssumedRoleARN {
case "":
c.Status = StatusCreated
case c.IamAssumedRoleArn:
c.Status = StatusReady
c.ErrorMessage = ""
default:
c.Status = StatusFailed
c.ErrorMessage = "IAMAssumedRoleARN is different from the previous one"
}
Status: CloudProviderAccessStatusNew,
}
}
Loading

0 comments on commit 5f175fc

Please sign in to comment.