Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
3 changes: 3 additions & 0 deletions .changelog/3635.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
resource/tencentcloud_identity_center_external_saml_identity_provider: optimiz code logic
```
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,13 @@ func ResourceTencentCloudIdentityCenterExternalSamlIdentityProvider() *schema.Re
Computed: true,
Description: "X509 certificate in PEM format. If this parameter is specified, all existing certificates will be replaced.",
},

"acs_url": {
Type: schema.TypeString,
Computed: true,
Description: "Acs url.",
},

"certificate_ids": {
Type: schema.TypeList,
Elem: &schema.Schema{
Expand All @@ -76,11 +78,13 @@ func ResourceTencentCloudIdentityCenterExternalSamlIdentityProvider() *schema.Re
Computed: true,
Description: "Certificate ids.",
},

"create_time": {
Type: schema.TypeString,
Computed: true,
Description: "Create time.",
},

"update_time": {
Type: schema.TypeString,
Computed: true,
Expand All @@ -97,6 +101,7 @@ func resourceTencentCloudIdentityCenterExternalSamlIdentityProviderCreate(d *sch
var (
zoneId string
)

if v, ok := d.GetOk("zone_id"); ok {
zoneId = v.(string)
}
Expand All @@ -110,26 +115,26 @@ func resourceTencentCloudIdentityCenterExternalSamlIdentityProviderRead(d *schem
defer tccommon.LogElapsed("resource.tencentcloud_identity_center_external_saml_identity_provider.read")()
defer tccommon.InconsistentCheck(d, meta)()

logId := tccommon.GetLogId(tccommon.ContextNil)

ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)

service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}

zoneId := d.Id()

_ = d.Set("zone_id", zoneId)
var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
service = OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
zoneId = d.Id()
)

respData, err := service.DescribeIdentityCenterExternalSamlIdentityProviderById(ctx, zoneId)
if err != nil {
return err
}

if respData == nil {
log.Printf("[WARN]%s resource `tencentcloud_identity_center_external_saml_identity_provider` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
d.SetId("")
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())
return nil
}

_ = d.Set("zone_id", zoneId)

if respData.EntityId != nil {
_ = d.Set("entity_id", respData.EntityId)
}
Expand All @@ -152,10 +157,11 @@ func resourceTencentCloudIdentityCenterExternalSamlIdentityProviderRead(d *schem
}

if respData1 == nil {
d.SetId("")
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())
d.SetId("")
return nil
}

if respData1.EntityId != nil {
_ = d.Set("entity_id", respData1.EntityId)
}
Expand Down Expand Up @@ -184,22 +190,45 @@ func resourceTencentCloudIdentityCenterExternalSamlIdentityProviderRead(d *schem
_ = d.Set("update_time", respData1.UpdateTime)
}

_ = zoneId
return nil
}

func resourceTencentCloudIdentityCenterExternalSamlIdentityProviderUpdate(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_identity_center_external_saml_identity_provider.update")()
defer tccommon.InconsistentCheck(d, meta)()

logId := tccommon.GetLogId(tccommon.ContextNil)
var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
zoneId = d.Id()
)

if d.HasChange("encoded_metadata_document") {
request := organization.NewSetExternalSAMLIdentityProviderRequest()
if v, ok := d.GetOk("encoded_metadata_document"); ok {
request.EncodedMetadataDocument = helper.String(v.(string))
}

request.ZoneId = &zoneId
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().SetExternalSAMLIdentityProviderWithContext(ctx, request)
if e != nil {
return tccommon.RetryError(e)
} else {
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}

ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
return nil
})

zoneId := d.Id()
if err != nil {
log.Printf("[CRITAL]%s update identity center external saml identity provider failed, reason:%+v", logId, err)
return err
}
}

needChange := false
mutableArgs := []string{"encoded_metadata_document", "sso_status", "entity_id", "login_url", "x509_certificate"}
mutableArgs := []string{"entity_id", "login_url", "x509_certificate"}
for _, v := range mutableArgs {
if d.HasChange(v) {
needChange = true
Expand All @@ -209,19 +238,6 @@ func resourceTencentCloudIdentityCenterExternalSamlIdentityProviderUpdate(d *sch

if needChange {
request := organization.NewSetExternalSAMLIdentityProviderRequest()

if v, ok := d.GetOk("zone_id"); ok {
request.ZoneId = helper.String(v.(string))
}

if v, ok := d.GetOk("encoded_metadata_document"); ok {
request.EncodedMetadataDocument = helper.String(v.(string))
}

if v, ok := d.GetOk("sso_status"); ok {
request.SSOStatus = helper.String(v.(string))
}

if v, ok := d.GetOk("entity_id"); ok {
request.EntityId = helper.String(v.(string))
}
Expand All @@ -234,38 +250,68 @@ func resourceTencentCloudIdentityCenterExternalSamlIdentityProviderUpdate(d *sch
request.X509Certificate = helper.String(v.(string))
}

request.ZoneId = &zoneId
request.EncodedMetadataDocument = helper.String("")
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().SetExternalSAMLIdentityProviderWithContext(ctx, request)
if e != nil {
return tccommon.RetryError(e)
} else {
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}

return nil
})

if err != nil {
log.Printf("[CRITAL]%s update identity center external saml identity provider failed, reason:%+v", logId, err)
return err
}
}

if d.HasChange("sso_status") {
request := organization.NewSetExternalSAMLIdentityProviderRequest()
if v, ok := d.GetOk("sso_status"); ok {
request.SSOStatus = helper.String(v.(string))
}

request.ZoneId = &zoneId
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().SetExternalSAMLIdentityProviderWithContext(ctx, request)
if e != nil {
return tccommon.RetryError(e)
} else {
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}

return nil
})

if err != nil {
log.Printf("[CRITAL]%s update identity center external saml identity provider failed, reason:%+v", logId, err)
return err
}
}

_ = zoneId
return resourceTencentCloudIdentityCenterExternalSamlIdentityProviderRead(d, meta)
}

func resourceTencentCloudIdentityCenterExternalSamlIdentityProviderDelete(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_identity_center_external_saml_identity_provider.delete")()
defer tccommon.InconsistentCheck(d, meta)()

logId := tccommon.GetLogId(tccommon.ContextNil)
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
service = OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
zoneId = d.Id()
)

zoneId := d.Id()
respData1, err := service.DescribeIdentityCenterExternalSamlIdentityProviderById1(ctx, zoneId)
if err != nil {
return err
}

if respData1.SSOStatus != nil && *respData1.SSOStatus == "Enabled" {
request := organization.NewSetExternalSAMLIdentityProviderRequest()
request.ZoneId = helper.String(zoneId)
Expand All @@ -277,38 +323,33 @@ func resourceTencentCloudIdentityCenterExternalSamlIdentityProviderDelete(d *sch
} else {
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}

return nil
})

if err != nil {
log.Printf("[CRITAL]%s update identity center external saml identity provider failed, reason:%+v", logId, err)
return err
}
}
var (
request = organization.NewClearExternalSAMLIdentityProviderRequest()
response = organization.NewClearExternalSAMLIdentityProviderResponse()
)

if v, ok := d.GetOk("zone_id"); ok {
request.ZoneId = helper.String(v.(string))
}

request := organization.NewClearExternalSAMLIdentityProviderRequest()
request.ZoneId = &zoneId
err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().ClearExternalSAMLIdentityProviderWithContext(ctx, request)
if e != nil {
return tccommon.RetryError(e)
} else {
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}
response = result

return nil
})

if err != nil {
log.Printf("[CRITAL]%s delete identity center external saml identity provider failed, reason:%+v", logId, err)
return err
}

_ = response
_ = zoneId
return nil
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,39 @@
Provides a resource to create a organization identity_center_external_saml_identity_provider
Provides a resource to create a Organization identity center external saml identity provider

Example Usage

```hcl
resource "tencentcloud_identity_center_external_saml_identity_provider" "identity_center_external_saml_identity_provider" {
zone_id = "z-xxxxxx"
sso_status = "Enabled"
resource "tencentcloud_identity_center_external_saml_identity_provider" "example" {
zone_id = "z-1os7c9znogct"
sso_status = "Enabled"
encoded_metadata_document = "PD94bWwgdmVyc2lvbj0iM......VzY3JpcHRvcj4="
}
```

Or

```hcl
resource "tencentcloud_identity_center_external_saml_identity_provider" "example" {
zone_id = "z-1os7c9znogct"
entity_id = "https://sts.windows.net/d513d5bc-9f39-4069-ba9a-1eeab2ca58c1/"
login_url = "https://login.microsoftonline.com/d513d5bc-9f39-4069-ba9a-1eeab2ca58c1/saml2"
sso_status = "Enabled"
x509_certificate = <<-EOF
-----BEGIN CERTIFICATE-----
MIIC8DCCAdigAwIBAgIQVbznAx6JSrhKG7gfJdx+jDANBgkqhkiG9w0BAQsFADA0MTIwMAYDVQQD
......
......
......
8hRskP2V6CH9PS0Zz2Zq
-----END CERTIFICATE-----
EOF
}
```

Import

organization identity_center_external_saml_identity_provider can be imported using the id, e.g.
Organization identity center external saml identity provider can be imported using the id, e.g.

```
terraform import tencentcloud_identity_center_external_saml_identity_provider.identity_center_external_saml_identity_provider ${zoneId}
terraform import tencentcloud_identity_center_external_saml_identity_provider.example z-1os7c9znogct
```
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,40 @@ layout: "tencentcloud"
page_title: "TencentCloud: tencentcloud_identity_center_external_saml_identity_provider"
sidebar_current: "docs-tencentcloud-resource-identity_center_external_saml_identity_provider"
description: |-
Provides a resource to create a organization identity_center_external_saml_identity_provider
Provides a resource to create a Organization identity center external saml identity provider
---

# tencentcloud_identity_center_external_saml_identity_provider

Provides a resource to create a organization identity_center_external_saml_identity_provider
Provides a resource to create a Organization identity center external saml identity provider

## Example Usage

```hcl
resource "tencentcloud_identity_center_external_saml_identity_provider" "identity_center_external_saml_identity_provider" {
zone_id = "z-xxxxxx"
sso_status = "Enabled"
resource "tencentcloud_identity_center_external_saml_identity_provider" "example" {
zone_id = "z-1os7c9znogct"
sso_status = "Enabled"
encoded_metadata_document = "PD94bWwgdmVyc2lvbj0iM......VzY3JpcHRvcj4="
}
```

### Or

```hcl
resource "tencentcloud_identity_center_external_saml_identity_provider" "example" {
zone_id = "z-1os7c9znogct"
entity_id = "https://sts.windows.net/d513d5bc-9f39-4069-ba9a-1eeab2ca58c1/"
login_url = "https://login.microsoftonline.com/d513d5bc-9f39-4069-ba9a-1eeab2ca58c1/saml2"
sso_status = "Enabled"
x509_certificate = <<-EOF
-----BEGIN CERTIFICATE-----
MIIC8DCCAdigAwIBAgIQVbznAx6JSrhKG7gfJdx+jDANBgkqhkiG9w0BAQsFADA0MTIwMAYDVQQD
......
......
......
8hRskP2V6CH9PS0Zz2Zq
-----END CERTIFICATE-----
EOF
}
```

Expand Down Expand Up @@ -44,9 +65,9 @@ In addition to all arguments above, the following attributes are exported:

## Import

organization identity_center_external_saml_identity_provider can be imported using the id, e.g.
Organization identity center external saml identity provider can be imported using the id, e.g.

```
terraform import tencentcloud_identity_center_external_saml_identity_provider.identity_center_external_saml_identity_provider ${zoneId}
terraform import tencentcloud_identity_center_external_saml_identity_provider.example z-1os7c9znogct
```

Loading