From afa80c24bdf431d615b4988170deefdf37f6b669 Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Thu, 8 Mar 2018 19:48:11 +0100 Subject: [PATCH] LINODE: Fix Linode provider (#333) --- integrationTest/providers.json | 2 +- providers/linode/linodeProvider.go | 35 ++++++++++++++++-------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/integrationTest/providers.json b/integrationTest/providers.json index e1523d03f..8bb0c1d42 100644 --- a/integrationTest/providers.json +++ b/integrationTest/providers.json @@ -46,7 +46,7 @@ "COMMENT": "25: Linode's hostname validation does not allow the target domain TLD", "token": "$LINODE_TOKEN", "domain": "$LINODE_DOMAIN", - "knownFailures": "25" + "knownFailures": "27" }, "NS1": { "domain": "$NS1_DOMAIN", diff --git a/providers/linode/linodeProvider.go b/providers/linode/linodeProvider.go index 21e901305..407150a3f 100644 --- a/providers/linode/linodeProvider.go +++ b/providers/linode/linodeProvider.go @@ -135,12 +135,14 @@ func (api *LinodeApi) GetDomainCorrections(dc *models.DomainConfig) ([]*models.C // Linode always has read-only NS servers, but these are not mentioned in the API response // https://github.com/linode/manager/blob/edd99dc4e1be5ab8190f243c3dbf8b830716255e/src/constants.js#L184 for _, name := range defaultNameServerNames { - existingRecords = append(existingRecords, &models.RecordConfig{ + rc := &models.RecordConfig{ NameFQDN: dc.Name, Type: "NS", - Target: name, Original: &domainRecord{}, - }) + } + rc.SetTarget(name) + + existingRecords = append(existingRecords, rc) } // Normalize @@ -221,19 +223,8 @@ func (api *LinodeApi) GetDomainCorrections(dc *models.DomainConfig) ([]*models.C } func toRc(dc *models.DomainConfig, r *domainRecord) *models.RecordConfig { - // This handles "@" etc. - name := dnsutil.AddOrigin(r.Name, dc.Name) - - target := r.Target - // Make target FQDN (#rtype_variations) - if r.Type == "CNAME" || r.Type == "MX" || r.Type == "NS" || r.Type == "SRV" { - target = dnsutil.AddOrigin(target+".", dc.Name) - } - - return &models.RecordConfig{ - NameFQDN: name, + rc := &models.RecordConfig{ Type: r.Type, - Target: target, TTL: r.TTLSec, MxPreference: r.Priority, SrvPriority: r.Priority, @@ -241,13 +232,25 @@ func toRc(dc *models.DomainConfig, r *domainRecord) *models.RecordConfig { SrvPort: uint16(r.Port), Original: r, } + rc.SetLabel(r.Name, dc.Name) + + switch rtype := r.Type; rtype { // #rtype_variations + case "TXT": + rc.SetTargetTXT(r.Target) + case "CNAME", "MX", "NS", "SRV": + rc.SetTarget(dnsutil.AddOrigin(r.Target+".", dc.Name)) + default: + rc.SetTarget(r.Target) + } + + return rc } func toReq(dc *models.DomainConfig, rc *models.RecordConfig) (*recordEditRequest, error) { req := &recordEditRequest{ Type: rc.Type, Name: dnsutil.TrimDomainName(rc.NameFQDN, dc.Name), - Target: rc.Target, + Target: rc.GetTargetField(), TTL: int(rc.TTL), Priority: 0, Port: int(rc.SrvPort),