about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--context/context.go2
-rw-r--r--context/context_test.go59
-rw-r--r--context/testdata/parent-variable-override.yaml10
-rw-r--r--context/testdata/parent-variables.yaml10
4 files changed, 81 insertions, 0 deletions
diff --git a/context/context.go b/context/context.go
index 108bda28a90d..520070d88f67 100644
--- a/context/context.go
+++ b/context/context.go
@@ -9,6 +9,7 @@ import (
 
 	"github.com/ghodss/yaml"
 	"github.com/polydawn/meep"
+	"github.com/tazjin/kontemplate/util"
 )
 
 type ResourceSet struct {
@@ -82,6 +83,7 @@ func flattenResourceSetCollections(rs *[]ResourceSet) *[]ResourceSet {
 			for _, subResourceSet := range r.Include {
 				subResourceSet.Parent = r.Name
 				subResourceSet.Name = path.Join(r.Name, subResourceSet.Name)
+				subResourceSet.Values = *util.Merge(&r.Values, &subResourceSet.Values)
 				flattened = append(flattened, subResourceSet)
 			}
 		}
diff --git a/context/context_test.go b/context/context_test.go
index b34222ed4650..66b857ffe822 100644
--- a/context/context_test.go
+++ b/context/context_test.go
@@ -81,3 +81,62 @@ func TestLoadContextWithResourceSetCollections(t *testing.T) {
 	}
 
 }
+
+func TestSubresourceVariableInheritance(t *testing.T) {
+	ctx, err := LoadContextFromFile("testdata/parent-variables.yaml")
+
+	if err != nil {
+		t.Error(err)
+		t.Fail()
+	}
+
+	expected := Context{
+		Name: "k8s.prod.mydomain.com",
+		ResourceSets: []ResourceSet{
+			{
+				Name: "parent/child",
+				Values: map[string]interface{}{
+					"foo": "bar",
+					"bar": "baz",
+				},
+				Include: nil,
+				Parent: "parent",
+			},
+		},
+		BaseDir: "testdata",
+	}
+
+	if !reflect.DeepEqual(*ctx, expected) {
+		t.Error("Loaded and expected context did not match")
+		t.Fail()
+	}
+}
+
+func TestSubresourceVariableInheritanceOverride(t *testing.T) {
+	ctx, err := LoadContextFromFile("testdata/parent-variable-override.yaml")
+
+	if err != nil {
+		t.Error(err)
+		t.Fail()
+	}
+
+	expected := Context{
+		Name: "k8s.prod.mydomain.com",
+		ResourceSets: []ResourceSet{
+			{
+				Name: "parent/child",
+				Values: map[string]interface{}{
+					"foo": "newvalue",
+				},
+				Include: nil,
+				Parent: "parent",
+			},
+		},
+		BaseDir: "testdata",
+	}
+
+	if !reflect.DeepEqual(*ctx, expected) {
+		t.Error("Loaded and expected context did not match")
+		t.Fail()
+	}
+}
diff --git a/context/testdata/parent-variable-override.yaml b/context/testdata/parent-variable-override.yaml
new file mode 100644
index 000000000000..42676c3028fe
--- /dev/null
+++ b/context/testdata/parent-variable-override.yaml
@@ -0,0 +1,10 @@
+---
+context: k8s.prod.mydomain.com
+include:
+  - name: parent
+    values:
+      foo: bar
+    include:
+      - name: child
+        values:
+          foo: newvalue
diff --git a/context/testdata/parent-variables.yaml b/context/testdata/parent-variables.yaml
new file mode 100644
index 000000000000..8459fd30405b
--- /dev/null
+++ b/context/testdata/parent-variables.yaml
@@ -0,0 +1,10 @@
+---
+context: k8s.prod.mydomain.com
+include:
+  - name: parent
+    values:
+      foo: bar
+    include:
+      - name: child
+        values:
+          bar: baz