Skip to content

Commit 395574c

Browse files
authored
Consider path nestedness for all possible downward API values (#1524)
* Consider path nestedness for all possible downward API values Fixes #1520 Signed-off-by: Max Brauer <[email protected]> * Remove redundant tests Signed-off-by: Max Brauer <[email protected]> --------- Signed-off-by: Max Brauer <[email protected]>
1 parent 3dfb25b commit 395574c

File tree

2 files changed

+30
-49
lines changed

2 files changed

+30
-49
lines changed

pkg/template/downward_api_values.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,29 +55,29 @@ func (a DownwardAPIValues) AsYAMLs() ([][]byte, error) {
5555
if err != nil {
5656
return nil, err
5757
}
58-
keyValueContent, err = yaml.Marshal(map[string]string{item.Name: v})
58+
keyValueContent, err = a.nestedKeyValue(item.Name, v)
5959
} else {
60-
keyValueContent, err = yaml.Marshal(map[string]string{item.Name: item.KubernetesVersion.Version})
60+
keyValueContent, err = a.nestedKeyValue(item.Name, item.KubernetesVersion.Version)
6161
}
6262
case item.KappControllerVersion != nil:
6363
if item.KappControllerVersion.Version == "" {
6464
v, err := a.additionalDownwardAPIValues.KappControllerVersion()
6565
if err != nil {
6666
return nil, err
6767
}
68-
keyValueContent, err = yaml.Marshal(map[string]string{item.Name: v})
68+
keyValueContent, err = a.nestedKeyValue(item.Name, v)
6969
} else {
70-
keyValueContent, err = yaml.Marshal(map[string]string{item.Name: item.KappControllerVersion.Version})
70+
keyValueContent, err = a.nestedKeyValue(item.Name, item.KappControllerVersion.Version)
7171
}
7272
case item.KubernetesAPIs != nil:
7373
if item.KubernetesAPIs.GroupVersions == nil {
7474
v, err := a.additionalDownwardAPIValues.KubernetesAPIs()
7575
if err != nil {
7676
return nil, err
7777
}
78-
keyValueContent, err = yaml.Marshal(map[string]interface{}{item.Name: v})
78+
keyValueContent, err = a.nestedKeyValue(item.Name, v)
7979
} else {
80-
keyValueContent, err = yaml.Marshal(map[string]interface{}{item.Name: item.KubernetesAPIs.GroupVersions})
80+
keyValueContent, err = a.nestedKeyValue(item.Name, item.KubernetesAPIs.GroupVersions)
8181
}
8282
default:
8383
return nil, fmt.Errorf("Invalid downward API item given")

pkg/template/values_test.go

Lines changed: 24 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -65,22 +65,45 @@ func TestValues(t *testing.T) {
6565

6666
t.Run("name should allow nested key structure", func(t *testing.T) {
6767
subject := subject
68+
subject.AdditionalValues = AdditionalDownwardAPIValues{
69+
KubernetesVersion: func() (string, error) {
70+
return "test-kubernetes-version", nil
71+
},
72+
KubernetesAPIs: func() ([]string, error) {
73+
return []string{"somegroup.example.com/someversion"}, nil
74+
},
75+
KappControllerVersion: func() (string, error) {
76+
return "test-kapp-controller-version", nil
77+
},
78+
}
6879
subject.ValuesFrom = []v1alpha1.AppTemplateValuesSource{{DownwardAPI: &v1alpha1.AppTemplateValuesDownwardAPI{
6980
Items: []v1alpha1.AppTemplateValuesDownwardAPIItem{
7081
{Name: "parent.child", FieldPath: "metadata.name"},
7182
{Name: "parent.child1.child2", FieldPath: "metadata.namespace"},
7283
{Name: "parent.childwith\\.dot", FieldPath: "metadata.namespace"},
84+
{Name: "parent.kubernetes_version", KubernetesVersion: &v1alpha1.Version{}},
85+
{Name: "parent.kubernetes_version_custom", KubernetesVersion: &v1alpha1.Version{Version: "test-kubernetes-version-custom"}},
86+
{Name: "parent.kubernetes_apis", KubernetesAPIs: &v1alpha1.KubernetesAPIs{}},
87+
{Name: "parent.kubernetes_apis_custom", KubernetesAPIs: &v1alpha1.KubernetesAPIs{GroupVersions: []string{"somecustomgroup.example.com/someversion"}}},
88+
{Name: "parent.kapp_controller_version", KappControllerVersion: &v1alpha1.Version{}},
89+
{Name: "parent.kapp_controller_version_custom", KubernetesVersion: &v1alpha1.Version{Version: "test-kapp-controller-version-custom"}},
7390
}},
7491
}}
7592

7693
paths, cleanup, err := subject.AsPaths(os.TempDir())
7794
require.NoError(t, err)
78-
require.Len(t, paths, 3)
95+
require.Len(t, paths, 9)
7996
t.Cleanup(cleanup)
8097

8198
assertFileContents(t, paths[0], "parent:\n child: some-name\n")
8299
assertFileContents(t, paths[1], "parent:\n child1:\n child2: some-namespace\n")
83100
assertFileContents(t, paths[2], "parent:\n childwith.dot: some-namespace\n")
101+
assertFileContents(t, paths[3], "parent:\n kubernetes_version: test-kubernetes-version\n")
102+
assertFileContents(t, paths[4], "parent:\n kubernetes_version_custom: test-kubernetes-version-custom\n")
103+
assertFileContents(t, paths[5], "parent:\n kubernetes_apis:\n - somegroup.example.com/someversion\n")
104+
assertFileContents(t, paths[6], "parent:\n kubernetes_apis_custom:\n - somecustomgroup.example.com/someversion\n")
105+
assertFileContents(t, paths[7], "parent:\n kapp_controller_version: test-kapp-controller-version\n")
106+
assertFileContents(t, paths[8], "parent:\n kapp_controller_version_custom: test-kapp-controller-version-custom\n")
84107
})
85108

86109
t.Run("map field paths should allow subpaths", func(t *testing.T) {
@@ -229,48 +252,6 @@ func TestValues(t *testing.T) {
229252
require.Error(t, err)
230253
assert.ErrorContains(t, err, "Invalid field spec provided to DownwardAPI. Only single supported fields are allowed")
231254
})
232-
233-
t.Run("return kubernetes cluster version if not supplied", func(t *testing.T) {
234-
subject := subject
235-
subject.ValuesFrom = []v1alpha1.AppTemplateValuesSource{{DownwardAPI: &v1alpha1.AppTemplateValuesDownwardAPI{
236-
Items: []v1alpha1.AppTemplateValuesDownwardAPIItem{
237-
{Name: "k8s-version", KubernetesVersion: &v1alpha1.Version{}},
238-
}},
239-
}}
240-
subject.AdditionalValues = AdditionalDownwardAPIValues{
241-
KubernetesVersion: func() (string, error) {
242-
return "0.20.0", nil
243-
},
244-
}
245-
246-
paths, cleanup, err := subject.AsPaths(os.TempDir())
247-
require.NoError(t, err)
248-
t.Cleanup(cleanup)
249-
250-
require.Len(t, paths, 1)
251-
assertFileContents(t, paths[0], "k8s-version: 0.20.0\n")
252-
})
253-
254-
t.Run("return kapp-controller version", func(t *testing.T) {
255-
subject := subject
256-
subject.ValuesFrom = []v1alpha1.AppTemplateValuesSource{{DownwardAPI: &v1alpha1.AppTemplateValuesDownwardAPI{
257-
Items: []v1alpha1.AppTemplateValuesDownwardAPIItem{
258-
{Name: "kc-version", KappControllerVersion: &v1alpha1.Version{}},
259-
}},
260-
}}
261-
subject.AdditionalValues = AdditionalDownwardAPIValues{
262-
KappControllerVersion: func() (string, error) {
263-
return "0.42.31337", nil
264-
},
265-
}
266-
267-
paths, cleanup, err := subject.AsPaths(os.TempDir())
268-
require.NoError(t, err)
269-
t.Cleanup(cleanup)
270-
271-
require.Len(t, paths, 1)
272-
assertFileContents(t, paths[0], "kc-version: 0.42.31337\n")
273-
})
274255
})
275256
}
276257

0 commit comments

Comments
 (0)