Skip to content

Commit 10a1607

Browse files
author
mikatong
committed
[merge]
2 parents e18e9b1 + 8e5f91e commit 10a1607

10 files changed

+439
-5
lines changed

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199 h1:
470470
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199/go.mod h1:b7dNjabPys0/iLwRFd8MVE5EkJTNAh4qtaHQOOLchx4=
471471
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.291 h1:r7GSk4v8od8srrBrpnsHz9Hxrq0fLNO2u1m4ABQVX5g=
472472
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.291/go.mod h1:O5PQ2JoBWhmSNVils3vZyS1GPeRdXA8Lu23ZEjiUfZ8=
473+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.290 h1:PJ/XwIXHUVIi/OwvtUKOSWB+x5qn42oJettG6bhHfNQ=
474+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.290/go.mod h1:O5PQ2JoBWhmSNVils3vZyS1GPeRdXA8Lu23ZEjiUfZ8=
473475
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.194/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
474476
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.264 h1:USf7I8ohzoqCwAcCHz5rz0hD57mmNXZgrLfxFLx1WmA=
475477
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.264/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=

tencentcloud/connectivity/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -624,7 +624,7 @@ func (me *TencentCloudClient) UseApiClient() *api.Client {
624624
return me.apiConn
625625
}
626626

627-
// UseClsClient return API client for service
627+
// UseClsClient return CLS client for service
628628
func (me *TencentCloudClient) UseClsClient() *cls.Client {
629629
if me.clsConn != nil {
630630
return me.clsConn

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ Cloud Load Balancer(CLB)
216216
tencentcloud_clb_target_group
217217
tencentcloud_clb_target_group_instance_attachment
218218
tencentcloud_clb_target_group_attachment
219+
tencentcloud_clb_logset
219220
220221
Cloud Object Storage(COS)
221222
Data Source
@@ -868,6 +869,7 @@ func Provider() terraform.ResourceProvider {
868869
"tencentcloud_clb_target_group": resourceTencentCloudClbTargetGroup(),
869870
"tencentcloud_clb_target_group_instance_attachment": resourceTencentCloudClbTGAttachmentInstance(),
870871
"tencentcloud_clb_target_group_attachment": resourceTencentCloudClbTargetGroupAttachment(),
872+
"tencentcloud_clb_logset": resourceTencentCloudClbLogSet(),
871873
"tencentcloud_container_cluster": resourceTencentCloudContainerCluster(),
872874
"tencentcloud_container_cluster_instance": resourceTencentCloudContainerClusterInstance(),
873875
"tencentcloud_kubernetes_cluster": resourceTencentCloudTkeCluster(),
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
/*
2+
Provides a resource to create an exclusive CLB Logset.
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_clb_logset" "foo" {
8+
name = "clb_logset"
9+
perioid = 7
10+
}
11+
```
12+
13+
Import
14+
15+
CLB attachment can be imported using the id, e.g.
16+
17+
```
18+
$ terraform import tencentcloud_clb_logset.foo 4eb9e3a8-9c42-4b32-9ddf-e215e9c92764
19+
```
20+
*/
21+
package tencentcloud
22+
23+
import (
24+
"context"
25+
"fmt"
26+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
27+
cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016"
28+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
29+
)
30+
31+
func resourceTencentCloudClbLogSet() *schema.Resource {
32+
return &schema.Resource{
33+
Create: resourceTencentCloudClbLogSetCreate,
34+
Read: resourceTencentCloudClbLogSetRead,
35+
Delete: resourceTencentCloudClbLogSetDelete,
36+
//Update: resourceTencentCloudClbLogSetUpdate,
37+
Importer: &schema.ResourceImporter{
38+
State: schema.ImportStatePassthrough,
39+
},
40+
Schema: map[string]*schema.Schema{
41+
"period": {
42+
Type: schema.TypeInt,
43+
Optional: true,
44+
ForceNew: true,
45+
Description: "Logset retention period in days. Maximun value is `90`.",
46+
},
47+
"name": {
48+
Type: schema.TypeString,
49+
Computed: true,
50+
Description: "Logset name, which unique and fixed `clb_logset` among all CLS logsets.",
51+
},
52+
"create_time": {
53+
Type: schema.TypeString,
54+
Computed: true,
55+
Description: "Logset creation time.",
56+
},
57+
"topic_count": {
58+
Type: schema.TypeString,
59+
Computed: true,
60+
Description: "Number of log topics in logset.",
61+
},
62+
},
63+
}
64+
}
65+
66+
func resourceTencentCloudClbLogSetRead(d *schema.ResourceData, meta interface{}) error {
67+
defer logElapsed("resource.tencentcloud_clb_logset.read")()
68+
defer inconsistentCheck(d, meta)()
69+
70+
logId := getLogId(contextNil)
71+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
72+
service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn}
73+
74+
id := d.Id()
75+
76+
info, err := service.DescribeClsLogSetById(ctx, id)
77+
78+
if err != nil {
79+
return err
80+
}
81+
82+
if info == nil {
83+
d.SetId("")
84+
return fmt.Errorf("resource `Logset` %s does not exist", id)
85+
}
86+
87+
_ = d.Set("name", info.LogsetName)
88+
89+
//
90+
//if _, ok := d.GetOk("period"); !ok {
91+
// _ = d.Set("period", info)
92+
//}
93+
_ = d.Set("create_time", info.CreateTime)
94+
_ = d.Set("topic_count", info.TopicCount)
95+
96+
return nil
97+
}
98+
99+
func resourceTencentCloudClbLogSetCreate(d *schema.ResourceData, meta interface{}) error {
100+
defer logElapsed("resource.tencentcloud_clb_logset.create")()
101+
defer clbActionMu.Unlock()
102+
clbActionMu.Lock()
103+
104+
logId := getLogId(contextNil)
105+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
106+
service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn}
107+
108+
var (
109+
period = d.Get("period").(int)
110+
)
111+
112+
// We're not support specify name and health logs for now
113+
id, err := service.CreateClbLogSet(ctx, "clb_logset", "", period)
114+
115+
if err != nil {
116+
return err
117+
}
118+
119+
d.SetId(id)
120+
121+
return resourceTencentCloudClbLogSetRead(d, meta)
122+
}
123+
124+
// All fields are now Computed/ForceNew, means it does not support update
125+
func resourceTencentCloudClbLogSetUpdate(d *schema.ResourceData, meta interface{}) error {
126+
defer logElapsed("resource.tencentcloud_clb_logset.update")()
127+
logId := getLogId(contextNil)
128+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
129+
service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn}
130+
request := cls.NewModifyLogsetRequest()
131+
132+
request.LogsetId = helper.String(d.Id())
133+
134+
if d.HasChange("name") {
135+
request.LogsetName = helper.String(d.Get("name").(string))
136+
}
137+
138+
err := service.UpdateClsLogSet(ctx, request)
139+
140+
if err != nil {
141+
return err
142+
}
143+
144+
return resourceTencentCloudClbLogSetCreate(d, meta)
145+
}
146+
147+
func resourceTencentCloudClbLogSetDelete(d *schema.ResourceData, meta interface{}) error {
148+
defer logElapsed("resource.tencentcloud_clb_logset.delete")()
149+
150+
clbActionMu.Lock()
151+
defer clbActionMu.Unlock()
152+
153+
logId := getLogId(contextNil)
154+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
155+
service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn}
156+
id := d.Id()
157+
158+
if err := service.DeleteClsLogSet(ctx, id); err != nil {
159+
return err
160+
}
161+
162+
return nil
163+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package tencentcloud
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"testing"
7+
"time"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
10+
"github.com/hashicorp/terraform-plugin-sdk/terraform"
11+
)
12+
13+
func TestAccTencentCloudClbLogset_basic(t *testing.T) {
14+
t.Parallel()
15+
16+
resource.Test(t, resource.TestCase{
17+
PreCheck: func() { testAccPreCheck(t) },
18+
Providers: testAccProviders,
19+
CheckDestroy: testAccCheckClbLogsetDestroy,
20+
Steps: []resource.TestStep{
21+
{
22+
Config: testAccClbLogset_basic,
23+
Check: resource.ComposeTestCheckFunc(
24+
testAccCheckClbLogsetExists("tencentcloud_clb_logset.test_logset"),
25+
resource.TestCheckResourceAttrSet("tencentcloud_clb_logset.test_logset", "create_time"),
26+
resource.TestCheckResourceAttr("tencentcloud_clb_logset.test_logset", "name", "clb_logset"),
27+
resource.TestCheckResourceAttr("tencentcloud_clb_logset.test_logset", "period", "7"),
28+
),
29+
},
30+
{
31+
ResourceName: "tencentcloud_clb_logset.test_logset",
32+
ImportState: true,
33+
ImportStateVerify: true,
34+
},
35+
},
36+
})
37+
}
38+
39+
func testAccCheckClbLogsetDestroy(s *terraform.State) error {
40+
logId := getLogId(contextNil)
41+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
42+
43+
clsService := ClsService{
44+
client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn,
45+
}
46+
for _, rs := range s.RootModule().Resources {
47+
if rs.Type != "tencentcloud_clb_logset" {
48+
continue
49+
}
50+
time.Sleep(5 * time.Second)
51+
resourceId := rs.Primary.ID
52+
info, err := clsService.DescribeClsLogSetById(ctx, resourceId)
53+
if info != nil && err == nil {
54+
return fmt.Errorf("[CHECK][CLB logset][Destroy] check: CLB logset still exists: %s", rs.Primary.ID)
55+
}
56+
}
57+
return nil
58+
}
59+
60+
func testAccCheckClbLogsetExists(n string) resource.TestCheckFunc {
61+
return func(s *terraform.State) error {
62+
logId := getLogId(contextNil)
63+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
64+
65+
rs, ok := s.RootModule().Resources[n]
66+
if !ok {
67+
return fmt.Errorf("[CHECK][CLB logset][Exists] check: CLB logset %s is not found", n)
68+
}
69+
if rs.Primary.ID == "" {
70+
return fmt.Errorf("[CHECK][CLB logset][Exists] check: CLB logset id is not set")
71+
}
72+
service := ClsService{
73+
client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn,
74+
}
75+
resourceId := rs.Primary.ID
76+
instance, err := service.DescribeClsLogSetById(ctx, resourceId)
77+
if err != nil {
78+
return err
79+
}
80+
if instance == nil {
81+
return fmt.Errorf("[CHECK][CLB logset][Exists] id %s is not exist", rs.Primary.ID)
82+
}
83+
return nil
84+
}
85+
}
86+
87+
const testAccClbLogset_basic = `
88+
resource "tencentcloud_clb_logset" "test_logset" {
89+
period = 7
90+
}
91+
`

