Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Updates mongodbatlas_federated_settings_org_config with data_access_identity_provider_ids, user_conflicts, and changes to identity_provider_id #2322

Merged
merged 18 commits into from
Jun 5, 2024
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .changelog/2322.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
```release-note:enhancement
data-source/mongodbatlas_federated_settings_org_config: Adds `data_access_identity_provider_ids`
```

```release-note:enhancement
data-source/mongodbatlas_federated_settings_org_configs: Adds `data_access_identity_provider_ids`
```

```release-note:enhancement
resource/mongodbatlas_federated_settings_org_config: Adds `data_access_identity_provider_ids`
```

```release-note:enhancement
resource/mongodbatlas_federated_settings_org_config: Adds `user_conflicts`
```

```release-note:enhancement
resource/mongodbatlas_federated_settings_org_config: Supports detaching and updating the `identity_provider_id`
```
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (

func DataSourceSettings() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceMongoDBAtlasFederatedSettingsRead,
ReadContext: dataSourceRead,
Schema: map[string]*schema.Schema{
"org_id": {
Type: schema.TypeString,
Expand Down Expand Up @@ -46,7 +46,7 @@ func DataSourceSettings() *schema.Resource {
}
}

func dataSourceMongoDBAtlasFederatedSettingsRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
func dataSourceRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
// Get client connection.
conn := meta.(*config.MongoDBClient).AtlasV2

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package federatedsettingsorgconfig
import (
AgustinBettati marked this conversation as resolved.
Show resolved Hide resolved
"context"
"errors"
"fmt"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
Expand All @@ -12,7 +11,7 @@ import (

func DataSource() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceMongoDBAtlasFederatedSettingsOrganizationConfigRead,
ReadContext: dataSourceOrgRead,
Schema: map[string]*schema.Schema{
"federation_settings_id": {
Type: schema.TypeString,
Expand Down Expand Up @@ -83,36 +82,47 @@ func DataSource() *schema.Resource {
"user_conflicts": {
Type: schema.TypeList,
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"email_address": {
Type: schema.TypeString,
Computed: true,
},
"federation_settings_id": {
Type: schema.TypeString,
Computed: true,
},
"first_name": {
Type: schema.TypeString,
Computed: true,
},
"last_name": {
Type: schema.TypeString,
Computed: true,
},
"user_id": {
Type: schema.TypeString,
Computed: true,
},
},
Elem: userConflictsElemSchema(),
},
"data_access_identity_provider_ids": {
Type: schema.TypeList,
Computed: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
},
}
}
func dataSourceMongoDBAtlasFederatedSettingsOrganizationConfigRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
// Get client connection.

func userConflictsElemSchema() *schema.Resource {
return &schema.Resource{
Schema: map[string]*schema.Schema{
"email_address": {
Type: schema.TypeString,
Computed: true,
},
"federation_settings_id": {
Type: schema.TypeString,
Computed: true,
},
"first_name": {
Type: schema.TypeString,
Computed: true,
},
"last_name": {
Type: schema.TypeString,
Computed: true,
},
"user_id": {
Type: schema.TypeString,
Computed: true,
},
},
}
}

func dataSourceOrgRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
conn := meta.(*config.MongoDBClient).AtlasV2

federationSettingsID, federationSettingsIDOk := d.GetOk("federation_settings_id")
Expand All @@ -128,42 +138,46 @@ func dataSourceMongoDBAtlasFederatedSettingsOrganizationConfigRead(ctx context.C
}

federatedSettingsConnectedOrganization, _, err := conn.FederatedAuthenticationApi.GetConnectedOrgConfig(ctx, federationSettingsID.(string), orgID.(string)).Execute()

if err != nil {
return diag.Errorf("error getting federatedSettings connected organizations assigned (%s): %s", federationSettingsID, err)
}

if err := d.Set("domain_allow_list", federatedSettingsConnectedOrganization.GetDomainAllowList()); err != nil {
return diag.FromErr(fmt.Errorf("error setting `domain_allow_list` for federatedSettings IdentityProviders: %s", err))
return diag.Errorf("error setting `domain_allow_list` for federatedSettings Org(%s): %s", orgID, err)
}

if err := d.Set("domain_restriction_enabled", federatedSettingsConnectedOrganization.GetDomainRestrictionEnabled()); err != nil {
return diag.FromErr(fmt.Errorf("error setting `domain_restriction_enabled` for federatedSettings IdentityProviders: %s", err))
return diag.Errorf("error setting `domain_restriction_enabled` for federatedSettings Org(%s): %s", orgID, err)
}

if err := d.Set("identity_provider_id", federatedSettingsConnectedOrganization.GetIdentityProviderId()); err != nil {
return diag.FromErr(fmt.Errorf("error setting `identity_provider_id` for federatedSettings IdentityProviders: %s", err))
return diag.Errorf("error setting `identity_provider_id` for federatedSettings Org(%s): %s", orgID, err)
}

if err := d.Set("org_id", federatedSettingsConnectedOrganization.GetOrgId()); err != nil {
return diag.FromErr(fmt.Errorf("error setting `org_id` for federatedSettings IdentityProviders: %s", err))
return diag.Errorf("error setting `org_id` for federatedSettings Org(%s): %s", orgID, err)
}

if err := d.Set("post_auth_role_grants", federatedSettingsConnectedOrganization.GetPostAuthRoleGrants()); err != nil {
return diag.FromErr(fmt.Errorf("error setting `post_auth_role_grants` for federatedSettings IdentityProviders: %s", err))
return diag.Errorf("error setting `post_auth_role_grants` for federatedSettings Org(%s): %s", orgID, err)
}

if err := d.Set("role_mappings", FlattenRoleMappings(federatedSettingsConnectedOrganization.GetRoleMappings())); err != nil {
return diag.FromErr(fmt.Errorf("error setting `role_mappings` for federatedSettings IdentityProviders: %s", err))
return diag.Errorf("error setting `role_mappings` for federatedSettings Org(%s): %s", orgID, err)
}
if federatedSettingsConnectedOrganization.UserConflicts == nil {
if err := d.Set("user_conflicts", federatedSettingsConnectedOrganization.GetUserConflicts()); err != nil {
return diag.FromErr(fmt.Errorf("error setting `user_conflicts` for federatedSettings IdentityProviders: %s", err))
return diag.Errorf("error setting `user_conflicts` for federatedSettings Org(%s): %s", orgID, err)
}
} else {
if err := d.Set("user_conflicts", FlattenUserConflicts(federatedSettingsConnectedOrganization.GetUserConflicts())); err != nil {
return diag.FromErr(fmt.Errorf("error setting `user_conflicts` for federatedSettings IdentityProviders: %s", err))
return diag.Errorf("error setting `user_conflicts` for federatedSettings Org(%s): %s", orgID, err)
}
}
if err := d.Set("data_access_identity_provider_ids", federatedSettingsConnectedOrganization.GetDataAccessIdentityProviderIds()); err != nil {
return diag.Errorf("error setting `data_access_identity_provider_ids` for federatedSettings Org(%s): %s", orgID, err)
}

d.SetId(federatedSettingsConnectedOrganization.GetOrgId())

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ func TestAccFederatedSettingsOrgDS_basic(t *testing.T) {
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet(resourceName, "federation_settings_id"),
resource.TestCheckResourceAttrSet(resourceName, "role_mappings.#"),
resource.TestCheckResourceAttrSet(resourceName, "data_access_identity_provider_ids.#"),
resource.TestCheckResourceAttrSet(resourceName, "identity_provider_id"),
resource.TestCheckResourceAttr(resourceName, "org_id", orgID),
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package federatedsettingsorgconfig
import (
"context"
"errors"
"fmt"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
Expand All @@ -14,7 +13,7 @@ import (

func PluralDataSource() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceMongoDBAtlasFederatedSettingsOrganizationConfigsRead,
ReadContext: dataSourcePluralRead,
Schema: map[string]*schema.Schema{
"federation_settings_id": {
Type: schema.TypeString,
Expand Down Expand Up @@ -59,6 +58,13 @@ func PluralDataSource() *schema.Resource {
Type: schema.TypeString,
},
},
"data_access_identity_provider_ids": {
Type: schema.TypeList,
Computed: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"role_mappings": {
Type: schema.TypeList,
Computed: true,
Expand Down Expand Up @@ -98,39 +104,15 @@ func PluralDataSource() *schema.Resource {
"user_conflicts": {
Type: schema.TypeList,
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"email_address": {
Type: schema.TypeString,
Computed: true,
},
"federation_settings_id": {
Type: schema.TypeString,
Computed: true,
},
"first_name": {
Type: schema.TypeString,
Computed: true,
},
"last_name": {
Type: schema.TypeString,
Computed: true,
},
"user_id": {
Type: schema.TypeString,
Computed: true,
},
},
},
Elem: userConflictsElemSchema(),
},
},
},
},
},
}
}
func dataSourceMongoDBAtlasFederatedSettingsOrganizationConfigsRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
// Get client connection.
func dataSourcePluralRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
conn := meta.(*config.MongoDBClient).AtlasV2

federationSettingsID, federationSettingsIDOk := d.GetOk("federation_settings_id")
Expand All @@ -150,43 +132,36 @@ func dataSourceMongoDBAtlasFederatedSettingsOrganizationConfigsRead(ctx context.
return diag.Errorf("error getting federatedSettings connected organizations assigned (%s): %s", federationSettingsID, err)
}

if err := d.Set("results", flattenFederatedSettingsOrganizationConfigs(*federatedSettingsConnectedOrganizations)); err != nil {
return diag.FromErr(fmt.Errorf("error setting `result` for federatedSettings IdentityProviders: %s", err))
if err := d.Set("results", flattenOrganizationConfigs(*federatedSettingsConnectedOrganizations)); err != nil {
return diag.Errorf("error setting `result` for federatedSettings connected orgs: %s", err)
}

d.SetId(federationSettingsID.(string))

return nil
}

func flattenFederatedSettingsOrganizationConfigs(federatedSettingsConnectedOrganizations admin.PaginatedConnectedOrgConfigs) []map[string]any {
func flattenOrganizationConfigs(federatedSettingsConnectedOrganizations admin.PaginatedConnectedOrgConfigs) []map[string]any {
var federatedSettingsConnectedOrganizationsMap []map[string]any

if (federatedSettingsConnectedOrganizations.GetTotalCount()) > 0 {
federatedSettingsConnectedOrganizationsMap = make([]map[string]any, federatedSettingsConnectedOrganizations.GetTotalCount())

for i := range federatedSettingsConnectedOrganizations.GetResults() {
if federatedSettingsConnectedOrganizations.GetResults()[i].UserConflicts == nil {
federatedSettingsConnectedOrganizationsMap[i] = map[string]any{
"domain_allow_list": federatedSettingsConnectedOrganizations.GetResults()[i].GetDomainAllowList(),
"domain_restriction_enabled": federatedSettingsConnectedOrganizations.GetResults()[i].GetDomainRestrictionEnabled(),
"identity_provider_id": federatedSettingsConnectedOrganizations.GetResults()[i].GetIdentityProviderId(),
"org_id": federatedSettingsConnectedOrganizations.GetResults()[i].GetOrgId(),
"post_auth_role_grants": federatedSettingsConnectedOrganizations.GetResults()[i].GetPostAuthRoleGrants(),
"role_mappings": FlattenRoleMappings(federatedSettingsConnectedOrganizations.GetResults()[i].GetRoleMappings()),
"user_conflicts": nil,
}
} else {
federatedSettingsConnectedOrganizationsMap[i] = map[string]any{
"domain_allow_list": federatedSettingsConnectedOrganizations.GetResults()[i].GetDomainAllowList(),
"domain_restriction_enabled": federatedSettingsConnectedOrganizations.GetResults()[i].GetDomainRestrictionEnabled(),
"identity_provider_id": federatedSettingsConnectedOrganizations.GetResults()[i].GetIdentityProviderId(),
"org_id": federatedSettingsConnectedOrganizations.GetResults()[i].GetOrgId(),
"post_auth_role_grants": federatedSettingsConnectedOrganizations.GetResults()[i].GetPostAuthRoleGrants(),
"role_mappings": FlattenRoleMappings(federatedSettingsConnectedOrganizations.GetResults()[i].GetRoleMappings()),
"user_conflicts": FlattenUserConflicts(federatedSettingsConnectedOrganizations.GetResults()[i].GetUserConflicts()),
}
orgConfig := map[string]any{
"domain_allow_list": federatedSettingsConnectedOrganizations.GetResults()[i].GetDomainAllowList(),
"domain_restriction_enabled": federatedSettingsConnectedOrganizations.GetResults()[i].GetDomainRestrictionEnabled(),
"identity_provider_id": federatedSettingsConnectedOrganizations.GetResults()[i].GetIdentityProviderId(),
"org_id": federatedSettingsConnectedOrganizations.GetResults()[i].GetOrgId(),
"post_auth_role_grants": federatedSettingsConnectedOrganizations.GetResults()[i].GetPostAuthRoleGrants(),
"role_mappings": FlattenRoleMappings(federatedSettingsConnectedOrganizations.GetResults()[i].GetRoleMappings()),
"data_access_identity_provider_ids": federatedSettingsConnectedOrganizations.GetResults()[i].GetDataAccessIdentityProviderIds(),
"user_conflicts": nil,
}
if federatedSettingsConnectedOrganizations.GetResults()[i].UserConflicts != nil {
EspenAlbert marked this conversation as resolved.
Show resolved Hide resolved
orgConfig["user_conflicts"] = FlattenUserConflicts(federatedSettingsConnectedOrganizations.GetResults()[i].GetUserConflicts())
}
federatedSettingsConnectedOrganizationsMap[i] = orgConfig
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ func TestAccFederatedSettingsOrgDSPlural_basic(t *testing.T) {
resource.TestCheckResourceAttrSet(resourceName, "federation_settings_id"),
resource.TestCheckResourceAttrSet(resourceName, "results.#"),
resource.TestCheckResourceAttrSet(resourceName, "results.0.identity_provider_id"),
resource.TestCheckResourceAttrSet(resourceName, "results.0.data_access_identity_provider_ids.#"),
resource.TestCheckResourceAttrSet(resourceName, "results.0.org_id"),
),
},
Expand Down
Loading