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
80 changes: 76 additions & 4 deletions tencentcloud/resource_tc_private_dns_record.go
Original file line number Diff line number Diff line change
Expand Up @@ -268,12 +268,54 @@ func resourceTencentCloudDPrivateDnsRecordDelete(d *schema.ResourceData, meta in
zoneId := idSplit[0]
recordId := idSplit[1]

request := privatedns.NewDeletePrivateZoneRecordRequest()
// unbind
request := privatedns.NewDescribePrivateZoneRequest()
request.ZoneId = helper.String(zoneId)
request.RecordId = helper.String(recordId)

err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
_, e := meta.(*TencentCloudClient).apiV3Conn.UsePrivateDnsClient().DeletePrivateZoneRecord(request)
var response *privatedns.DescribePrivateZoneResponse

err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
result, e := meta.(*TencentCloudClient).apiV3Conn.UsePrivateDnsClient().DescribePrivateZone(request)
if e != nil {
return retryError(e)
}

response = result
return nil
})
if err != nil {
log.Printf("[CRITAL]%s read private dns failed, reason:%s\n", logId, err.Error())
return err
}

info := response.Response.PrivateZone
oldVpcSet := info.VpcSet
oldAccVpcSet := info.AccountVpcSet

unBindRequest := privatedns.NewModifyPrivateZoneVpcRequest()
unBindRequest.ZoneId = helper.String(zoneId)
unBindRequest.VpcSet = []*privatedns.VpcInfo{}
unBindRequest.AccountVpcSet = []*privatedns.AccountVpcInfo{}

err = resource.Retry(readRetryTimeout, func() *resource.RetryError {
_, e := meta.(*TencentCloudClient).apiV3Conn.UsePrivateDnsClient().ModifyPrivateZoneVpc(unBindRequest)
if e != nil {
return retryError(e)
}
return nil
})
if err != nil {
log.Printf("[CRITAL]%s unbind privateDns zone vpc failed, reason:%s\n", logId, err.Error())
return err
}

// delete
recordRequest := privatedns.NewDeletePrivateZoneRecordRequest()
recordRequest.ZoneId = helper.String(zoneId)
recordRequest.RecordId = helper.String(recordId)

err = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
_, e := meta.(*TencentCloudClient).apiV3Conn.UsePrivateDnsClient().DeletePrivateZoneRecord(recordRequest)
if e != nil {
return retryError(e)
}
Expand All @@ -283,5 +325,35 @@ func resourceTencentCloudDPrivateDnsRecordDelete(d *schema.ResourceData, meta in
log.Printf("[CRITAL]%s delete privateDns record failed, reason:%s\n", logId, err.Error())
return err
}

// rebind
unBindRequest = privatedns.NewModifyPrivateZoneVpcRequest()
unBindRequest.ZoneId = helper.String(zoneId)
unBindRequest.VpcSet = oldVpcSet

accountVpcSet := make([]*privatedns.AccountVpcInfo, 0, len(oldAccVpcSet))
for _, item := range oldAccVpcSet {
info := privatedns.AccountVpcInfo{
Uin: item.Uin,
UniqVpcId: item.UniqVpcId,
Region: item.Region,
}
accountVpcSet = append(accountVpcSet, &info)
}

unBindRequest.AccountVpcSet = accountVpcSet

err = resource.Retry(readRetryTimeout, func() *resource.RetryError {
_, e := meta.(*TencentCloudClient).apiV3Conn.UsePrivateDnsClient().ModifyPrivateZoneVpc(unBindRequest)
if e != nil {
return retryError(e)
}
return nil
})
if err != nil {
log.Printf("[CRITAL]%s rebind privateDns zone vpc failed, reason:%s\n", logId, err.Error())
return err
}

return nil
}
4 changes: 3 additions & 1 deletion tencentcloud/resource_tc_private_dns_record_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ resource "tencentcloud_private_dns_zone" "zone" {
dns_forward_status = "DISABLED"
domain = "domain.com"
remark = "test_record"
tags = {
"created-by" : "terraform",
}
}

