@@ -74,29 +74,32 @@ func (m *PodMutator) Handle(ctx context.Context, req admission.Request) admissio
74
74
return admission .Denied (err .Error ())
75
75
}
76
76
77
- // Check for ConfigMap and create it if it doesn't exist
78
- cm := corev1.ConfigMap {}
79
- if err := m .Client .Get (ctx , client.ObjectKey {Name : val , Namespace : req .Namespace }, & cm ); errors .IsNotFound (err ) {
80
- err := m .createConfigMap (ctx , val , req .Namespace , pod )
81
- if err != nil {
82
- m .Log .V (1 ).Info (fmt .Sprintf ("failed to create config map %s error: %s" , val , err .Error ()))
83
- return admission .Errored (http .StatusInternalServerError , err )
77
+ // Check to see whether the FeatureFlagConfiguration has service or sync overrides
78
+ ff := m .getFeatureFlag (ctx , val , req .Namespace )
79
+
80
+ if ff .Spec .SyncProvider != nil && ! ff .Spec .SyncProvider .IsKubernetes () {
81
+ // Check for ConfigMap and create it if it doesn't exist (only required if sync provider isn't kubernetes)
82
+ cm := corev1.ConfigMap {}
83
+ if err := m .Client .Get (ctx , client.ObjectKey {Name : val , Namespace : req .Namespace }, & cm ); errors .IsNotFound (err ) {
84
+ err := m .createConfigMap (ctx , val , req .Namespace , pod )
85
+ if err != nil {
86
+ m .Log .V (1 ).Info (fmt .Sprintf ("failed to create config map %s error: %s" , val , err .Error ()))
87
+ return admission .Errored (http .StatusInternalServerError , err )
88
+ }
84
89
}
85
- }
86
90
87
- // Add owner reference of the pod's owner
88
- if ! podOwnerIsOwner (pod , cm ) {
89
- reference := pod .OwnerReferences [0 ]
90
- reference .Controller = utils .FalseVal ()
91
- cm .OwnerReferences = append (cm .OwnerReferences , reference )
92
- err := m .Client .Update (ctx , & cm )
93
- if err != nil {
94
- m .Log .V (1 ).Info (fmt .Sprintf ("failed to update owner reference for %s error: %s" , val , err .Error ()))
91
+ // Add owner reference of the pod's owner
92
+ if ! podOwnerIsOwner (pod , cm ) {
93
+ reference := pod .OwnerReferences [0 ]
94
+ reference .Controller = utils .FalseVal ()
95
+ cm .OwnerReferences = append (cm .OwnerReferences , reference )
96
+ err := m .Client .Update (ctx , & cm )
97
+ if err != nil {
98
+ m .Log .V (1 ).Info (fmt .Sprintf ("failed to update owner reference for %s error: %s" , val , err .Error ()))
99
+ }
95
100
}
96
101
}
97
102
98
- // Check to see whether the FeatureFlagConfiguration has service or sync overrides
99
- ff := m .getFeatureFlag (ctx , val , req .Namespace )
100
103
marshaledPod , err := m .injectSidecar (pod , val , & ff )
101
104
if err != nil {
102
105
return admission .Errored (http .StatusInternalServerError , err )
@@ -196,17 +199,6 @@ func (m *PodMutator) getFeatureFlag(ctx context.Context, name string, namespace
196
199
197
200
func (m * PodMutator ) injectSidecar (pod * corev1.Pod , configMap string , featureFlag * corev1alpha1.FeatureFlagConfiguration ) ([]byte , error ) {
198
201
m .Log .V (1 ).Info (fmt .Sprintf ("Creating sidecar for pod %s/%s" , pod .Namespace , pod .Name ))
199
- // Inject the agent
200
- pod .Spec .Volumes = append (pod .Spec .Volumes , corev1.Volume {
201
- Name : "flagd-config" ,
202
- VolumeSource : corev1.VolumeSource {
203
- ConfigMap : & corev1.ConfigMapVolumeSource {
204
- LocalObjectReference : corev1.LocalObjectReference {
205
- Name : configMap ,
206
- },
207
- },
208
- },
209
- })
210
202
211
203
commandSequence := []string {
212
204
"start" , "--uri" , "/etc/flagd/config.json" ,
@@ -217,11 +209,28 @@ func (m *PodMutator) injectSidecar(pod *corev1.Pod, configMap string, featureFla
217
209
commandSequence = append (commandSequence , "--service-provider" )
218
210
commandSequence = append (commandSequence , "http" )
219
211
}
212
+
213
+ var volumeMounts []corev1.VolumeMount
220
214
// Adds the sync provider if it is set
221
- if featureFlag .Spec .SyncProvider != nil {
222
- if featureFlag .Spec .SyncProvider .Name != "kubernetes" {
223
- commandSequence = append (commandSequence , "--sync-provider" )
224
- commandSequence = append (commandSequence , featureFlag .Spec .SyncProvider .Name )
215
+ if featureFlag .Spec .SyncProvider != nil && ! featureFlag .Spec .SyncProvider .IsKubernetes () {
216
+ commandSequence = append (commandSequence , "--sync-provider" )
217
+ commandSequence = append (commandSequence , featureFlag .Spec .SyncProvider .Name )
218
+ // inject config map as volume if sync provider not kubernetes
219
+ pod .Spec .Volumes = append (pod .Spec .Volumes , corev1.Volume {
220
+ Name : "flagd-config" ,
221
+ VolumeSource : corev1.VolumeSource {
222
+ ConfigMap : & corev1.ConfigMapVolumeSource {
223
+ LocalObjectReference : corev1.LocalObjectReference {
224
+ Name : configMap ,
225
+ },
226
+ },
227
+ },
228
+ })
229
+ volumeMounts = []corev1.VolumeMount {
230
+ {
231
+ Name : "flagd-config" ,
232
+ MountPath : "/etc/flagd" ,
233
+ },
225
234
}
226
235
} else {
227
236
featureFlag .Spec .SyncProvider = & corev1alpha1.FeatureFlagSyncProvider {
@@ -253,13 +262,8 @@ func (m *PodMutator) injectSidecar(pod *corev1.Pod, configMap string, featureFla
253
262
Image : "ghcr.io/open-feature/flagd:" + FlagDTag ,
254
263
Args : commandSequence ,
255
264
ImagePullPolicy : FlagDImagePullPolicy ,
256
- VolumeMounts : []corev1.VolumeMount {
257
- {
258
- Name : "flagd-config" ,
259
- MountPath : "/etc/flagd" ,
260
- },
261
- },
262
- Env : envs ,
265
+ VolumeMounts : volumeMounts ,
266
+ Env : envs ,
263
267
Ports : []corev1.ContainerPort {
264
268
{
265
269
Name : "metrics" ,
0 commit comments