diff --git a/bundle/config/root.go b/bundle/config/root.go index 6a6daf46..8bebf648 100644 --- a/bundle/config/root.go +++ b/bundle/config/root.go @@ -482,13 +482,13 @@ func (r Root) verifySafeMerge(other Root) error { for k, p := range paths { if _, ok := otherPaths[k]; ok { // Type and location of the existing resource in the map. - ot := strings.TrimSuffix(paths[k][0].Key(), "s") - ov, _ := dyn.GetByPath(r.value.Get("resources"), paths[k]) + ot := strings.TrimSuffix(p[0].Key(), "s") + ov, _ := dyn.GetByPath(r.value.Get("resources"), p) ol := ov.Location() // Type and location of the newly encountered resource with a duplicate name. - nt := strings.TrimSuffix(p[0].Key(), "s") - nv, _ := dyn.GetByPath(r.value.Get("resources"), p) + nt := strings.TrimSuffix(otherPaths[k][0].Key(), "s") + nv, _ := dyn.GetByPath(other.value.Get("resources"), otherPaths[k]) nl := nv.Location() // Error, encountered a duplicate resource identifier. @@ -501,9 +501,9 @@ func (r Root) verifySafeMerge(other Root) error { // This function gathers the resource identifiers, which exist in the bundle configuration // in the form: resources... // -// It returns an error if it encounters a duplicate resource identifiers. +// It returns an error if it encounters duplicate resource identifiers. // -// Otherwise it returns a map of resource identifiers to their paths in the configuration tree +// Otherwise it returns a map of resource identifiers to their paths in the configuration tree, // relative to the resources key. func (r Root) gatherResourceIdentifiers() (map[string]dyn.Path, error) { paths := make(map[string]dyn.Path) @@ -520,8 +520,6 @@ func (r Root) gatherResourceIdentifiers() (map[string]dyn.Path, error) { return v, dyn.ErrSkip } - // TODO: Add validation that the resource is a map. - // If the resource identifier already exists in the map, return an error. k := p[1].Key() if _, ok := paths[k]; ok { diff --git a/bundle/config/root_test.go b/bundle/config/root_test.go index a6a1cdce..f64a2a3b 100644 --- a/bundle/config/root_test.go +++ b/bundle/config/root_test.go @@ -48,7 +48,7 @@ func TestDuplicateIdOnMergeReturnsErrorForJobAndPipeline(t *testing.T) { require.NoError(t, diags.Error()) err := root.Merge(other) - assert.ErrorContains(t, err, "multiple resources named foo (job at ./testdata/duplicate_resource_name_in_subconfiguration/databricks.yml:10:7, job at ./testdata/duplicate_resource_name_in_subconfiguration/databricks.yml:10:7)") + assert.ErrorContains(t, err, "multiple resources named foo (job at ./testdata/duplicate_resource_name_in_subconfiguration/databricks.yml:10:7, pipeline at ./testdata/duplicate_resource_name_in_subconfiguration/resources.yml:4:7)") } func TestDuplicateIdOnMergeReturnsErrorForJobAndJob(t *testing.T) { @@ -59,7 +59,7 @@ func TestDuplicateIdOnMergeReturnsErrorForJobAndJob(t *testing.T) { require.NoError(t, diags.Error()) err := root.Merge(other) - assert.ErrorContains(t, err, "multiple resources named foo (job at ./testdata/duplicate_resource_name_in_subconfiguration_job_and_job/databricks.yml:10:7, job at ./testdata/duplicate_resource_name_in_subconfiguration_job_and_job/databricks.yml:10:7)") + assert.ErrorContains(t, err, "multiple resources named foo (job at ./testdata/duplicate_resource_name_in_subconfiguration_job_and_job/databricks.yml:10:7, job at ./testdata/duplicate_resource_name_in_subconfiguration_job_and_job/resources.yml:4:7)") } func TestInitializeVariables(t *testing.T) {