From b11254e51f4ece6c7e5ab9d85f05ca60dc48a977 Mon Sep 17 00:00:00 2001 From: Craig Peterson Date: Tue, 7 Feb 2017 12:42:11 -0700 Subject: [PATCH] import transform will not overwrite existing records. (#34) fixes #33 --- normalize/importTransform_test.go | 42 +++++++++++++++++++++++++++++++ normalize/validate.go | 3 +++ 2 files changed, 45 insertions(+) create mode 100644 normalize/importTransform_test.go diff --git a/normalize/importTransform_test.go b/normalize/importTransform_test.go new file mode 100644 index 000000000..68df3a23b --- /dev/null +++ b/normalize/importTransform_test.go @@ -0,0 +1,42 @@ +package normalize + +import ( + "github.com/StackExchange/dnscontrol/models" + "testing" +) + +func TestImportTransform(t *testing.T) { + + const transformDouble = "0.0.0.0~1.1.1.1~~9.0.0.0,10.0.0.0" + const transformSingle = "0.0.0.0~1.1.1.1~~8.0.0.0" + src := &models.DomainConfig{ + Name: "stackexchange.com", + Records: []*models.RecordConfig{ + {Type: "A", Name: "*", NameFQDN: "*.stackexchange.com", Target: "0.0.2.2"}, + {Type: "A", Name: "www", NameFQDN: "", Target: "0.0.1.1"}, + }, + } + dst := &models.DomainConfig{ + Name: "internal", + Records: []*models.RecordConfig{ + {Type: "A", Name: "*.stackexchange.com", NameFQDN: "*.stackexchange.com.internal", Target: "0.0.3.3", Metadata: map[string]string{"transform_table": transformSingle}}, + {Type: "IMPORT_TRANSFORM", Name: "@", Target: "stackexchange.com", Metadata: map[string]string{"transform_table": transformDouble}}, + }, + } + cfg := &models.DNSConfig{ + Domains: []*models.DomainConfig{src, dst}, + } + if errs := NormalizeAndValidateConfig(cfg); len(errs) != 0 { + for _, err := range errs { + t.Error(err) + } + t.FailNow() + } + d := cfg.FindDomain("internal") + if len(d.Records) != 3 { + for _, r := range d.Records { + t.Error(r) + } + t.Fatalf("Expected 3 records in internal, but got %d", len(d.Records)) + } +} diff --git a/normalize/validate.go b/normalize/validate.go index 5fdd5f0d3..b84cfc634 100644 --- a/normalize/validate.go +++ b/normalize/validate.go @@ -147,6 +147,9 @@ func import_transform(src_domain, dst_domain *models.DomainConfig, transforms [] // 4. For As, change the target as described the transforms. for _, rec := range src_domain.Records { + if dst_domain.HasRecordTypeName(rec.Type, rec.NameFQDN) { + continue + } newRec := func() *models.RecordConfig { rec2, _ := rec.Copy() rec2.Name = rec2.NameFQDN