alibabacloudstack/resource_apsarastack_dns_domain.go (162 lines of code) (raw):
package alibabacloudstack
import (
"fmt"
"log"
"strings"
"github.com/aliyun/terraform-provider-alibabacloudstack/alibabacloudstack/connectivity"
"github.com/aliyun/terraform-provider-alibabacloudstack/alibabacloudstack/errmsgs"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func resourceAlibabacloudStackDnsDomain() *schema.Resource {
resource := &schema.Resource{
Schema: map[string]*schema.Schema{
"dns_servers": {
Type: schema.TypeSet,
Computed: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"domain_id": {
Type: schema.TypeString,
Computed: true,
},
"domain_name": {
Type: schema.TypeString,
Required: true,
},
"group_id": {
Type: schema.TypeString,
Optional: true,
},
"lang": {
Type: schema.TypeString,
Optional: true,
},
"remark": {
Type: schema.TypeString,
Optional: true,
},
"resource_group_id": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
},
}
setResourceFunc(resource, resourceAlibabacloudStackDnsDomainCreate, resourceAlibabacloudStackDnsDomainRead, resourceAlibabacloudStackDnsDomainUpdate, resourceAlibabacloudStackDnsDomainDelete)
return resource
}
func resourceAlibabacloudStackDnsDomainCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
dnsService := DnsService{client}
DomainName := d.Get("domain_name").(string)
check, err := dnsService.DescribeDnsDomain(DomainName)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "alibabacloudstack_dns_domain", "domain alreadyExist", errmsgs.AlibabacloudStackSdkGoERROR)
}
if check == nil || len(check.Data) == 0 {
request := client.NewCommonRequest("POST", "CloudDns", "2021-06-24", "AddGlobalZone", "")
request.Scheme="HTTP" // CloudDns不支持HTTPS
request.QueryParams["Name"] = DomainName
bresponse, err := client.ProcessCommonRequest(request)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_dns_domain", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug(request.GetActionName(), bresponse)
if bresponse.GetHttpStatus() != 200 {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "alibabacloudstack_dns_domain", "AddGlobalZone", errmsgs.AlibabacloudStackSdkGoERROR)
}
}
check, err = dnsService.DescribeDnsDomain(DomainName)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "alibabacloudstack_dns_domain", "DescribeDnsDomain")
}
d.SetId(check.Data[0].Name + COLON_SEPARATED + fmt.Sprint(check.Data[0].Id))
return nil
}
func resourceAlibabacloudStackDnsDomainRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
dnsService := DnsService{client}
object, err := dnsService.DescribeDnsDomain(d.Id())
did := strings.Split(d.Id(), COLON_SEPARATED)
if err != nil {
if errmsgs.NotFoundError(err) {
d.SetId("")
}
return errmsgs.WrapError(err)
}
d.Set("domain_name", did[0])
d.Set("domain_id", (object.Data[0].Id))
d.Set("remark", object.Data[0].Remark)
return nil
}
func resourceAlibabacloudStackDnsDomainUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
dnsService := DnsService{client}
remarkUpdate := false
check, err := dnsService.DescribeDnsDomain(d.Id())
did := strings.Split(d.Id(), COLON_SEPARATED)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), "IsDomainExist", errmsgs.AlibabacloudStackSdkGoERROR)
}
var desc string
if d.HasChange("remark") {
if v, ok := d.GetOk("remark"); ok {
desc = v.(string)
}
check.Data[0].Remark = desc
remarkUpdate = true
} else {
if v, ok := d.GetOk("remark"); ok {
desc = v.(string)
}
check.Data[0].Remark = desc
}
if remarkUpdate {
request := client.NewCommonRequest("POST", "CloudDns", "2021-06-24", "UpdateGlobalZoneRemark", "")
request.Scheme="HTTP" // CloudDns不支持HTTPS
request.QueryParams["Name"] = did[0]
request.QueryParams["Id"] = did[1]
request.QueryParams["Remark"] = desc
response, err := client.ProcessCommonRequest(request)
log.Printf(" response of raw UpdateGlobalZoneRemark : %s", response)
if err != nil {
if response == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(response.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_dns_domain", "UpdateGlobalZoneRemark", errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug(request.GetActionName(), response, request)
}
d.SetId(check.Data[0].Name + COLON_SEPARATED + fmt.Sprint(check.Data[0].Id))
return nil
}
func resourceAlibabacloudStackDnsDomainDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
dnsService := DnsService{client}
check, err := dnsService.DescribeDnsDomain(d.Id())
did := strings.Split(d.Id(), COLON_SEPARATED)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), "IsDomainExist", errmsgs.AlibabacloudStackSdkGoERROR)
}
if len(check.Data) != 0 {
request := client.NewCommonRequest("POST", "CloudDns", "2021-06-24", "DeleteGlobalZone", "")
request.Scheme="HTTP" // CloudDns不支持HTTPS
request.QueryParams["Id"] = did[1]
response, err := client.ProcessCommonRequest(request)
if err != nil {
if response == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(response.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_dns_domain", "DeleteGlobalZone", errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
}
return nil
}