Skip to content

Commit 9467646

Browse files
author
mikatong
committed
support tco identity center
1 parent ac20628 commit 9467646

File tree

44 files changed

+16340
-4236
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+16340
-4236
lines changed

.changelog/2795.txt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
```release-note:new-resource
2+
tencentcloud_identity_center_user
3+
```
4+
5+
```release-note:new-resource
6+
tencentcloud_identity_center_group
7+
```
8+
9+
```release-note:new-resource
10+
tencentcloud_identity_center_user_group_attachment
11+
```
12+
13+
```release-note:new-resource
14+
tencentcloud_identity_center_external_saml_identity_provider
15+
```
16+
17+
```release-note:new-resource
18+
tencentcloud_identity_center_role_configuration
19+
```
20+
21+
```release-note:new-resource
22+
tencentcloud_identity_center_role_configuration_permission_policy_attachment
23+
```
24+
25+
```release-note:new-resource
26+
tencentcloud_identity_center_user_sync_provisioning
27+
```
28+
29+
```release-note:new-resource
30+
tencentcloud_identity_center_role_assignment
31+
```

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ require (
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.984
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.970
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.984
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.988
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.960
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.692
@@ -69,7 +69,7 @@ require (
6969
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.949
7070
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.844
7171
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853
72-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.910
72+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.988
7373
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.873
7474
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.859
7575
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/pts v1.0.762

go.sum

Lines changed: 4 additions & 100 deletions
Large diffs are not rendered by default.

tencentcloud/provider.go

Lines changed: 1008 additions & 1000 deletions
Large diffs are not rendered by default.

tencentcloud/provider.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1673,6 +1673,14 @@ Tencent Cloud Organization (TCO)
16731673
tencentcloud_organization_quit_organization_operation
16741674
tencentcloud_organization_org_share_unit
16751675
tencentcloud_organization_org_share_unit_member
1676+
tencentcloud_identity_center_user
1677+
tencentcloud_identity_center_group
1678+
tencentcloud_identity_center_user_group_attachment
1679+
tencentcloud_identity_center_external_saml_identity_provider
1680+
tencentcloud_identity_center_role_configuration
1681+
tencentcloud_identity_center_role_configuration_permission_policy_attachment
1682+
tencentcloud_identity_center_user_sync_provisioning
1683+
tencentcloud_identity_center_role_assignment
16761684

16771685
TDSQL-C for PostgreSQL(TDCPG)
16781686
Data Source
Lines changed: 314 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,314 @@
1+
package tco
2+
3+
import (
4+
"context"
5+
"log"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331"
10+
11+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
12+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
13+
)
14+
15+
func ResourceTencentCloudIdentityCenterExternalSamlIdentityProvider() *schema.Resource {
16+
return &schema.Resource{
17+
Create: resourceTencentCloudIdentityCenterExternalSamlIdentityProviderCreate,
18+
Read: resourceTencentCloudIdentityCenterExternalSamlIdentityProviderRead,
19+
Update: resourceTencentCloudIdentityCenterExternalSamlIdentityProviderUpdate,
20+
Delete: resourceTencentCloudIdentityCenterExternalSamlIdentityProviderDelete,
21+
Importer: &schema.ResourceImporter{
22+
State: schema.ImportStatePassthrough,
23+
},
24+
Schema: map[string]*schema.Schema{
25+
"zone_id": {
26+
Type: schema.TypeString,
27+
Required: true,
28+
ForceNew: true,
29+
Description: "Space ID.",
30+
},
31+
32+
"encoded_metadata_document": {
33+
Type: schema.TypeString,
34+
Optional: true,
35+
Computed: true,
36+
Description: "IdP metadata document (Base64 encoded). Provided by an IdP that supports the SAML 2.0 protocol.",
37+
},
38+
39+
"sso_status": {
40+
Type: schema.TypeString,
41+
Optional: true,
42+
Computed: true,
43+
Description: "SSO enabling status. Valid values: Enabled, Disabled (default).",
44+
},
45+
46+
"entity_id": {
47+
Type: schema.TypeString,
48+
Optional: true,
49+
Computed: true,
50+
Description: "IdP identifier.",
51+
},
52+
53+
"login_url": {
54+
Type: schema.TypeString,
55+
Optional: true,
56+
Computed: true,
57+
Description: "IdP login URL.",
58+
},
59+
60+
"x509_certificate": {
61+
Type: schema.TypeString,
62+
Optional: true,
63+
Computed: true,
64+
Description: "X509 certificate in PEM format. If this parameter is specified, all existing certificates will be replaced.",
65+
},
66+
"acs_url": {
67+
Type: schema.TypeString,
68+
Computed: true,
69+
Description: "Acs url.",
70+
},
71+
"certificate_ids": {
72+
Type: schema.TypeList,
73+
Elem: &schema.Schema{
74+
Type: schema.TypeString,
75+
},
76+
Computed: true,
77+
Description: "Certificate ids.",
78+
},
79+
"create_time": {
80+
Type: schema.TypeString,
81+
Computed: true,
82+
Description: "Create time.",
83+
},
84+
"update_time": {
85+
Type: schema.TypeString,
86+
Computed: true,
87+
Description: "Update time.",
88+
},
89+
},
90+
}
91+
}
92+
93+
func resourceTencentCloudIdentityCenterExternalSamlIdentityProviderCreate(d *schema.ResourceData, meta interface{}) error {
94+
defer tccommon.LogElapsed("resource.tencentcloud_identity_center_external_saml_identity_provider.create")()
95+
defer tccommon.InconsistentCheck(d, meta)()
96+
97+
var (
98+
zoneId string
99+
)
100+
if v, ok := d.GetOk("zone_id"); ok {
101+
zoneId = v.(string)
102+
}
103+
104+
d.SetId(zoneId)
105+
106+
return resourceTencentCloudIdentityCenterExternalSamlIdentityProviderUpdate(d, meta)
107+
}
108+
109+
func resourceTencentCloudIdentityCenterExternalSamlIdentityProviderRead(d *schema.ResourceData, meta interface{}) error {
110+
defer tccommon.LogElapsed("resource.tencentcloud_identity_center_external_saml_identity_provider.read")()
111+
defer tccommon.InconsistentCheck(d, meta)()
112+
113+
logId := tccommon.GetLogId(tccommon.ContextNil)
114+
115+
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
116+
117+
service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
118+
119+
zoneId := d.Id()
120+
121+
_ = d.Set("zone_id", zoneId)
122+
123+
respData, err := service.DescribeIdentityCenterExternalSamlIdentityProviderById(ctx, zoneId)
124+
if err != nil {
125+
return err
126+
}
127+
128+
if respData == nil {
129+
d.SetId("")
130+
log.Printf("[WARN]%s resource `identity_center_external_saml_identity_provider` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
131+
return nil
132+
}
133+
if respData.EntityId != nil {
134+
_ = d.Set("entity_id", respData.EntityId)
135+
}
136+
137+
if respData.ZoneId != nil {
138+
_ = d.Set("zone_id", respData.ZoneId)
139+
}
140+
141+
if respData.EncodedMetadataDocument != nil {
142+
_ = d.Set("encoded_metadata_document", respData.EncodedMetadataDocument)
143+
}
144+
145+
if respData.AcsUrl != nil {
146+
_ = d.Set("acs_url", respData.AcsUrl)
147+
}
148+
149+
respData1, err := service.DescribeIdentityCenterExternalSamlIdentityProviderById1(ctx, zoneId)
150+
if err != nil {
151+
return err
152+
}
153+
154+
if respData1 == nil {
155+
d.SetId("")
156+
log.Printf("[WARN]%s resource `identity_center_external_saml_identity_provider` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
157+
return nil
158+
}
159+
if respData1.EntityId != nil {
160+
_ = d.Set("entity_id", respData1.EntityId)
161+
}
162+
163+
if respData1.SSOStatus != nil {
164+
_ = d.Set("sso_status", respData1.SSOStatus)
165+
}
166+
167+
if respData1.EncodedMetadataDocument != nil {
168+
_ = d.Set("encoded_metadata_document", respData1.EncodedMetadataDocument)
169+
}
170+
171+
if respData1.CertificateIds != nil {
172+
_ = d.Set("certificate_ids", respData1.CertificateIds)
173+
}
174+
175+
if respData1.LoginUrl != nil {
176+
_ = d.Set("login_url", respData1.LoginUrl)
177+
}
178+
179+
if respData1.CreateTime != nil {
180+
_ = d.Set("create_time", respData1.CreateTime)
181+
}
182+
183+
if respData1.UpdateTime != nil {
184+
_ = d.Set("update_time", respData1.UpdateTime)
185+
}
186+
187+
_ = zoneId
188+
return nil
189+
}
190+
191+
func resourceTencentCloudIdentityCenterExternalSamlIdentityProviderUpdate(d *schema.ResourceData, meta interface{}) error {
192+
defer tccommon.LogElapsed("resource.tencentcloud_identity_center_external_saml_identity_provider.update")()
193+
defer tccommon.InconsistentCheck(d, meta)()
194+
195+
logId := tccommon.GetLogId(tccommon.ContextNil)
196+
197+
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
198+
199+
zoneId := d.Id()
200+
201+
needChange := false
202+
mutableArgs := []string{"encoded_metadata_document", "sso_status", "entity_id", "login_url", "x509_certificate"}
203+
for _, v := range mutableArgs {
204+
if d.HasChange(v) {
205+
needChange = true
206+
break
207+
}
208+
}
209+
210+
if needChange {
211+
request := organization.NewSetExternalSAMLIdentityProviderRequest()
212+
213+
if v, ok := d.GetOk("zone_id"); ok {
214+
request.ZoneId = helper.String(v.(string))
215+
}
216+
217+
if v, ok := d.GetOk("encoded_metadata_document"); ok {
218+
request.EncodedMetadataDocument = helper.String(v.(string))
219+
}
220+
221+
if v, ok := d.GetOk("sso_status"); ok {
222+
request.SSOStatus = helper.String(v.(string))
223+
}
224+
225+
if v, ok := d.GetOk("entity_id"); ok {
226+
request.EntityId = helper.String(v.(string))
227+
}
228+
229+
if v, ok := d.GetOk("login_url"); ok {
230+
request.LoginUrl = helper.String(v.(string))
231+
}
232+
233+
if v, ok := d.GetOk("x509_certificate"); ok {
234+
request.X509Certificate = helper.String(v.(string))
235+
}
236+
237+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
238+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().SetExternalSAMLIdentityProviderWithContext(ctx, request)
239+
if e != nil {
240+
return tccommon.RetryError(e)
241+
} else {
242+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
243+
}
244+
return nil
245+
})
246+
if err != nil {
247+
log.Printf("[CRITAL]%s update identity center external saml identity provider failed, reason:%+v", logId, err)
248+
return err
249+
}
250+
}
251+
252+
_ = zoneId
253+
return resourceTencentCloudIdentityCenterExternalSamlIdentityProviderRead(d, meta)
254+
}
255+
256+
func resourceTencentCloudIdentityCenterExternalSamlIdentityProviderDelete(d *schema.ResourceData, meta interface{}) error {
257+
defer tccommon.LogElapsed("resource.tencentcloud_identity_center_external_saml_identity_provider.delete")()
258+
defer tccommon.InconsistentCheck(d, meta)()
259+
260+
logId := tccommon.GetLogId(tccommon.ContextNil)
261+
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
262+
service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
263+
264+
zoneId := d.Id()
265+
respData1, err := service.DescribeIdentityCenterExternalSamlIdentityProviderById1(ctx, zoneId)
266+
if err != nil {
267+
return err
268+
}
269+
if respData1.SSOStatus != nil && *respData1.SSOStatus == "Enabled" {
270+
request := organization.NewSetExternalSAMLIdentityProviderRequest()
271+
request.ZoneId = helper.String(zoneId)
272+
request.SSOStatus = helper.String("Disabled")
273+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
274+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().SetExternalSAMLIdentityProviderWithContext(ctx, request)
275+
if e != nil {
276+
return tccommon.RetryError(e)
277+
} else {
278+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
279+
}
280+
return nil
281+
})
282+
if err != nil {
283+
log.Printf("[CRITAL]%s update identity center external saml identity provider failed, reason:%+v", logId, err)
284+
return err
285+
}
286+
}
287+
var (
288+
request = organization.NewClearExternalSAMLIdentityProviderRequest()
289+
response = organization.NewClearExternalSAMLIdentityProviderResponse()
290+
)
291+
292+
if v, ok := d.GetOk("zone_id"); ok {
293+
request.ZoneId = helper.String(v.(string))
294+
}
295+
296+
err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
297+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().ClearExternalSAMLIdentityProviderWithContext(ctx, request)
298+
if e != nil {
299+
return tccommon.RetryError(e)
300+
} else {
301+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
302+
}
303+
response = result
304+
return nil
305+
})
306+
if err != nil {
307+
log.Printf("[CRITAL]%s delete identity center external saml identity provider failed, reason:%+v", logId, err)
308+
return err
309+
}
310+
311+
_ = response
312+
_ = zoneId
313+
return nil
314+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
Provides a resource to create a organization identity_center_external_saml_identity_provider
2+
3+
Example Usage
4+
5+
```hcl
6+
resource "tencentcloud_identity_center_external_saml_identity_provider" "identity_center_external_saml_identity_provider" {
7+
zone_id = "z-xxxxxx"
8+
sso_status = "Enabled"
9+
}
10+
```
11+
12+
Import
13+
14+
organization identity_center_external_saml_identity_provider can be imported using the id, e.g.
15+
16+
```
17+
terraform import tencentcloud_identity_center_external_saml_identity_provider.identity_center_external_saml_identity_provider ${zoneId}
18+
```

0 commit comments

Comments
 (0)