tencentcloud/resource_tc_instance.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -562,13 +562,9 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
562562
request.InstanceMarketOptions.SpotOptions = &cvm.SpotMarketOptions{}
563563
if v, ok := d.GetOk("spot_instance_type"); ok {
564564
request.InstanceMarketOptions.SpotOptions.SpotInstanceType = helper.String(strings.ToLower(v.(string)))
565-
} else {
566-
return fmt.Errorf("spot_instance_type can not be empty when instance_charge_type is %s", instanceChargeType)
567565
}
568566
if v, ok := d.GetOk("spot_max_price"); ok {
569567
request.InstanceMarketOptions.SpotOptions.MaxPrice = helper.String(v.(string))
570-
} else {
571-
return fmt.Errorf("spot_max_price can not be empty when instance_charge_type is %s", instanceChargeType)
572568
}
573569
}
574570
if instanceChargeType == CVM_CHARGE_TYPE_CDHPAID {

tencentcloud/service_tencentcloud_clb.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1374,3 +1374,50 @@ func (me *ClbService) ModifyTargetGroupInstancesWeight(ctx context.Context, targ
13741374
}
13751375
return nil
13761376
}
1377+
1378+
func (me *ClbService) DescribeClbLogSet(ctx context.Context) (logSetId string, healthId string, errRet error) {
1379+
logId := getLogId(ctx)
1380+
request := clb.NewDescribeClsLogSetRequest()
1381+
defer func() {
1382+
if errRet != nil {
1383+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
1384+
logId, "delete object", request.ToJsonString(), errRet.Error())
1385+
}
1386+
}()
1387+
ratelimit.Check(request.GetAction())
1388+
response, err := me.client.UseClbClient().DescribeClsLogSet(request)
1389+
if err != nil {
1390+
errRet = err
1391+
return
1392+
}
1393+
1394+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
1395+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1396+
1397+
logSetId = *response.Response.LogsetId
1398+
healthId = *response.Response.HealthLogsetId
1399+
return
1400+
}
1401+
1402+
func (me *ClbService) CreateClbLogSet(ctx context.Context, name string, logsetType string, period int) (id string, errRet error){
1403+
logId := getLogId(ctx)
1404+
request := clb.NewCreateClsLogSetRequest()
1405+
request.Period = helper.IntUint64(period)
1406+
request.LogsetName = &name
1407+
if logsetType != "" {
1408+
request.LogsetType = &logsetType
1409+
}
1410+
ratelimit.Check(request.GetAction())
1411+
response, err := me.client.UseClbClient().CreateClsLogSet(request)
1412+
if err != nil {
1413+
errRet = err
1414+
return
1415+
}
1416+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
1417+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1418+
1419+
if response.Response != nil {
1420+
id = *response.Response.LogsetId
1421+
}
1422+
return
1423+
}

0 commit comments

Comments
 (0)