resource "tencentcloud_private_dns_record" "record" {
Expand All @@ -44,5 +47,4 @@ resource "tencentcloud_private_dns_record" "record" {
weight = 1
zone_id = tencentcloud_private_dns_zone.zone.id
}

`
71 changes: 64 additions & 7 deletions tencentcloud/resource_tc_private_dns_zone.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@ Example Usage
```hcl
resource "tencentcloud_private_dns_zone" "foo" {
domain = "domain.com"
tag_set {
tag_key = "created_by"
tag_value = "tag"
tags {
"created_by" : "terraform"
}
vpc_set {
region = "ap-guangzhou"
Expand Down Expand Up @@ -36,6 +35,8 @@ $ terraform import tencentcloud_private_dns_zone.foo zone_id
package tencentcloud

import (
"context"
"fmt"
"log"

"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
Expand All @@ -62,9 +63,12 @@ func resourceTencentCloudPrivateDnsZone() *schema.Resource {
Description: "Domain name, which must be in the format of standard TLD.",
},
"tag_set": {
Type: schema.TypeList,
Optional: true,
Description: "Tags the private domain when it is created.",
Type: schema.TypeList,
Optional: true,
Computed: true,
Description: "Tags the private domain when it is created.",
Deprecated: "It has been deprecated from version 1.72.4. Use `tags` instead.",
ConflictsWith: []string{"tags"},
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"tag_key": {
Expand All @@ -80,6 +84,12 @@ func resourceTencentCloudPrivateDnsZone() *schema.Resource {
},
},
},
"tags": {
Type: schema.TypeMap,
Optional: true,
Description: "Tags of the private dns zone.",
ConflictsWith: []string{"tag_set"},
},
"vpc_set": {
Type: schema.TypeList,
Optional: true,
Expand Down Expand Up @@ -147,6 +157,7 @@ func resourceTencentCloudDPrivateDnsZoneCreate(d *schema.ResourceData, meta inte
defer logElapsed("resource.tencentcloud_private_dns_zone.create")()

logId := getLogId(contextNil)
ctx := context.WithValue(context.TODO(), logIdKey, logId)

request := privatedns.NewCreatePrivateZoneRequest()

Expand Down Expand Up @@ -213,7 +224,20 @@ func resourceTencentCloudDPrivateDnsZoneCreate(d *schema.ResourceData, meta inte

var response *privatedns.CreatePrivateZoneResponse
response = result
d.SetId(*response.Response.ZoneId)

id := *response.Response.ZoneId
d.SetId(id)

client := meta.(*TencentCloudClient).apiV3Conn
tagService := TagService{client: client}
region := client.Region

if tags := helper.GetTags(d, "tags"); len(tags) > 0 {
resourceName := BuildTagResourceName("privatedns", "zone", region, id)
if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil {
return err
}
}

return resourceTencentCloudDPrivateDnsZoneRead(d, meta)
}
Expand All @@ -223,6 +247,7 @@ func resourceTencentCloudDPrivateDnsZoneRead(d *schema.ResourceData, meta interf
defer inconsistentCheck(d, meta)()

logId := getLogId(contextNil)
ctx := context.WithValue(context.TODO(), logIdKey, logId)

id := d.Id()

Expand Down Expand Up @@ -259,6 +284,16 @@ func resourceTencentCloudDPrivateDnsZoneRead(d *schema.ResourceData, meta interf
}
_ = d.Set("tag_set", tagSets)

client := meta.(*TencentCloudClient).apiV3Conn
tagService := TagService{client: client}
region := client.Region

tags, err := tagService.DescribeResourceTags(ctx, "privatedns", "zone", region, id)
if err != nil {
return err
}
_ = d.Set("tags", tags)

vpcSet := make([]map[string]interface{}, 0, len(info.VpcSet))
for _, item := range info.VpcSet {
vpcSet = append(vpcSet, map[string]interface{}{
Expand Down Expand Up @@ -286,6 +321,7 @@ func resourceTencentCloudDPrivateDnsZoneUpdate(d *schema.ResourceData, meta inte
defer logElapsed("resource.tencentcloud_private_dns_zone.update")()

logId := getLogId(contextNil)
ctx := context.WithValue(context.TODO(), logIdKey, logId)
id := d.Id()

if d.HasChange("remark") || d.HasChange("dns_forward_status") {
Expand Down Expand Up @@ -354,6 +390,27 @@ func resourceTencentCloudDPrivateDnsZoneUpdate(d *schema.ResourceData, meta inte
return err
}
}

if d.HasChange("tag_set") {
return fmt.Errorf("tag_set do not support change, please use tags instead.")
}

client := meta.(*TencentCloudClient).apiV3Conn
tagService := TagService{client: client}
region := client.Region

if d.HasChange("tags") {
oldTags, newTags := d.GetChange("tags")
replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{}))

resourceName := BuildTagResourceName("privatedns", "zone", region, id)
if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil {
return err
}

d.SetPartial("tags")
}

return resourceTencentCloudDPrivateDnsZoneRead(d, meta)
}

Expand Down
3 changes: 3 additions & 0 deletions tencentcloud/resource_tc_private_dns_zone_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,8 @@ resource "tencentcloud_private_dns_zone" "zone" {
region = "ap-guangzhou"
uniq_vpc_id = var.vpc_id
}
tags = {
"created-by" : "terraform",
}
}
`
8 changes: 4 additions & 4 deletions website/docs/r/private_dns_zone.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,8 @@ Provide a resource to create a Private Dns Zone.
```hcl
resource "tencentcloud_private_dns_zone" "foo" {
domain = "domain.com"
tag_set {
tag_key = "created_by"
tag_value = "tag"
tags {
"created_by" : "terraform"
}
vpc_set {
region = "ap-guangzhou"
Expand All @@ -43,7 +42,8 @@ The following arguments are supported:
* `account_vpc_set` - (Optional) List of authorized accounts' VPCs to associate with the private domain.
* `dns_forward_status` - (Optional) Whether to enable subdomain recursive DNS. Valid values: ENABLED, DISABLED. Default value: DISABLED.
* `remark` - (Optional) Remarks.
* `tag_set` - (Optional) Tags the private domain when it is created.
* `tag_set` - (Optional, **Deprecated**) It has been deprecated from version 1.72.4. Use `tags` instead. Tags the private domain when it is created.
* `tags` - (Optional) Tags of the private dns zone.
* `vpc_set` - (Optional) Associates the private domain to a VPC when it is created.

The `account_vpc_set` object supports the following:
Expand Down