okta / terraform-provider-okta

A Terraform provider to manage Okta resources, enabling infrastructure-as-code provisioning and management of users, groups, applications, and other Okta objects.
https://registry.terraform.io/providers/okta/okta
Mozilla Public License 2.0
248 stars 201 forks source link

`data_source_okta_app_user_assignments` - Expose entire api response #1844

Open exitcode0 opened 7 months ago

exitcode0 commented 7 months ago

Community Note

Description

okta_app_user_assignments uses /api/v1/apps/%v/users via ListApplicationUsers

The DataSource currently returns a list of user ids This API returns additional information that we currently don't expose to the user the result is that the user may need to call the API twice for the same data

Additional information this DataSource could surface

I'm curious if a change like this would warrant a major version or if this could go out in a minor version I also don't have any strong opinions on what should be surfaced in this dataSource, just calling out the gap 🙂

New or Affected Resource(s)

Potential Terraform Configuration

The below example is a contrived example, but hopefully it makes the point clear

Before

data "okta_app" "example_app" { label = "Example App" }
data "okta_app_user_assignments" "example_app" { id = data.okta_app.example_app.id }
data "okta_user" "example_app_users" {
  for_each    = data.okta_app_user_assignments.example_app.users
  user_id     = each.key
  skip_roles  = true
  skip_groups = true
}
resource "okta_group" "example_app_provisioning_errors" {name = "Example App provisioning errors"}
resource "okta_group_memberships" "example_app_provisioning_errors" {
  group_id = okta_group.example_app_provisioning_errors.id
  users = [for user in data.okta_user.example_app_users : user.id if user.syncState != "ERROR"]
}

After

data "okta_app" "example_app" { label = "Example App" }
data "okta_app_user_assignments" "example_app" { id = data.okta_app.example_app.id }
resource "okta_group" "example_app_provisioning_errors" {name = "Example App provisioning errors"}
resource "okta_group_memberships" "okta_administrators" {
  group_id = okta_group.okta_administrators.id
  users = [for user in data.okta_app_user_assignments.example_app.users : user.id if user.syncState != "ERROR"]
}

References

duytiennguyen-okta commented 6 months ago

OKTA internal reference https://oktainc.atlassian.net/browse/OKTA-675524