Skip to content
Open
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
7 changes: 7 additions & 0 deletions .changelog/3517.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
```release-note:new-resource
tencentcloud_organization_external_saml_idp_certificate
```

```release-note:new-resource
tencentcloud_organization_external_saml_identity_provider
```
16 changes: 9 additions & 7 deletions tencentcloud/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -1202,6 +1202,7 @@ func Provider() *schema.Provider {
"tencentcloud_organization_org_share_unit_members": tco.DataSourceTencentCloudOrganizationOrgShareUnitMembers(),
"tencentcloud_role_configuration_provisionings": tco.DataSourceTencentCloudRoleConfigurationProvisionings(),
"tencentcloud_organization_resource_to_share_member": tco.DataSourceTencentCloudOrganizationResourceToShareMember(),
"tencentcloud_organization_org_share_area": tco.DataSourceTencentCloudOrganizationOrgShareArea(),
"tencentcloud_pts_scenario_with_jobs": pts.DataSourceTencentCloudPtsScenarioWithJobs(),
"tencentcloud_cam_list_attached_user_policy": cam.DataSourceTencentCloudCamListAttachedUserPolicy(),
"tencentcloud_cam_secret_last_used_time": cam.DataSourceTencentCloudCamSecretLastUsedTime(),
Expand Down Expand Up @@ -1235,7 +1236,6 @@ func Provider() *schema.Provider {
"tencentcloud_clickhouse_spec": cdwch.DataSourceTencentCloudClickhouseSpec(),
"tencentcloud_clickhouse_instance_shards": cdwch.DataSourceTencentCloudClickhouseInstanceShards(),
"tencentcloud_clickhouse_instance_nodes": cdwch.DataSourceTencentCloudClickhouseInstanceNodes(),
"tencentcloud_organization_org_share_area": tco.DataSourceTencentCloudOrganizationOrgShareArea(),
"tencentcloud_kubernetes_cluster_native_node_pools": tke.DataSourceTencentCloudKubernetesClusterNativeNodePools(),
"tencentcloud_cdc_dedicated_cluster_hosts": cdc.DataSourceTencentCloudCdcDedicatedClusterHosts(),
"tencentcloud_cdc_dedicated_cluster_instance_types": cdc.DataSourceTencentCloudCdcDedicatedClusterInstanceTypes(),
Expand Down Expand Up @@ -1572,7 +1572,6 @@ func Provider() *schema.Provider {
"tencentcloud_cam_set_policy_version_config": cam.ResourceTencentCloudCamSetPolicyVersionConfig(),
"tencentcloud_cam_user_permission_boundary_attachment": cam.ResourceTencentCloudCamUserPermissionBoundaryAttachment(),
"tencentcloud_cam_role_permission_boundary_attachment": cam.ResourceTencentCloudCamRolePermissionBoundaryAttachment(),
"tencentcloud_organization_quit_organization_operation": tco.ResourceTencentCloudOrganizationQuitOrganizationOperation(),
"tencentcloud_ciam_user_group": ciam.ResourceTencentCloudCiamUserGroup(),
"tencentcloud_ciam_user_store": ciam.ResourceTencentCloudCiamUserStore(),
"tencentcloud_scf_function": scf.ResourceTencentCloudScfFunction(),
Expand Down Expand Up @@ -1993,6 +1992,7 @@ func Provider() *schema.Provider {
"tencentcloud_tat_invoker_config": tat.ResourceTencentCloudTatInvokerConfig(),
"tencentcloud_tat_invocation_invoke_attachment": tat.ResourceTencentCloudTatInvocationInvokeAttachment(),
"tencentcloud_tat_invocation_command_attachment": tat.ResourceTencentCloudTatInvocationCommandAttachment(),
"tencentcloud_organization_quit_organization_operation": tco.ResourceTencentCloudOrganizationQuitOrganizationOperation(),
"tencentcloud_organization_org_node": tco.ResourceTencentCloudOrganizationOrgNode(),
"tencentcloud_organization_org_member": tco.ResourceTencentCloudOrganizationOrgMember(),
"tencentcloud_organization_org_identity": tco.ResourceTencentCloudOrganizationOrgIdentity(),
Expand Down Expand Up @@ -2022,6 +2022,13 @@ func Provider() *schema.Provider {
"tencentcloud_identity_center_scim_synchronization_status": tco.ResourceTencentCloudIdentityCenterScimSynchronizationStatus(),
"tencentcloud_provision_role_configuration_operation": tco.ResourceTencentCloudProvisionRoleConfigurationOperation(),
"tencentcloud_organization_member_auth_policy_attachment": tco.ResourceTencentCloudOrganizationMemberAuthPolicyAttachment(),
"tencentcloud_organization_org_share_unit_member": tco.ResourceTencentCloudOrganizationOrgShareUnitMember(),
"tencentcloud_organization_org_share_unit": tco.ResourceTencentCloudOrganizationOrgShareUnit(),
"tencentcloud_organization_org_share_unit_resource": tco.ResourceTencentCloudOrganizationOrgShareUnitResource(),
"tencentcloud_accept_join_share_unit_invitation_operation": tco.ResourceTencentCloudAcceptJoinShareUnitInvitationOperation(),
"tencentcloud_reject_join_share_unit_invitation_operation": tco.ResourceTencentCloudRejectJoinShareUnitInvitationOperation(),
"tencentcloud_organization_external_saml_idp_certificate": tco.ResourceTencentCloudOrganizationExternalSamlIdpCertificate(),
"tencentcloud_organization_external_saml_identity_provider": tco.ResourceTencentCloudOrganizationExternalSamlIdentityProvider(),
"tencentcloud_dbbrain_sql_filter": dbbrain.ResourceTencentCloudDbbrainSqlFilter(),
"tencentcloud_dbbrain_security_audit_log_export_task": dbbrain.ResourceTencentCloudDbbrainSecurityAuditLogExportTask(),
"tencentcloud_dbbrain_db_diag_report_task": dbbrain.ResourceTencentCloudDbbrainDbDiagReportTask(),
Expand Down Expand Up @@ -2342,11 +2349,6 @@ func Provider() *schema.Provider {
"tencentcloud_elastic_public_ipv6_attachment": vpc.ResourceTencentCloudElasticPublicIpv6Attachment(),
"tencentcloud_ha_vip_instance_attachment": vpc.ResourceTencentCloudHaVipInstanceAttachment(),
"tencentcloud_csip_risk_center": csip.ResourceTencentCloudCsipRiskCenter(),
"tencentcloud_organization_org_share_unit_member": tco.ResourceTencentCloudOrganizationOrgShareUnitMember(),
"tencentcloud_organization_org_share_unit": tco.ResourceTencentCloudOrganizationOrgShareUnit(),
"tencentcloud_organization_org_share_unit_resource": tco.ResourceTencentCloudOrganizationOrgShareUnitResource(),
"tencentcloud_accept_join_share_unit_invitation_operation": tco.ResourceTencentCloudAcceptJoinShareUnitInvitationOperation(),
"tencentcloud_reject_join_share_unit_invitation_operation": tco.ResourceTencentCloudRejectJoinShareUnitInvitationOperation(),
"tencentcloud_kubernetes_addon": tke.ResourceTencentCloudKubernetesAddon(),
"tencentcloud_kubernetes_addon_config": tke.ResourceTencentCloudKubernetesAddonConfig(),
"tencentcloud_kubernetes_native_node_pool": tke.ResourceTencentCloudKubernetesNativeNodePool(),
Expand Down
2 changes: 2 additions & 0 deletions tencentcloud/provider.md
Original file line number Diff line number Diff line change
Expand Up @@ -1801,6 +1801,8 @@ tencentcloud_accept_join_share_unit_invitation_operation
tencentcloud_reject_join_share_unit_invitation_operation
tencentcloud_provision_role_configuration_operation
tencentcloud_organization_member_auth_policy_attachment
tencentcloud_organization_external_saml_idp_certificate
tencentcloud_organization_external_saml_identity_provider

TDSQL-C for PostgreSQL(TDCPG)
Data Source
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
package tco

import (
"context"
"log"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
organizationv20210331 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331"

tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
)

func ResourceTencentCloudOrganizationExternalSamlIdentityProvider() *schema.Resource {
return &schema.Resource{
Create: resourceTencentCloudOrganizationExternalSamlIdentityProviderCreate,
Read: resourceTencentCloudOrganizationExternalSamlIdentityProviderRead,
Delete: resourceTencentCloudOrganizationExternalSamlIdentityProviderDelete,
Schema: map[string]*schema.Schema{
"zone_id": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "Space ID.",
},

"encoded_metadata_document": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Description: "IdP metadata document (Base64 encoded). Provided by an IdP that supports the SAML 2.0 protocol.",
},

"sso_status": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Description: "SSO enabling status. Valid values: Enabled, Disabled (default).",
},

"entity_id": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Description: "IdP identifier.",
},

"login_url": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Description: "IdP login URL.",
},

"x509_certificate": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Description: "X509 certificate in PEM format. If this parameter is specified, all existing certificates will be replaced.",
},

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

"update_time": {
Type: schema.TypeString,
Computed: true,
Description: "Update time.",
},
},
}
}

