diff --git a/README.md b/README.md index 2372049..312d101 100644 --- a/README.md +++ b/README.md @@ -254,6 +254,7 @@ No modules. | [aws_identitystore_group.sso_groups](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/identitystore_group) | resource | | [aws_identitystore_group_membership.sso_group_membership](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/identitystore_group_membership) | resource | | [aws_identitystore_group_membership.sso_group_membership_existing_google_sso_users](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/identitystore_group_membership) | resource | +| [aws_identitystore_group_membership.sso_group_membership_existing_sso_users](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/identitystore_group_membership) | resource | | [aws_identitystore_user.sso_users](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/identitystore_user) | resource | | [aws_ssoadmin_account_assignment.account_assignment](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssoadmin_account_assignment) | resource | | [aws_ssoadmin_application.sso_apps](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssoadmin_application) | resource | diff --git a/locals.tf b/locals.tf index d996c3d..47f5a7d 100644 --- a/locals.tf +++ b/locals.tf @@ -14,6 +14,20 @@ locals { for s in local.flatten_user_data : format("%s_%s", s.user_name, s.group_name) => s } + # Create a new local variable by flattening the complex type given in the variable "existing_sso_users" + flatten_user_data_existing_sso_users = flatten([ + for this_existing_user in keys(var.existing_sso_users) : [ + for group in var.existing_sso_users[this_existing_user].group_membership : { + user_name = var.existing_sso_users[this_existing_user].user_name + group_name = group + } + ] + ]) + + users_and_their_groups_existing_sso_users = { + for s in local.flatten_user_data_existing_sso_users : format("%s_%s", s.user_name, s.group_name) => s + } + # Create a new local variable by flattening the complex type given in the variable "existing_google_sso_users" flatten_user_data_existing_google_sso_users = flatten([ for this_existing_google_user in keys(var.existing_google_sso_users) : [ diff --git a/main.tf b/main.tf index 9fa2617..120c583 100644 --- a/main.tf +++ b/main.tf @@ -137,7 +137,17 @@ resource "aws_identitystore_group_membership" "sso_group_membership" { identity_store_id = local.sso_instance_id group_id = (contains(local.this_groups, each.value.group_name) ? aws_identitystore_group.sso_groups[each.value.group_name].group_id : data.aws_identitystore_group.existing_sso_groups[each.value.group_name].group_id) - member_id = (contains(local.this_users, each.value.user_name) ? aws_identitystore_user.sso_users[each.value.user_name].user_id : data.aws_identitystore_user.existing_sso_users[each.value.user_name].user_id) + member_id = aws_identitystore_user.sso_users[each.value.user_name].user_id + +} + +# Existing Users with New Groups +resource "aws_identitystore_group_membership" "sso_group_membership_existing_sso_users" { + for_each = local.users_and_their_groups_existing_sso_users + identity_store_id = local.sso_instance_id + + group_id = (contains(local.this_groups, each.value.group_name) ? aws_identitystore_group.sso_groups[each.value.group_name].group_id : data.aws_identitystore_group.existing_sso_groups[each.value.group_name].group_id) + member_id = data.aws_identitystore_user.existing_sso_users[each.value.user_name].user_id }