|
9 | 9 |
|
10 | 10 | "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
11 | 11 | "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
12 |
| - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" |
13 | 12 | "github.com/mongodb/terraform-provider-mongodbatlas/internal/common/constant"
|
14 | 13 | "github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion"
|
15 | 14 | "github.com/mongodb/terraform-provider-mongodbatlas/internal/common/validate"
|
@@ -46,10 +45,9 @@ func ResourceSetup() *schema.Resource {
|
46 | 45 | Required: true,
|
47 | 46 | },
|
48 | 47 | "provider_name": {
|
49 |
| - Type: schema.TypeString, |
50 |
| - Required: true, |
51 |
| - ValidateFunc: validation.StringInSlice([]string{constant.AWS, constant.AZURE}, false), |
52 |
| - ForceNew: true, |
| 48 | + Type: schema.TypeString, |
| 49 | + Required: true, |
| 50 | + ForceNew: true, |
53 | 51 | },
|
54 | 52 | "aws_config": {
|
55 | 53 | Type: schema.TypeList,
|
@@ -87,6 +85,22 @@ func ResourceSetup() *schema.Resource {
|
87 | 85 | },
|
88 | 86 | },
|
89 | 87 | },
|
| 88 | + "gcp_config": { |
| 89 | + Type: schema.TypeList, |
| 90 | + Computed: true, |
| 91 | + Elem: &schema.Resource{ |
| 92 | + Schema: map[string]*schema.Schema{ |
| 93 | + "status": { |
| 94 | + Type: schema.TypeString, |
| 95 | + Computed: true, |
| 96 | + }, |
| 97 | + "service_account_for_atlas": { |
| 98 | + Type: schema.TypeString, |
| 99 | + Computed: true, |
| 100 | + }, |
| 101 | + }, |
| 102 | + }, |
| 103 | + }, |
90 | 104 | "created_date": {
|
91 | 105 | Type: schema.TypeString,
|
92 | 106 | Computed: true,
|
@@ -119,7 +133,10 @@ func resourceCloudProviderAccessSetupRead(ctx context.Context, d *schema.Resourc
|
119 | 133 | return diag.FromErr(fmt.Errorf(ErrorCloudProviderGetRead, err))
|
120 | 134 | }
|
121 | 135 |
|
122 |
| - roleSchema := roleToSchemaSetup(role) |
| 136 | + roleSchema, err := roleToSchemaSetup(role) |
| 137 | + if err != nil { |
| 138 | + return diag.Errorf(errorCloudProviderAccessCreate, err) |
| 139 | + } |
123 | 140 | for key, val := range roleSchema {
|
124 | 141 | if err := d.Set(key, val); err != nil {
|
125 | 142 | return diag.FromErr(fmt.Errorf(ErrorCloudProviderGetRead, err))
|
@@ -156,7 +173,10 @@ func resourceCloudProviderAccessSetupCreate(ctx context.Context, d *schema.Resou
|
156 | 173 | }
|
157 | 174 |
|
158 | 175 | // once multiple providers enable here do a switch, select for provider type
|
159 |
| - roleSchema := roleToSchemaSetup(role) |
| 176 | + roleSchema, err := roleToSchemaSetup(role) |
| 177 | + if err != nil { |
| 178 | + return diag.Errorf(errorCloudProviderAccessCreate, err) |
| 179 | + } |
160 | 180 |
|
161 | 181 | resourceID := role.GetRoleId()
|
162 | 182 | if role.ProviderName == constant.AZURE {
|
@@ -197,39 +217,51 @@ func resourceCloudProviderAccessSetupDelete(ctx context.Context, d *schema.Resou
|
197 | 217 | return diag.FromErr(fmt.Errorf(errorCloudProviderAccessDelete, err))
|
198 | 218 | }
|
199 | 219 |
|
200 |
| - d.SetId("") |
201 | 220 | d.SetId("")
|
202 | 221 | return nil
|
203 | 222 | }
|
204 | 223 |
|
205 |
| -func roleToSchemaSetup(role *admin.CloudProviderAccessRole) map[string]any { |
206 |
| - if role.ProviderName == "AWS" { |
207 |
| - out := map[string]any{ |
| 224 | +func roleToSchemaSetup(role *admin.CloudProviderAccessRole) (map[string]any, error) { |
| 225 | + switch role.ProviderName { |
| 226 | + case constant.AWS: |
| 227 | + return map[string]any{ |
208 | 228 | "provider_name": role.GetProviderName(),
|
209 | 229 | "aws_config": []any{map[string]any{
|
210 | 230 | "atlas_aws_account_arn": role.GetAtlasAWSAccountArn(),
|
211 | 231 | "atlas_assumed_role_external_id": role.GetAtlasAssumedRoleExternalId(),
|
212 | 232 | }},
|
| 233 | + "gcp_config": []any{map[string]any{}}, |
213 | 234 | "created_date": conversion.TimeToString(role.GetCreatedDate()),
|
214 | 235 | "role_id": role.GetRoleId(),
|
215 |
| - } |
216 |
| - return out |
217 |
| - } |
218 |
| - |
219 |
| - out := map[string]any{ |
220 |
| - "provider_name": role.ProviderName, |
221 |
| - "azure_config": []any{map[string]any{ |
222 |
| - "atlas_azure_app_id": role.GetAtlasAzureAppId(), |
223 |
| - "service_principal_id": role.GetServicePrincipalId(), |
224 |
| - "tenant_id": role.GetTenantId(), |
225 |
| - }}, |
226 |
| - "aws_config": []any{map[string]any{}}, |
227 |
| - "created_date": conversion.TimeToString(role.GetCreatedDate()), |
228 |
| - "last_updated_date": conversion.TimeToString(role.GetLastUpdatedDate()), |
229 |
| - "role_id": role.GetId(), |
| 236 | + }, nil |
| 237 | + case constant.AZURE: |
| 238 | + return map[string]any{ |
| 239 | + "provider_name": role.ProviderName, |
| 240 | + "azure_config": []any{map[string]any{ |
| 241 | + "atlas_azure_app_id": role.GetAtlasAzureAppId(), |
| 242 | + "service_principal_id": role.GetServicePrincipalId(), |
| 243 | + "tenant_id": role.GetTenantId(), |
| 244 | + }}, |
| 245 | + "aws_config": []any{map[string]any{}}, |
| 246 | + "gcp_config": []any{map[string]any{}}, |
| 247 | + "created_date": conversion.TimeToString(role.GetCreatedDate()), |
| 248 | + "last_updated_date": conversion.TimeToString(role.GetLastUpdatedDate()), |
| 249 | + "role_id": role.GetId(), |
| 250 | + }, nil |
| 251 | + case constant.GCP: |
| 252 | + return map[string]any{ |
| 253 | + "provider_name": role.GetProviderName(), |
| 254 | + "gcp_config": []any{map[string]any{ |
| 255 | + "status": role.GetStatus(), |
| 256 | + "service_account_for_atlas": role.GetGcpServiceAccountForAtlas(), |
| 257 | + }}, |
| 258 | + "aws_config": []any{map[string]any{}}, |
| 259 | + "role_id": role.GetId(), |
| 260 | + "created_date": conversion.TimeToString(role.GetCreatedDate()), |
| 261 | + }, nil |
| 262 | + default: |
| 263 | + return nil, fmt.Errorf("unsupported provider: %s", role.GetProviderName()) |
230 | 264 | }
|
231 |
| - |
232 |
| - return out |
233 | 265 | }
|
234 | 266 |
|
235 | 267 | func resourceCloudProviderAccessSetupImportState(ctx context.Context, d *schema.ResourceData, meta any) ([]*schema.ResourceData, error) {
|
|
0 commit comments