Skip to content
This repository was archived by the owner on Oct 28, 2024. It is now read-only.

Commit 5afe1b8

Browse files
committed
Support exposing single annotations/labels via env downward API
1 parent 6428e48 commit 5afe1b8

File tree

2 files changed

+53
-10
lines changed

2 files changed

+53
-10
lines changed

virtualcluster/pkg/syncer/conversion/mutate.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ package conversion
1919
import (
2020
"context"
2121
"fmt"
22-
"strings"
23-
2422
v1 "k8s.io/api/core/v1"
2523
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2624
"k8s.io/klog/v2"
@@ -226,18 +224,14 @@ func mutateDownwardAPIField(env *v1.EnvVar, vPod *v1.Pod) {
226224
if env.ValueFrom.FieldRef == nil {
227225
return
228226
}
229-
if !strings.HasPrefix(env.ValueFrom.FieldRef.FieldPath, "metadata") {
230-
return
231-
}
232227
switch env.ValueFrom.FieldRef.FieldPath {
233-
case "metadata.name":
234-
env.Value = vPod.Name
235228
case "metadata.namespace":
236229
env.Value = vPod.Namespace
230+
env.ValueFrom = nil
237231
case "metadata.uid":
238232
env.Value = string(vPod.UID)
233+
env.ValueFrom = nil
239234
}
240-
env.ValueFrom = nil
241235
}
242236

243237
func getServiceEnvVarMap(ns, cluster string, enableServiceLinks *bool, services []*v1.Service) (string, map[string]string) {

virtualcluster/pkg/syncer/conversion/mutate_test.go

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,13 @@ func Test_mutateDownwardAPIField(t *testing.T) {
8686
},
8787
},
8888
expectedEnv: &v1.EnvVar{
89-
Name: "env_name",
90-
Value: aPod.Name,
89+
Name: "env_name",
90+
ValueFrom: &v1.EnvVarSource{
91+
FieldRef: &v1.ObjectFieldSelector{
92+
APIVersion: "v1",
93+
FieldPath: "metadata.name",
94+
},
95+
},
9196
},
9297
},
9398
{
@@ -124,6 +129,50 @@ func Test_mutateDownwardAPIField(t *testing.T) {
124129
Value: string(aPod.UID),
125130
},
126131
},
132+
{
133+
name: "env with metadata.annotations",
134+
pod: aPod,
135+
env: &v1.EnvVar{
136+
Name: "env_name",
137+
ValueFrom: &v1.EnvVarSource{
138+
FieldRef: &v1.ObjectFieldSelector{
139+
APIVersion: "v1",
140+
FieldPath: "metadata.annotations['anno1']",
141+
},
142+
},
143+
},
144+
expectedEnv: &v1.EnvVar{
145+
Name: "env_name",
146+
ValueFrom: &v1.EnvVarSource{
147+
FieldRef: &v1.ObjectFieldSelector{
148+
APIVersion: "v1",
149+
FieldPath: "metadata.annotations['anno1']",
150+
},
151+
},
152+
},
153+
},
154+
{
155+
name: "env with metadata.labels",
156+
pod: aPod,
157+
env: &v1.EnvVar{
158+
Name: "env_name",
159+
ValueFrom: &v1.EnvVarSource{
160+
FieldRef: &v1.ObjectFieldSelector{
161+
APIVersion: "v1",
162+
FieldPath: "metadata.labels['label1']",
163+
},
164+
},
165+
},
166+
expectedEnv: &v1.EnvVar{
167+
Name: "env_name",
168+
ValueFrom: &v1.EnvVarSource{
169+
FieldRef: &v1.ObjectFieldSelector{
170+
APIVersion: "v1",
171+
FieldPath: "metadata.labels['label1']",
172+
},
173+
},
174+
},
175+
},
127176
} {
128177
t.Run(tt.name, func(tc *testing.T) {
129178
mutateDownwardAPIField(tt.env, tt.pod)

0 commit comments

Comments
 (0)