Skip to content

Commit 5f58e2b

Browse files
committed
feat: adds realm_assignment support
1 parent bef060e commit 5f58e2b

19 files changed

Lines changed: 720 additions & 30 deletions
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
data "okta_realm_assignment" "example_name" {
2+
name = "Example Realm Assignment"
3+
}
4+
5+
data "okta_realm_assignment" "example_id" {
6+
id = "<realm_assignment_id>"
7+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
data "okta_realm_assignment" "test" {
2+
name = "AccTest Example Realm Assignment"
3+
depends_on = [okta_realm_assignment.test]
4+
}
5+
6+
resource "okta_realm_assignment" "test" {
7+
name = "AccTest Example Realm Assignment"
8+
priority = 55
9+
status = "ACTIVE"
10+
profile_source_id = okta_idp_saml.test.id
11+
condition_expression = "user.profile.login.contains(\"@acctest.com\")"
12+
realm_id = okta_realm.test.id
13+
}
14+
15+
resource "okta_realm" "test" {
16+
name = "AccTest Test Realm"
17+
realm_type = "DEFAULT"
18+
}
19+
20+
resource "okta_idp_saml" "test" {
21+
name = "testAcc_replace_with_uuid"
22+
acs_type = "INSTANCE"
23+
sso_url = "https://idp.example.com"
24+
sso_destination = "https://idp.example.com"
25+
sso_binding = "HTTP-POST"
26+
username_template = "idpuser.email"
27+
kid = okta_idp_saml_key.test.id
28+
issuer = "https://idp.example.com"
29+
request_signature_scope = "REQUEST"
30+
response_signature_scope = "ANY"
31+
profile_master = true
32+
}
33+
34+
resource "okta_idp_saml_key" "test" {
35+
x5c = ["MIIDnjCCAoagAwIBAgIGAVG3MN+PMA0GCSqGSIb3DQEBBQUAMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5p\nYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEDAOBgNVBAMM\nB2V4YW1wbGUxHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMTUxMjE4MjIyMjMyWhcNMjUxMjE4MjIyMzMyWjCB\njzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9r\ndGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRAwDgYDVQQDDAdleGFtcGxlMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29t\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtcnyvuVCrsFEKCwHDenS3Ocjed8eWDv3zLtD2K/iZfE8BMj2wpTf\nn6Ry8zCYey3mWlKdxIybnV9amrujGRnE0ab6Q16v9D6RlFQLOG6dwqoRKuZy33Uyg8PGdEudZjGbWuKCqqXEp+UKALJHV+k4\nwWeVH8g5d1n3KyR2TVajVJpCrPhLFmq1Il4G/IUnPe4MvjXqB6CpKkog1+ThWsItPRJPAM+RweFHXq7KfChXsYE7Mmfuly8s\nDQlvBmQyxZnFHVuiPfCvGHJjpvHy11YlHdOjfgqHRvZbmo30+y0X/oY/yV4YEJ00LL6eJWU4wi7ViY3HP6/VCdRjHoRdr5L/\nDwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQCzzhOFkvyYLNFj2WDcq1YqD4sBy1iCia9QpRH3rjQvMKDwQDYWbi6EdOX0TQ/I\nYR7UWGj+2pXd6v0t33lYtoKocp/4lUvT3tfBnWZ5KnObi+J2uY2teUqoYkASN7F+GRPVOuMVoVgm05ss8tuMb2dLc9vsx93s\nDt+XlMTv/2qi5VPwaDtqduKkzwW9lUfn4xIMkTiVvCpe0X2HneD2Bpuao3/U8Rk0uiPfq6TooWaoW3kjsmErhEAs9bA7xuqo\n1KKY9CdHcFhkSsMhoeaZylZHtzbnoipUlQKSLMdJQiiYZQ0bYL83/Ta9fulr1EERICMFt3GUmtYaZZKHpWSfdJp9"]
36+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Should fail to find the realm assignment because it doesn't exist
2+
data "okta_realm_assignment" "test_not_found" {
3+
name = "Unknown Example Realm Assignment"
4+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# okta_realm_assignment
2+
3+
Represents an Okta Realm Assignment
4+
Realm Assignment. [See Okta documentation for more details](https://developer.okta.com/docs/api/openapi/okta-management/management/tag/RealmAssignment/).
5+
6+
- Example of a simple realm assignment [can be found here](./resource.tf)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
terraform import okta_realm_assignment.example <realm_assignment_id>
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
resource "okta_realm_assignment" "test" {
2+
name = "TestAcc Example Realm Assignment"
3+
priority = 55
4+
status = "ACTIVE"
5+
profile_source_id = okta_idp_saml.test.id
6+
condition_expression = "user.profile.login.contains(\"@acctest.com\")"
7+
realm_id = okta_realm.test.id
8+
}
9+
10+
resource "okta_realm_assignment" "test_two" {
11+
name = "TestAcc Example Two Realm Assignment"
12+
status = "INACTIVE"
13+
profile_source_id = okta_idp_saml.test.id
14+
condition_expression = "user.profile.title==\"Foo\""
15+
realm_id = okta_realm.test.id
16+
}
17+
18+
19+
resource "okta_realm" "test" {
20+
name = "TestAcc Example Assignment Realm"
21+
realm_type = "DEFAULT"
22+
}
23+
24+
25+
resource "okta_idp_saml" "test" {
26+
name = "testAcc_replace_with_uuid"
27+
acs_type = "INSTANCE"
28+
sso_url = "https://idp.example.com"
29+
sso_destination = "https://idp.example.com"
30+
sso_binding = "HTTP-POST"
31+
username_template = "idpuser.email"
32+
kid = okta_idp_saml_key.test.id
33+
issuer = "https://idp.example.com"
34+
request_signature_scope = "REQUEST"
35+
response_signature_scope = "ANY"
36+
profile_master = true
37+
}
38+
39+
resource "okta_idp_saml_key" "test" {
40+
x5c = ["MIIDnjCCAoagAwIBAgIGAVG3MN+PMA0GCSqGSIb3DQEBBQUAMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5p\nYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEDAOBgNVBAMM\nB2V4YW1wbGUxHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMTUxMjE4MjIyMjMyWhcNMjUxMjE4MjIyMzMyWjCB\njzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9r\ndGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRAwDgYDVQQDDAdleGFtcGxlMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29t\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtcnyvuVCrsFEKCwHDenS3Ocjed8eWDv3zLtD2K/iZfE8BMj2wpTf\nn6Ry8zCYey3mWlKdxIybnV9amrujGRnE0ab6Q16v9D6RlFQLOG6dwqoRKuZy33Uyg8PGdEudZjGbWuKCqqXEp+UKALJHV+k4\nwWeVH8g5d1n3KyR2TVajVJpCrPhLFmq1Il4G/IUnPe4MvjXqB6CpKkog1+ThWsItPRJPAM+RweFHXq7KfChXsYE7Mmfuly8s\nDQlvBmQyxZnFHVuiPfCvGHJjpvHy11YlHdOjfgqHRvZbmo30+y0X/oY/yV4YEJ00LL6eJWU4wi7ViY3HP6/VCdRjHoRdr5L/\nDwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQCzzhOFkvyYLNFj2WDcq1YqD4sBy1iCia9QpRH3rjQvMKDwQDYWbi6EdOX0TQ/I\nYR7UWGj+2pXd6v0t33lYtoKocp/4lUvT3tfBnWZ5KnObi+J2uY2teUqoYkASN7F+GRPVOuMVoVgm05ss8tuMb2dLc9vsx93s\nDt+XlMTv/2qi5VPwaDtqduKkzwW9lUfn4xIMkTiVvCpe0X2HneD2Bpuao3/U8Rk0uiPfq6TooWaoW3kjsmErhEAs9bA7xuqo\n1KKY9CdHcFhkSsMhoeaZylZHtzbnoipUlQKSLMdJQiiYZQ0bYL83/Ta9fulr1EERICMFt3GUmtYaZZKHpWSfdJp9"]
41+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
resource "okta_realm_assignment" "test" {
2+
name = "TestAcc Example Realm Assignment Updated"
3+
priority = 111
4+
status = "ACTIVE"
5+
profile_source_id = okta_idp_saml.test.id
6+
condition_expression = "user.profile.login.contains(\"@acctestupdated.com\")"
7+
realm_id = okta_realm.test.id
8+
}
9+
10+
resource "okta_realm" "test" {
11+
name = "TestAcc Example Assignment Realm"
12+
realm_type = "DEFAULT"
13+
}
14+
15+
resource "okta_idp_saml" "test" {
16+
name = "testAcc_replace_with_uuid"
17+
acs_type = "INSTANCE"
18+
sso_url = "https://idp.example.com"
19+
sso_destination = "https://idp.example.com"
20+
sso_binding = "HTTP-POST"
21+
username_template = "idpuser.email"
22+
kid = okta_idp_saml_key.test.id
23+
issuer = "https://idp.example.com"
24+
request_signature_scope = "REQUEST"
25+
response_signature_scope = "ANY"
26+
profile_master = true
27+
}
28+
29+
resource "okta_idp_saml_key" "test" {
30+
x5c = ["MIIDnjCCAoagAwIBAgIGAVG3MN+PMA0GCSqGSIb3DQEBBQUAMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5p\nYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEDAOBgNVBAMM\nB2V4YW1wbGUxHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMTUxMjE4MjIyMjMyWhcNMjUxMjE4MjIyMzMyWjCB\njzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9r\ndGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRAwDgYDVQQDDAdleGFtcGxlMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29t\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtcnyvuVCrsFEKCwHDenS3Ocjed8eWDv3zLtD2K/iZfE8BMj2wpTf\nn6Ry8zCYey3mWlKdxIybnV9amrujGRnE0ab6Q16v9D6RlFQLOG6dwqoRKuZy33Uyg8PGdEudZjGbWuKCqqXEp+UKALJHV+k4\nwWeVH8g5d1n3KyR2TVajVJpCrPhLFmq1Il4G/IUnPe4MvjXqB6CpKkog1+ThWsItPRJPAM+RweFHXq7KfChXsYE7Mmfuly8s\nDQlvBmQyxZnFHVuiPfCvGHJjpvHy11YlHdOjfgqHRvZbmo30+y0X/oY/yV4YEJ00LL6eJWU4wi7ViY3HP6/VCdRjHoRdr5L/\nDwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQCzzhOFkvyYLNFj2WDcq1YqD4sBy1iCia9QpRH3rjQvMKDwQDYWbi6EdOX0TQ/I\nYR7UWGj+2pXd6v0t33lYtoKocp/4lUvT3tfBnWZ5KnObi+J2uY2teUqoYkASN7F+GRPVOuMVoVgm05ss8tuMb2dLc9vsx93s\nDt+XlMTv/2qi5VPwaDtqduKkzwW9lUfn4xIMkTiVvCpe0X2HneD2Bpuao3/U8Rk0uiPfq6TooWaoW3kjsmErhEAs9bA7xuqo\n1KKY9CdHcFhkSsMhoeaZylZHtzbnoipUlQKSLMdJQiiYZQ0bYL83/Ta9fulr1EERICMFt3GUmtYaZZKHpWSfdJp9"]
31+
}
32+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
resource "okta_realm_assignment" "test" {
2+
name = "Example Realm Assignment"
3+
priority = 55
4+
status = "ACTIVE"
5+
profile_source_id = okta_idp_saml.test.id
6+
condition_expression = "user.profile.login.contains(\"@example.com\")"
7+
realm_id = okta_realm.example.id
8+
}
9+
10+
resource "okta_realm" "example" {
11+
name = "Example Realm"
12+
realm_type = "DEFAULT"
13+
}

okta/resources/resources.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ const (
9898
OktaIDaaSPolicySignOn = "okta_policy_signon"
9999
OktaIDaaSProfileMapping = "okta_profile_mapping"
100100
OktaIDaaSRateLimiting = "okta_rate_limiting"
101+
OktaIDaaSRealm = "okta_realm"
102+
OktaIDaaSRealmAssignment = "okta_realm_assignment"
101103
OktaIDaaSResourceSet = "okta_resource_set"
102104
OktaIDaaSRoleSubscription = "okta_role_subscription"
103105
OktaIDaaSSecurityNotificationEmails = "okta_security_notification_emails"

okta/data_source_okta_realm.go renamed to okta/services/idaas/data_source_okta_realm.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package okta
1+
package idaas
22

33
import (
44
"context"
@@ -14,13 +14,14 @@ import (
1414
"github.com/hashicorp/terraform-plugin-framework/types"
1515
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
1616
"github.com/okta/okta-sdk-golang/v5/okta"
17+
"github.com/okta/terraform-provider-okta/okta/config"
1718
)
1819

1920
type realmDataSource struct {
20-
config *Config
21+
config *config.Config
2122
}
2223

23-
func NewRealmDataSource() datasource.DataSource {
24+
func newRealmDataSource() datasource.DataSource {
2425
return &realmDataSource{}
2526
}
2627

@@ -77,7 +78,7 @@ func (r *realmDataSource) Read(ctx context.Context, req datasource.ReadRequest,
7778

7879
var selectedRealm *okta.Realm
7980
if state.ID.ValueString() != "" {
80-
realm, response, err := r.config.oktaSDKClientV5.RealmAPI.GetRealm(ctx, state.ID.ValueString()).Execute()
81+
realm, response, err := r.config.OktaIDaaSClient.OktaSDKClientV5().RealmAPI.GetRealm(ctx, state.ID.ValueString()).Execute()
8182
if err != nil {
8283
body, ioErr := io.ReadAll(response.Body)
8384
defer response.Body.Close()
@@ -93,7 +94,7 @@ func (r *realmDataSource) Read(ctx context.Context, req datasource.ReadRequest,
9394
searchString := fmt.Sprintf(`profile.name eq "%s"`, state.Name.ValueString())
9495

9596
err := retry.RetryContext(ctx, 3*time.Second, func() *retry.RetryError {
96-
realms, response, err := r.config.oktaSDKClientV5.RealmAPI.ListRealms(ctx).Search(searchString).Execute()
97+
realms, response, err := r.config.OktaIDaaSClient.OktaSDKClientV5().RealmAPI.ListRealms(ctx).Search(searchString).Execute()
9798
if err != nil {
9899
body, ioErr := io.ReadAll(response.Body)
99100
defer response.Body.Close()

0 commit comments

Comments
 (0)