diff --git a/acceptance/bundle/validate/yaml_anchors/inline_merge_mapping/output.txt b/acceptance/bundle/validate/yaml_anchors/inline_merge_mapping/output.txt index 85dc1ee379b..166aeb69530 100644 --- a/acceptance/bundle/validate/yaml_anchors/inline_merge_mapping/output.txt +++ b/acceptance/bundle/validate/yaml_anchors/inline_merge_mapping/output.txt @@ -1,8 +1,15 @@ ->>> [CLI] bundle validate -Error: failed to load [TEST_TMP_DIR]/databricks.yml: yaml ([TEST_TMP_DIR]/databricks.yml:11:11): map merge requires map or sequence of maps as the value - - -Found 1 error - -Exit code: 1 +>>> [CLI] bundle validate -t dev +Name: test-bundle +Target: dev +Workspace: + User: [USERNAME] + Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/dev + +Validation OK! + +>>> [CLI] bundle validate -t dev -o json +{ + "default": "overridden", + "value": "overridden" +} diff --git a/acceptance/bundle/validate/yaml_anchors/inline_merge_mapping/script b/acceptance/bundle/validate/yaml_anchors/inline_merge_mapping/script index 1724b135e5e..2f23d2742fb 100644 --- a/acceptance/bundle/validate/yaml_anchors/inline_merge_mapping/script +++ b/acceptance/bundle/validate/yaml_anchors/inline_merge_mapping/script @@ -1,2 +1,3 @@ # An inline mapping as the value of '<<' in target variables. -errcode trace $CLI bundle validate +trace $CLI bundle validate -t dev +trace $CLI bundle validate -t dev -o json | jq .variables.x diff --git a/acceptance/bundle/validate/yaml_anchors/inline_merge_mapping/test.toml b/acceptance/bundle/validate/yaml_anchors/inline_merge_mapping/test.toml deleted file mode 100644 index 84101454028..00000000000 --- a/acceptance/bundle/validate/yaml_anchors/inline_merge_mapping/test.toml +++ /dev/null @@ -1 +0,0 @@ -Badness = "The YAML merge key spec allows a single mapping as the value of the merge key, but it is rejected." diff --git a/libs/dyn/yamlloader/loader.go b/libs/dyn/yamlloader/loader.go index aebbf0883e9..708ae5dbaac 100644 --- a/libs/dyn/yamlloader/loader.go +++ b/libs/dyn/yamlloader/loader.go @@ -169,7 +169,7 @@ func (d *loader) loadMapping(node *yaml.Node, loc diag.Location) (dyn.Value, err switch merge.Kind { case yaml.SequenceNode: mnodes = merge.Content - case yaml.AliasNode: + case yaml.MappingNode, yaml.AliasNode: mnodes = []*yaml.Node{merge} default: return dyn.NilValue, merr diff --git a/libs/dyn/yamlloader/yaml_anchor_test.go b/libs/dyn/yamlloader/yaml_anchor_test.go index 00f4576a3e2..346710d7e03 100644 --- a/libs/dyn/yamlloader/yaml_anchor_test.go +++ b/libs/dyn/yamlloader/yaml_anchor_test.go @@ -138,3 +138,12 @@ func TestYAMLAnchor10(t *testing.T) { assert.Equal(t, 1, self.Get("use1").Get("value").AsAny()) assert.Equal(t, 1, self.Get("use2").Get("value").AsAny()) } + +func TestYAMLInlineMapMerge(t *testing.T) { + input := "target:\n <<: {x: inherited, y: merged}\n x: local\n" + value, err := yamlloader.LoadYAML("inline.yml", bytes.NewBufferString(input)) + require.NoError(t, err) + + assert.Equal(t, "local", value.Get("target").Get("x").AsAny()) + assert.Equal(t, "merged", value.Get("target").Get("y").AsAny()) +}