commit f1dece25731faf00b176ad0253bf7cf95c4e5361 Author: MiaoWoo Date: Tue Apr 30 17:32:12 2019 +0800 Create & Init Project... diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..f78a467 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module yumc.pw/cloud/ali-ddns-cli + +go 1.12 + +require github.com/denverdino/aliyungo v0.0.0-20190410085603-611ead8a6fed diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..b76df9b --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/denverdino/aliyungo v0.0.0-20190410085603-611ead8a6fed h1:WtFFp2kd7j/ATD3dT5tdjyoXuynxHu6D0AJVG9Be1q4= +github.com/denverdino/aliyungo v0.0.0-20190410085603-611ead8a6fed/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= diff --git a/main.go b/main.go new file mode 100644 index 0000000..fb00f41 --- /dev/null +++ b/main.go @@ -0,0 +1,107 @@ +package main + +import ( + "encoding/json" + "flag" + "fmt" + "github.com/denverdino/aliyungo/dns" + "io/ioutil" + "net/http" + "os" +) + +var client *dns.Client +var domain string +var sub string +var recordType string +var recordValue string + +var domainRecord *dns.AddDomainRecordArgs + +func main() { + id := flag.String("id", os.Getenv("ALI_DNS_ID"), "AliId") + key := flag.String("key", os.Getenv("ALI_DNS_KEY"), "AliKey") + + client = dns.NewClient(*id, *key) + + domain = *flag.String("domain", os.Getenv("ALI_DNS_DOMAIN"), "Domain") + sub = *flag.String("sub", os.Getenv("ALI_DNS_SUB_DOMAIN"), "RR") + recordType = *flag.String("type", "A", "RR") + recordValue = *flag.String("value", "127.0.0.1", "Redis Server Host") + + flag.Parse() + + resp, err := http.Get("http://ip.3322.org") + if err != nil { + panic(err) + } + + str, err := ioutil.ReadAll(resp.Body) + + _ = resp.Body.Close() + + if err != nil { + panic(err) + } + + recordValue = string(str) + + domainRecord = &dns.AddDomainRecordArgs{ + DomainName: domain, + RR: sub, + Type: recordType, + Value: recordValue, + } + + record, err := listRecord(domainRecord) + + if err != nil { + panic(err) + } + + var re interface{} + + if record != nil { + re = updateRecord(record.RecordId, domainRecord) + } else { + re = addRecord(domainRecord) + } + reByte, err := json.Marshal(re) + if err != nil { + panic(err) + } + + fmt.Println(string(reByte)) +} + +func listRecord(domainRecord *dns.AddDomainRecordArgs) (*dns.RecordTypeNew, error) { + resp, err := client.DescribeDomainRecordsNew( + &dns.DescribeDomainRecordsNewArgs{ + DomainName: domainRecord.DomainName, + RRKeyWord: domainRecord.RR, + }) + if err != nil { + return nil, err + } + for r := range resp.DomainRecords.Record { + if resp.DomainRecords.Record[r].RR == domainRecord.RR { + return &resp.DomainRecords.Record[r], nil + } + } + return nil, err +} + +func addRecord(domainRecord *dns.AddDomainRecordArgs) *dns.AddDomainRecordResponse { + addResult, _ := client.AddDomainRecord(domainRecord) + return addResult +} + +func updateRecord(id string, domainRecord *dns.AddDomainRecordArgs) *dns.UpdateDomainRecordResponse { + result, _ := client.UpdateDomainRecord(&dns.UpdateDomainRecordArgs{ + RecordId: id, + RR: domainRecord.RR, + Type: domainRecord.Type, + Value: domainRecord.Value, + }) + return result +}