mirror of https://github.com/databricks/cli.git
Fixed detecting full syntax variable override which includes type field (#1775)
## Changes Fixes #1773 ## Tests Confirmed manually
This commit is contained in:
parent
e220f9ddd6
commit
bcab6ca37b
|
@ -409,18 +409,33 @@ func (r *Root) MergeTargetOverrides(name string) error {
|
||||||
var variableKeywords = []string{"default", "lookup"}
|
var variableKeywords = []string{"default", "lookup"}
|
||||||
|
|
||||||
// isFullVariableOverrideDef checks if the given value is a full syntax varaible override.
|
// isFullVariableOverrideDef checks if the given value is a full syntax varaible override.
|
||||||
// A full syntax variable override is a map with only one of the following
|
// A full syntax variable override is a map with either 1 of 2 keys.
|
||||||
// keys: "default", "lookup".
|
// If it's 2 keys, the keys should be "default" and "type".
|
||||||
|
// If it's 1 key, the key should be one of the following keys: "default", "lookup".
|
||||||
func isFullVariableOverrideDef(v dyn.Value) bool {
|
func isFullVariableOverrideDef(v dyn.Value) bool {
|
||||||
mv, ok := v.AsMap()
|
mv, ok := v.AsMap()
|
||||||
if !ok {
|
if !ok {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
if mv.Len() != 1 {
|
// If the map has more than 2 keys, it is not a full variable override.
|
||||||
|
if mv.Len() > 2 {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the map has 2 keys, one of them should be "default" and the other is "type"
|
||||||
|
if mv.Len() == 2 {
|
||||||
|
if _, ok := mv.GetByString("type"); !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, ok := mv.GetByString("default"); !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
for _, keyword := range variableKeywords {
|
for _, keyword := range variableKeywords {
|
||||||
if _, ok := mv.GetByString(keyword); ok {
|
if _, ok := mv.GetByString(keyword); ok {
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -88,3 +88,21 @@ func TestComplexVariablesOverrideWithMultipleFiles(t *testing.T) {
|
||||||
require.Equalf(t, "false", cluster.NewCluster.SparkConf["spark.speculation"], "cluster: %v", cluster.JobClusterKey)
|
require.Equalf(t, "false", cluster.NewCluster.SparkConf["spark.speculation"], "cluster: %v", cluster.JobClusterKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestComplexVariablesOverrideWithFullSyntax(t *testing.T) {
|
||||||
|
b, diags := loadTargetWithDiags("variables/complex", "dev")
|
||||||
|
require.Empty(t, diags)
|
||||||
|
|
||||||
|
diags = bundle.Apply(context.Background(), b, bundle.Seq(
|
||||||
|
mutator.SetVariables(),
|
||||||
|
mutator.ResolveVariableReferencesInComplexVariables(),
|
||||||
|
mutator.ResolveVariableReferences(
|
||||||
|
"variables",
|
||||||
|
),
|
||||||
|
))
|
||||||
|
require.NoError(t, diags.Error())
|
||||||
|
require.Empty(t, diags)
|
||||||
|
|
||||||
|
complexvar := b.Config.Variables["complexvar"].Value
|
||||||
|
require.Equal(t, map[string]interface{}{"key1": "1", "key2": "2", "key3": "3"}, complexvar)
|
||||||
|
}
|
||||||
|
|
|
@ -35,6 +35,13 @@ variables:
|
||||||
- jar: "/path/to/jar"
|
- jar: "/path/to/jar"
|
||||||
- egg: "/path/to/egg"
|
- egg: "/path/to/egg"
|
||||||
- whl: "/path/to/whl"
|
- whl: "/path/to/whl"
|
||||||
|
complexvar:
|
||||||
|
type: complex
|
||||||
|
description: "A complex variable"
|
||||||
|
default:
|
||||||
|
key1: "value1"
|
||||||
|
key2: "value2"
|
||||||
|
key3: "value3"
|
||||||
|
|
||||||
|
|
||||||
targets:
|
targets:
|
||||||
|
@ -49,3 +56,9 @@ targets:
|
||||||
spark_conf:
|
spark_conf:
|
||||||
spark.speculation: false
|
spark.speculation: false
|
||||||
spark.databricks.delta.retentionDurationCheck.enabled: false
|
spark.databricks.delta.retentionDurationCheck.enabled: false
|
||||||
|
complexvar:
|
||||||
|
type: complex
|
||||||
|
default:
|
||||||
|
key1: "1"
|
||||||
|
key2: "2"
|
||||||
|
key3: "3"
|
||||||
|
|
Loading…
Reference in New Issue