Skip to content

Commit 1c5a3ed

Browse files
authored
Merge pull request #2105 from tencentcloudstack/feat/ssl-support-export
Feat/ssl support export
2 parents 69282be + 620947d commit 1c5a3ed

File tree

16 files changed

+7814
-1154
lines changed

16 files changed

+7814
-1154
lines changed

.changelog/2105.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_ssl_pay_certificate: support parameter 'wait_commit_flag'.
3+
```
4+
5+
```release-note:new-resource
6+
tencentcloud_ssl_commit_certificate_information
7+
```

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ require (
4242
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.693
4343
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
4444
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.711
45-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.736
45+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.737
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.589
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.692
@@ -75,7 +75,7 @@ require (
7575
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses v1.0.529
7676
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.486
7777
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver v1.0.689
78-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl v1.0.199
78+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl v1.0.737
7979
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.691
8080
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts v1.0.524
8181
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag v1.0.677

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -883,6 +883,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.735 h1:LJF4
883883
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.735/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
884884
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.736 h1:kDxUSuxipDOYAgssgXVf33WT2g6UyY+67yVMsVHPGiU=
885885
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.736/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
886+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.737 h1:Y/mD9PJbMkjzJiuZsJnzUk31OPCXvch7WSFbs9kKRyw=
887+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.737/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
886888
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624 h1:nEZqsoqt1pEoaP9JjkHQy3/H00suCfzlHW1qOm2nYD8=
887889
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624/go.mod h1:+TXSVyeKwt1IhZRqKPbTREteBcP+K07Q846/ilNzLWA=
888890
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.589 h1:LZihgirMH0vsaGScYexxwY0fTss9vHaSZs/YOQUVESg=
@@ -957,6 +959,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver v1.0.689 h1:S
957959
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver v1.0.689/go.mod h1:nRLv9M2dJm5gH5xlwg8KSJ30g5qOO07mkAePzXoEGVM=
958960
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl v1.0.199 h1:UkF3qBxMbpOf2VjxgzMgqvBCS+Hqr8XXSrtRd+rABMk=
959961
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl v1.0.199/go.mod h1:Ofo7/s0NJLXV7rX/Yfx0OPq8NaPie07JwoEGZpxTeJY=
962+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl v1.0.737 h1:jwXNUvSfYkSMMqdNtpXvWBxRFG6Vo2Zq55pT0pmUEb4=
963+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl v1.0.737/go.mod h1:8GgTEIpk5TW0mDB/FVV/vNSzijtEMiF42AcHf/NpfRA=
960964
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.691 h1:UE55TqueOP889MDcJ+cBW+MBjtzvWUw5fuOBWGCBIjs=
961965
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.691/go.mod h1:IRaYO5mSpBMPX8ydImTcL3jyuEkALEu/55Myb0a+GMs=
962966
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts v1.0.524 h1:Hda8mBEoQVwkRAaZqztUAWn/n4HCYHZYEwzFBwYKaaM=

tencentcloud/extension_ssl.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ const (
44
SSL_MODULE_TYPE = "ssl"
55
SSL_WITH_CERT = "1"
66

7-
SSL_STATUS_AVAILABLE = 1
7+
SSL_STATUS_AVAILABLE = 1
8+
SSL_STATUS_TO_BE_COMMIT = 5
89
)
910

1011
const (

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -882,6 +882,7 @@ SSL Certificates
882882
tencentcloud_ssl_certificate
883883
tencentcloud_ssl_pay_certificate
884884
tencentcloud_ssl_free_certificate
885+
tencentcloud_ssl_commit_certificate_information
885886
886887
Secrets Manager(SSM)
887888
Data Source
@@ -3010,6 +3011,7 @@ func Provider() *schema.Provider {
30103011
"tencentcloud_dlc_work_group": resourceTencentCloudDlcWorkGroup(),
30113012
"tencentcloud_dlc_user": resourceTencentCloudDlcUser(),
30123013
"tencentcloud_wedata_rule_template": resourceTencentCloudWedataRuleTemplate(),
3014+
"tencentcloud_ssl_commit_certificate_information": resourceTencentCloudSslCommitCertificateInformation(),
30133015
},
30143016

30153017
ConfigureFunc: providerConfigure,
Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
/*
2+
Provides a resource to create a ssl commit_certificate_information
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_ssl_pay_certificate" "example" {
8+
product_id = 33
9+
domain_num = 1
10+
alias = "example-ssl-update"
11+
project_id = 0
12+
wait_commit_flag = true
13+
information {
14+
csr_type = "online"
15+
certificate_domain = "www.domain.com"
16+
organization_name = "test-update"
17+
organization_division = "test"
18+
organization_address = "test"
19+
organization_country = "CN"
20+
organization_city = "test"
21+
organization_region = "test"
22+
postal_code = "0755"
23+
phone_area_code = "0755"
24+
phone_number = "12345678901"
25+
verify_type = "DNS"
26+
admin_first_name = "test"
27+
admin_last_name = "test"
28+
admin_phone_num = "12345678901"
29+
admin_email = "test@tencent.com"
30+
admin_position = "dev"
31+
contact_first_name = "test"
32+
contact_last_name = "test"
33+
contact_email = "test@tencent.com"
34+
contact_number = "12345678901"
35+
contact_position = "dev"
36+
}
37+
}
38+
resource "tencentcloud_ssl_commit_certificate_information" "example" {
39+
product_id = 33
40+
certificate_id = tencentcloud_ssl_pay_certificate.example.certificate_id
41+
}
42+
```
43+
44+
*/
45+
package tencentcloud
46+
47+
import (
48+
"context"
49+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
50+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
51+
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
52+
ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205"
53+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
54+
"log"
55+
)
56+
57+
func resourceTencentCloudSslCommitCertificateInformation() *schema.Resource {
58+
return &schema.Resource{
59+
Create: resourceTencentCloudSslCommitCertificateInformationCreate,
60+
Read: resourceTencentCloudSslCommitCertificateInformationRead,
61+
Delete: resourceTencentCloudSslCommitCertificateInformationDelete,
62+
Schema: map[string]*schema.Schema{
63+
"product_id": {
64+
Type: schema.TypeInt,
65+
Required: true,
66+
ForceNew: true,
67+
ValidateFunc: validateIntegerInRange(3, 56),
68+
Description: "Certificate commodity ID. Valid value ranges: (3~42). `3` means SecureSite enhanced Enterprise Edition (EV Pro), " +
69+
"`4` means SecureSite enhanced (EV), `5` means SecureSite Enterprise Professional Edition (OV Pro), " +
70+
"`6` means SecureSite Enterprise (OV), `7` means SecureSite Enterprise Type (OV) wildcard, " +
71+
"`8` means Geotrust enhanced (EV), `9` means Geotrust enterprise (OV), " +
72+
"`10` means Geotrust enterprise (OV) wildcard, `11` means TrustAsia domain type multi-domain SSL certificate, " +
73+
"`12` means TrustAsia domain type ( DV) wildcard, `13` means TrustAsia enterprise wildcard (OV) SSL certificate (D3), " +
74+
"`14` means TrustAsia enterprise (OV) SSL certificate (D3), `15` means TrustAsia enterprise multi-domain (OV) SSL certificate (D3), " +
75+
"`16` means TrustAsia Enhanced (EV) SSL Certificate (D3), `17` means TrustAsia Enhanced Multiple Domain (EV) SSL Certificate (D3), " +
76+
"`18` means GlobalSign Enterprise (OV) SSL Certificate, `19` means GlobalSign Enterprise Wildcard (OV) SSL Certificate, " +
77+
"`20` means GlobalSign Enhanced (EV) SSL Certificate, `21` means TrustAsia Enterprise Wildcard Multiple Domain (OV) SSL Certificate (D3), " +
78+
"`22` means GlobalSign Enterprise Multiple Domain (OV) SSL Certificate, `23` means GlobalSign Enterprise Multiple Wildcard Domain name (OV) SSL certificate, " +
79+
"`24` means GlobalSign enhanced multi-domain (EV) SSL certificate, `25` means Wotrus domain type certificate, " +
80+
"`26` means Wotrus domain type multi-domain certificate, `27` means Wotrus domain type wildcard certificate, " +
81+
"`28` means Wotrus enterprise type certificate, `29` means Wotrus enterprise multi-domain certificate, " +
82+
"`30` means Wotrus enterprise wildcard certificate, `31` means Wotrus enhanced certificate, " +
83+
"`32` means Wotrus enhanced multi-domain certificate, `33` means WoTrus National Secret Domain name Certificate, " +
84+
"`34` means WoTrus National Secret Domain name Certificate (multiple domain names), `35` WoTrus National Secret Domain name Certificate (wildcard), " +
85+
"`37` means WoTrus State Secret Enterprise Certificate, `38` means WoTrus State Secret Enterprise Certificate (multiple domain names), " +
86+
"`39` means WoTrus State Secret Enterprise Certificate (wildcard), `40` means WoTrus National secret enhanced certificate, " +
87+
"`41` means WoTrus National Secret enhanced Certificate (multiple domain names), `42` means TrustAsia- Domain name Certificate (wildcard multiple domain names), " +
88+
"`43` means DNSPod Enterprise (OV) SSL Certificate, `44` means DNSPod- Enterprise (OV) wildcard SSL certificate, " +
89+
"`45` means DNSPod Enterprise (OV) Multi-domain name SSL Certificate, `46` means DNSPod enhanced (EV) SSL certificate, " +
90+
"`47` means DNSPod enhanced (EV) multi-domain name SSL certificate, `48` means DNSPod Domain name Type (DV) SSL Certificate, " +
91+
"`49` means DNSPod Domain name Type (DV) wildcard SSL certificate, `50` means DNSPod domain name type (DV) multi-domain name SSL certificate, " +
92+
"`51` means DNSPod (State Secret) Enterprise (OV) SSL certificate, `52` DNSPod (National Secret) Enterprise (OV) wildcard SSL certificate, " +
93+
"`53` means DNSPod (National Secret) Enterprise (OV) multi-domain SSL certificate, `54` means DNSPod (National Secret) Domain Name (DV) SSL certificate, " +
94+
"`55` means DNSPod (National Secret) Domain Name Type (DV) wildcard SSL certificate, `56` means DNSPod (National Secret) Domain Name Type (DV) multi-domain SSL certificate.",
95+
},
96+
"certificate_id": {
97+
Required: true,
98+
ForceNew: true,
99+
Type: schema.TypeString,
100+
Description: "Certificate Id.",
101+
},
102+
103+
"verify_type": {
104+
Optional: true,
105+
ForceNew: true,
106+
Type: schema.TypeString,
107+
Description: "Domain name verification method.",
108+
},
109+
"confirm_letter": {
110+
Type: schema.TypeString,
111+
Optional: true,
112+
ForceNew: true,
113+
Description: "The base64-encoded certificate confirmation file should be in jpg, jpeg, png, pdf, and the size should be between 1kb and 1.4M. Note: it only works when product_id is set to 8, 9 or 10.",
114+
},
115+
},
116+
}
117+
}
118+
119+
func resourceTencentCloudSslCommitCertificateInformationCreate(d *schema.ResourceData, meta interface{}) error {
120+
defer logElapsed("resource.tencentcloud_ssl_commit_certificate_information.create")()
121+
defer inconsistentCheck(d, meta)()
122+
123+
logId := getLogId(contextNil)
124+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
125+
sslService := SSLService{client: meta.(*TencentCloudClient).apiV3Conn}
126+
127+
var (
128+
request = ssl.NewCommitCertificateInformationRequest()
129+
productId = int64(d.Get("product_id").(int))
130+
certificateId string
131+
)
132+
if v, ok := d.GetOk("certificate_id"); ok {
133+
certificateId = v.(string)
134+
request.CertificateId = helper.String(v.(string))
135+
}
136+
137+
if v, ok := d.GetOk("verify_type"); ok {
138+
request.VerifyType = helper.String(v.(string))
139+
}
140+
141+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
142+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseSSLCertificateClient().CommitCertificateInformation(request)
143+
if e != nil {
144+
return retryError(e)
145+
} else {
146+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
147+
}
148+
return nil
149+
})
150+
if err != nil {
151+
log.Printf("[CRITAL]%s create ssl commitCertificateInformation failed, reason:%+v", logId, err)
152+
return err
153+
}
154+
155+
if IsContainProductId(productId, GEOTRUST_OV_EV_TYPE) {
156+
confirmLetter := d.Get("confirm_letter").(string)
157+
uploadConfirmLetterRequest := ssl.NewUploadConfirmLetterRequest()
158+
uploadConfirmLetterRequest.CertificateId = helper.String(certificateId)
159+
uploadConfirmLetterRequest.ConfirmLetter = helper.String(confirmLetter)
160+
if err = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
161+
if err = sslService.UploadConfirmLetter(ctx, uploadConfirmLetterRequest); err != nil {
162+
if sdkError, ok := err.(*errors.TencentCloudSDKError); ok {
163+
code := sdkError.GetCode()
164+
if code == InvalidParam || code == CertificateNotFound {
165+
return resource.NonRetryableError(sdkError)
166+
}
167+
}
168+
return retryError(err)
169+
}
170+
return nil
171+
}); err != nil {
172+
return err
173+
}
174+
}
175+
176+
d.SetId(certificateId)
177+
178+
return nil
179+
}
180+
func resourceTencentCloudSslCommitCertificateInformationRead(d *schema.ResourceData, meta interface{}) error {
181+
defer logElapsed("resource.tencentcloud_ssl_pay_certificate.read")()
182+
defer inconsistentCheck(d, meta)()
183+
return nil
184+
}
185+
func resourceTencentCloudSslCommitCertificateInformationDelete(d *schema.ResourceData, meta interface{}) error {
186+
defer logElapsed("resource.tencentcloud_ssl_commit_certificate_information.delete")()
187+
defer inconsistentCheck(d, meta)()
188+
189+
return nil
190+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package tencentcloud
2+
3+
import (
4+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
5+
"testing"
6+
)
7+
8+
func TestAccTencentCloudSslCommitCertificateInformationResource_basic(t *testing.T) {
9+
t.Parallel()
10+
resource.Test(t, resource.TestCase{
11+
PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) },
12+
Providers: testAccProviders,
13+
Steps: []resource.TestStep{
14+
{
15+
Config: testAccSslCommitCertificateInformation,
16+
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_ssl_commit_certificate_information.example", "id"),
17+
resource.TestCheckResourceAttr("tencentcloud_ssl_commit_certificate_information.example", "product_id", "33"),
18+
resource.TestCheckResourceAttrSet("tencentcloud_ssl_commit_certificate_information.example", "certificate_id")),
19+
},
20+
},
21+
})
22+
}
23+
24+
const testAccSslCommitCertificateInformation = `
25+
26+
resource "tencentcloud_ssl_pay_certificate" "example" {
27+
product_id = 33
28+
domain_num = 1
29+
alias = "example-ssl-update"
30+
project_id = 0
31+
wait_commit_flag = true
32+
information {
33+
csr_type = "online"
34+
certificate_domain = "www.domain.com"
35+
organization_name = "test-update"
36+
organization_division = "test"
37+
organization_address = "test"
38+
organization_country = "CN"
39+
organization_city = "test"
40+
organization_region = "test"
41+
postal_code = "0755"
42+
phone_area_code = "0755"
43+
phone_number = "12345678901"
44+
verify_type = "DNS"
45+
admin_first_name = "test"
46+
admin_last_name = "test"
47+
admin_phone_num = "12345678901"
48+
admin_email = "test@tencent.com"
49+
admin_position = "dev"
50+
contact_first_name = "test"
51+
contact_last_name = "test"
52+
contact_email = "test@tencent.com"
53+
contact_number = "12345678901"
54+
contact_position = "dev"
55+
}
56+
}
57+
resource "tencentcloud_ssl_commit_certificate_information" "example" {
58+
product_id = 33
59+
certificate_id = tencentcloud_ssl_pay_certificate.example.certificate_id
60+
}
61+
62+
`

0 commit comments

Comments
 (0)