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")
|
||||
}
|
||||
|
||||
// check how this being a pointer influences this check
|
||||
if obj.Proxied != res.Proxied {
|
||||
return fmt.Errorf("proxied values differ")
|
||||
}
|
||||
@@ -300,4 +301,212 @@ func (obj *CloudflareDNSRes) Cmp(r engine.Res) error {
|
||||
if obj.zoneID != res.zoneID {
|
||||
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