func resourceTencentCloudOrganizationExternalSamlIdentityProviderCreate(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_organization_external_saml_identity_provider.create")()
defer tccommon.InconsistentCheck(d, meta)()

var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
request = organizationv20210331.NewSetExternalSAMLIdentityProviderRequest()
zoneId string
)

if v, ok := d.GetOk("zone_id"); ok {
request.ZoneId = helper.String(v.(string))
zoneId = 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))
}

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

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

reqErr := 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 reqErr != nil {
log.Printf("[CRITAL]%s create organization external saml identity provider failed, reason:%+v", logId, reqErr)
return reqErr
}

d.SetId(zoneId)
return resourceTencentCloudOrganizationExternalSamlIdentityProviderRead(d, meta)
}

func resourceTencentCloudOrganizationExternalSamlIdentityProviderRead(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_organization_external_saml_identity_provider.read")()
defer tccommon.InconsistentCheck(d, meta)()

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.DescribeOrganizationExternalSamlIdentityProviderById(ctx, zoneId)
if err != nil {
return err
}

if respData == nil {
log.Printf("[WARN]%s resource `tencentcloud_organization_external_saml_identity_provider` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
d.SetId("")
return nil
}

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

if respData.EncodedMetadataDocument != nil {
_ = d.Set("encoded_metadata_document", respData.EncodedMetadataDocument)
}

if respData.SSOStatus != nil {
_ = d.Set("sso_status", respData.SSOStatus)
}

if respData.EntityId != nil {
_ = d.Set("entity_id", respData.EntityId)
}

if respData.LoginUrl != nil {
_ = d.Set("login_url", respData.LoginUrl)
}

if respData.CertificateIds != nil {
_ = d.Set("certificate_ids", respData.CertificateIds)
}

if respData.CreateTime != nil {
_ = d.Set("create_time", respData.CreateTime)
}

if respData.UpdateTime != nil {
_ = d.Set("update_time", respData.UpdateTime)
}

return nil
}

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

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

request.ZoneId = &zoneId
reqErr := 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())
}

return nil
})

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

return nil
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
Provides a resource to create a organization organization_external_saml_identity_provider

Example Usage

```hcl
resource "tencentcloud_organization_external_saml_identity_provider" "organization_external_saml_identity_provider" {
}
```

Import

organization organization_external_saml_identity_provider can be imported using the id, e.g.

```
terraform import tencentcloud_organization_external_saml_identity_provider.organization_external_saml_identity_provider organization_external_saml_identity_provider_id
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package tco_test

import (
"testing"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"

tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest"
)

func TestAccTencentCloudOrganizationExternalSamlIdentityProviderResource_basic(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() {
tcacctest.AccPreCheck(t)
},
Providers: tcacctest.AccProviders,
Steps: []resource.TestStep{{
Config: testAccOrganizationExternalSamlIdentityProvider,
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_organization_external_saml_identity_provider.organization_external_saml_identity_provider", "id")),
}, {
ResourceName: "tencentcloud_organization_external_saml_identity_provider.organization_external_saml_identity_provider",
ImportState: true,
ImportStateVerify: true,
}},
})
}

const testAccOrganizationExternalSamlIdentityProvider = `

resource "tencentcloud_organization_external_saml_identity_provider" "organization_external_saml_identity_provider" {
}
`
Loading
Loading