@@ -74,29 +74,32 @@ func (m *PodMutator) Handle(ctx context.Context, req admission.Request) admissio
7474 return admission .Denied (err .Error ())
7575 }
7676
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+ }
8489 }
85- }
8690
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+ }
95100 }
96101 }
97102
98- // Check to see whether the FeatureFlagConfiguration has service or sync overrides
99- ff := m .getFeatureFlag (ctx , val , req .Namespace )
100103 marshaledPod , err := m .injectSidecar (pod , val , & ff )
101104 if err != nil {
102105 return admission .Errored (http .StatusInternalServerError , err )
@@ -196,17 +199,6 @@ func (m *PodMutator) getFeatureFlag(ctx context.Context, name string, namespace
196199
197200func (m * PodMutator ) injectSidecar (pod * corev1.Pod , configMap string , featureFlag * corev1alpha1.FeatureFlagConfiguration ) ([]byte , error ) {
198201 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- })
210202
211203 commandSequence := []string {
212204 "start" , "--uri" , "/etc/flagd/config.json" ,
@@ -217,11 +209,28 @@ func (m *PodMutator) injectSidecar(pod *corev1.Pod, configMap string, featureFla
217209 commandSequence = append (commandSequence , "--service-provider" )
218210 commandSequence = append (commandSequence , "http" )
219211 }
212+
213+ var volumeMounts []corev1.VolumeMount
220214 // 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+ },
225234 }
226235 } else {
227236 featureFlag .Spec .SyncProvider = & corev1alpha1.FeatureFlagSyncProvider {
@@ -253,13 +262,8 @@ func (m *PodMutator) injectSidecar(pod *corev1.Pod, configMap string, featureFla
253262 Image : "ghcr.io/open-feature/flagd:" + FlagDTag ,
254263 Args : commandSequence ,
255264 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 ,
263267 Ports : []corev1.ContainerPort {
264268 {
265269 Name : "metrics" ,
0 commit comments