cloudflare golang SDK를 사용해서 domain 레코드를 갱신하는 방법을 아래와 같이 사용하면된다.
package main
import (
"context"
"fmt"
"log"
"github.com/cloudflare/cloudflare-go"
)
func main() {
domain = "encicle.com"
domainRecord = "test.encicle.com"
updateDomainData = "10.10.10.10"
#업데이트할 도메인 레코드에 입력하기 위한 변수설정
var updateADomainRecord cloudflare.UpdateDNSRecordParams
// cloudflare 계정에서 API키를 생성한다.
api, err := cloudflare.New("cloudflare_api_key", "cloudflare_account_email")
if err != nil {
log.Fatal(err)
}
# cloudflare에서는 domain zone의 ID를 통해 접근하기 때문에 우선적으로 zoneID를 api키를 통해 확인한다.
zoneID, err := api.ZoneIDByName(domain)
if err != nil {
log.Fatal(err)
}
# 획득한 zoneID를 통해서 모든 도메인 레코드를 받는다. 이유는 업데이트할 도메인 레코드를 수정하려면
# 변경한 도메인 레코드의 ID를 알아야한다.
listdomainRecord, _, err := api.ListDNSRecords(context.Background(), cloudflare.ZoneIdentifier(zoneID), cloudflare.ListDNSRecordsParams{})
if err != nil {
log.Fatal(err)
}
for _, r := range listdomainRecord {
# 변경해야할 도메인을 찾아서 이미 설정된 도메인 레코드 정보를 "UpdateDNSRecordParams"정보로 할당한다.
if r.Name == domainRecord && r.Type == "A" {
updateADomainRecord.Type = r.Type
updateADomainRecord.Name = r.Name
updateADomainRecord.Content = r.Content
updateADomainRecord.Data = r.Data
updateADomainRecord.ID = r.ID
updateADomainRecord.Priority = r.Priority
updateADomainRecord.TTL = r.TTL
updateADomainRecord.Proxied = r.Proxied
updateADomainRecord.Comment = r.Comment
updateADomainRecord.Tags = r.Tags
}
}
# 입력된 updateADomainRecord 정보에서 수정할 데이터(레코드 정보를 교체)
updateADomainRecord.Content = updateDomainData
recs2 := api.UpdateDNSRecord(context.Background(), cloudflare.ZoneIdentifier(zoneID), updateADomainRecord)
if recs2 != nil {
fmt.Println("Failed Update")
}
}