added partial cloudflare api integration
This commit is contained in:
@@ -269,6 +269,7 @@ func (obj *CloudflareDNSRes) Cmp(r engine.Res) error {
|
|||||||
return fmt.Errorf("apitoken differs")
|
return fmt.Errorf("apitoken differs")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check how this being a pointer influences this check
|
||||||
if obj.Proxied != res.Proxied {
|
if obj.Proxied != res.Proxied {
|
||||||
return fmt.Errorf("proxied values differ")
|
return fmt.Errorf("proxied values differ")
|
||||||
}
|
}
|
||||||
@@ -300,4 +301,212 @@ func (obj *CloudflareDNSRes) Cmp(r engine.Res) error {
|
|||||||
if obj.zoneID != res.zoneID {
|
if obj.zoneID != res.zoneID {
|
||||||
return fmt.Errorf("zoneid differs")
|
return fmt.Errorf("zoneid differs")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if obj.Content != res.Content {
|
||||||
|
return fmt.Errorf("content param differs")
|
||||||
|
}
|
||||||
|
|
||||||
|
// check how this being a pointer influences this check
|
||||||
|
if obj.Priority != res.Priority {
|
||||||
|
return fmt.Errorf("the priority param differs")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (obj *CloudflareDNSRes) buildRecordParam() dns.RecordNewParamsBodyUnion {
|
||||||
|
ttl := dns.TTL(obj.TTL)
|
||||||
|
|
||||||
|
switch obj.Type {
|
||||||
|
case "A":
|
||||||
|
param := dns.ARecordParam{
|
||||||
|
Name: cloudflare.F(obj.RecordName),
|
||||||
|
Type: cloudflare.F(dns.ARecordTypeA),
|
||||||
|
Content: cloudflare.F(obj.Content),
|
||||||
|
TTL: cloudflare.F(ttl),
|
||||||
|
}
|
||||||
|
if obj.Proxied != nil {
|
||||||
|
param.Proxied = cloudflare.F(*obj.Proxied)
|
||||||
|
}
|
||||||
|
if obj.Comment != "" {
|
||||||
|
param.Comment = cloudflare.F(obj.Comment)
|
||||||
|
}
|
||||||
|
return param
|
||||||
|
|
||||||
|
case "AAAA":
|
||||||
|
param := dns.AAAARecordParam{
|
||||||
|
Name: cloudflare.F(obj.RecordName),
|
||||||
|
Type: cloudflare.F(dns.AAAARecordTypeAAAA),
|
||||||
|
Content: cloudflare.F(obj.Content),
|
||||||
|
TTL: cloudflare.F(ttl),
|
||||||
|
}
|
||||||
|
if obj.Proxied != nil {
|
||||||
|
param.Proxied = cloudflare.F(*obj.Proxied)
|
||||||
|
}
|
||||||
|
if obj.Comment != "" {
|
||||||
|
param.Comment = cloudflare.F(obj.Comment)
|
||||||
|
}
|
||||||
|
return param
|
||||||
|
|
||||||
|
case "CNAME":
|
||||||
|
param := dns.CNAMERecordParam{
|
||||||
|
Name: cloudflare.F(obj.RecordName),
|
||||||
|
Type: cloudflare.F(dns.CNAMERecordTypeCNAME),
|
||||||
|
Content: cloudflare.F(obj.Content),
|
||||||
|
TTL: cloudflare.F(ttl),
|
||||||
|
}
|
||||||
|
if obj.Proxied != nil {
|
||||||
|
param.Proxied = cloudflare.F(*obj.Proxied)
|
||||||
|
}
|
||||||
|
if obj.Comment != "" {
|
||||||
|
param.Comment = cloudflare.F(obj.Comment)
|
||||||
|
}
|
||||||
|
return param
|
||||||
|
|
||||||
|
case "MX":
|
||||||
|
param := dns.MXRecordParam{
|
||||||
|
Name: cloudflare.F(obj.RecordName),
|
||||||
|
Type: cloudflare.F(dns.MXRecordTypeMX),
|
||||||
|
Content: cloudflare.F(obj.Content),
|
||||||
|
TTL: cloudflare.F(ttl),
|
||||||
|
}
|
||||||
|
if obj.Proxied != nil {
|
||||||
|
param.Proxied = cloudflare.F(*obj.Proxied)
|
||||||
|
}
|
||||||
|
if obj.Priority != nil { // required for MX record
|
||||||
|
param.Priority = cloudflare.F(*obj.Priority)
|
||||||
|
}
|
||||||
|
if obj.Comment != "" {
|
||||||
|
param.Comment = cloudflare.F(obj.Comment)
|
||||||
|
}
|
||||||
|
return param
|
||||||
|
|
||||||
|
case "TXT":
|
||||||
|
param := dns.TXTRecordParam{
|
||||||
|
Name: cloudflare.F(obj.RecordName),
|
||||||
|
Type: cloudflare.F(dns.TXTRecordTypeTXT),
|
||||||
|
Content: cloudflare.F(obj.Content),
|
||||||
|
TTL: cloudflare.F(ttl),
|
||||||
|
}
|
||||||
|
if obj.Proxied != nil {
|
||||||
|
param.Proxied = cloudflare.F(*obj.Proxied)
|
||||||
|
}
|
||||||
|
if obj.Comment != "" {
|
||||||
|
param.Comment = cloudflare.F(obj.Comment)
|
||||||
|
}
|
||||||
|
return param
|
||||||
|
|
||||||
|
case "NS":
|
||||||
|
param := dns.NSRecordParam{
|
||||||
|
Name: cloudflare.F(obj.RecordName),
|
||||||
|
Type: cloudflare.F(dns.NSRecordTypeNS),
|
||||||
|
Content: cloudflare.F(obj.Content),
|
||||||
|
TTL: cloudflare.F(ttl),
|
||||||
|
}
|
||||||
|
if obj.Proxied != nil {
|
||||||
|
param.Proxied = cloudflare.F(*obj.Proxied)
|
||||||
|
}
|
||||||
|
if obj.Comment != "" {
|
||||||
|
param.Comment = cloudflare.F(obj.Comment)
|
||||||
|
}
|
||||||
|
return param
|
||||||
|
|
||||||
|
case "SRV":
|
||||||
|
param := dns.SRVRecordParam{
|
||||||
|
Name: cloudflare.F(obj.RecordName),
|
||||||
|
Type: cloudflare.F(dns.SRVRecordTypeSRV),
|
||||||
|
Content: cloudflare.F(obj.Content),
|
||||||
|
TTL: cloudflare.F(ttl),
|
||||||
|
}
|
||||||
|
if obj.Proxied != nil {
|
||||||
|
param.Proxied = cloudflare.F(*obj.Proxied)
|
||||||
|
}
|
||||||
|
if obj.Priority != nil {
|
||||||
|
param.Priority = cloudflare.F(*obj.Priority)
|
||||||
|
}
|
||||||
|
if obj.Comment != "" {
|
||||||
|
param.Comment = cloudflare.F(obj.Comment)
|
||||||
|
}
|
||||||
|
return param
|
||||||
|
|
||||||
|
case "PTR":
|
||||||
|
param := dns.PTRRecordParam{
|
||||||
|
Name: cloudflare.F(obj.RecordName),
|
||||||
|
Type: cloudflare.F(dns.PTRRecordTypePTR),
|
||||||
|
Content: cloudflare.F(obj.Content),
|
||||||
|
TTL: cloudflare.F(ttl),
|
||||||
|
}
|
||||||
|
if obj.Proxied != nil {
|
||||||
|
param.Proxied = cloudflare.F(*obj.Proxied)
|
||||||
|
}
|
||||||
|
if obj.Comment != "" {
|
||||||
|
param.Comment = cloudflare.F(obj.Comment)
|
||||||
|
}
|
||||||
|
return param
|
||||||
|
|
||||||
|
default: // we should return something else here, need to investigate
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (obj *CloudflareDNSRes) createRecord(ctx context.Context) error {
|
||||||
|
recordParams := obj.buildRecordParam()
|
||||||
|
|
||||||
|
createParams := dns.RecordNewParams{
|
||||||
|
ZoneID: cloudflare.F(obj.zoneID),
|
||||||
|
Body: recordParams,
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := obj.client.DNS.Records.New(ctx, createParams)
|
||||||
|
if err != nil {
|
||||||
|
return errwrap.Wrapf(err, "failed to create dns record")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (obj *CloudflareDNSRes) updateRecord(ctx context.Context, recordID string) error {
|
||||||
|
recordParams := obj.buildRecordParam()
|
||||||
|
|
||||||
|
editParams := dns.RecordEditParams{
|
||||||
|
ZoneID: cloudflare.F(obj.zoneID),
|
||||||
|
Body: recordParams,
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := obj.client.DNS.Records.Edit(ctx, recordID, editParams)
|
||||||
|
if err != nil {
|
||||||
|
return errwrap.Wrapf(err, "failed to update dns record")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (obj *CloudflareDNSRes) needsUpdate(record dns.Record) bool {
|
||||||
|
if obj.Content != record.Content {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if obj.TTL != int64(record.TTL) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if obj.Proxied != nil && record.Proxied != nil {
|
||||||
|
if *obj.Proxied != *record.Proxied {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if obj.Priority != nil && record.Priority != nil {
|
||||||
|
if *obj.Priority != *record.Priority {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if obj.Comment != record.Comment {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO add more checks?
|
||||||
|
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user