@@ -146,31 +146,29 @@ func (ct *ConfigTracker) GetTargetConfigs(cd *flaggerv1.Canary) (map[string]Conf
146146 return nil , fmt .Errorf ("TargetRef.Kind invalid: %s" , cd .Spec .TargetRef .Kind )
147147 }
148148
149- type void struct {}
150- var member void
151- secretNames := map [string ]void {}
152- configMapNames := map [string ]void {}
149+ secretNames := make (map [string ]bool )
150+ configMapNames := make (map [string ]bool )
153151
154152 // scan volumes
155153 for _ , volume := range vs {
156154 if cmv := volume .ConfigMap ; cmv != nil {
157155 name := cmv .Name
158- configMapNames [name ] = member
156+ configMapNames [name ] = fieldIsMandatory ( cmv . Optional )
159157 }
160158 if sv := volume .Secret ; sv != nil {
161159 name := sv .SecretName
162- secretNames [name ] = member
160+ secretNames [name ] = fieldIsMandatory ( sv . Optional )
163161 }
164162
165163 if projected := volume .Projected ; projected != nil {
166164 for _ , source := range projected .Sources {
167165 if cmv := source .ConfigMap ; cmv != nil {
168166 name := cmv .Name
169- configMapNames [name ] = member
167+ configMapNames [name ] = fieldIsMandatory ( cmv . Optional )
170168 }
171169 if sv := source .Secret ; sv != nil {
172170 name := sv .Name
173- secretNames [name ] = member
171+ secretNames [name ] = fieldIsMandatory ( sv . Optional )
174172 }
175173 }
176174 }
@@ -183,10 +181,10 @@ func (ct *ConfigTracker) GetTargetConfigs(cd *flaggerv1.Canary) (map[string]Conf
183181 switch {
184182 case env .ValueFrom .ConfigMapKeyRef != nil :
185183 name := env .ValueFrom .ConfigMapKeyRef .LocalObjectReference .Name
186- configMapNames [name ] = member
184+ configMapNames [name ] = fieldIsMandatory ( env . ValueFrom . ConfigMapKeyRef . Optional )
187185 case env .ValueFrom .SecretKeyRef != nil :
188186 name := env .ValueFrom .SecretKeyRef .LocalObjectReference .Name
189- secretNames [name ] = member
187+ secretNames [name ] = fieldIsMandatory ( env . ValueFrom . SecretKeyRef . Optional )
190188 }
191189 }
192190 }
@@ -195,30 +193,37 @@ func (ct *ConfigTracker) GetTargetConfigs(cd *flaggerv1.Canary) (map[string]Conf
195193 switch {
196194 case envFrom .ConfigMapRef != nil :
197195 name := envFrom .ConfigMapRef .LocalObjectReference .Name
198- configMapNames [name ] = member
196+ configMapNames [name ] = fieldIsMandatory ( envFrom . ConfigMapRef . Optional )
199197 case envFrom .SecretRef != nil :
200198 name := envFrom .SecretRef .LocalObjectReference .Name
201- secretNames [name ] = member
199+ secretNames [name ] = fieldIsMandatory ( envFrom . SecretRef . Optional )
202200 }
203201 }
204202 }
205203
206204 res := make (map [string ]ConfigRef )
207205
208- for configMapName := range configMapNames {
206+ for configMapName , required := range configMapNames {
209207 config , err := ct .getRefFromConfigMap (configMapName , cd .Namespace )
210208 if err != nil {
211- ct .Logger .Errorf ("getRefFromConfigMap failed: %v" , err )
209+ if required {
210+ return nil , fmt .Errorf ("configmap %s.%s get query error: %w" , configMapName , cd .Namespace , err )
211+ }
212+ ct .Logger .Errorf ("configmap %s.%s get query failed: %w" , configMapName , cd .Namespace , err )
212213 continue
213214 }
214215 if config != nil {
215216 res [config .GetName ()] = * config
216217 }
217218 }
218- for secretName := range secretNames {
219+
220+ for secretName , required := range secretNames {
219221 secret , err := ct .getRefFromSecret (secretName , cd .Namespace )
220222 if err != nil {
221- ct .Logger .Errorf ("getRefFromSecret failed: %v" , err )
223+ if required {
224+ return nil , fmt .Errorf ("secret %s.%s get query error: %v" , secretName , cd .Namespace , err )
225+ }
226+ ct .Logger .Errorf ("secret %s.%s get query failed: %v" , secretName , cd .Namespace , err )
222227 continue
223228 }
224229 if secret != nil {
@@ -229,6 +234,13 @@ func (ct *ConfigTracker) GetTargetConfigs(cd *flaggerv1.Canary) (map[string]Conf
229234 return res , nil
230235}
231236
237+ func fieldIsMandatory (p * bool ) bool {
238+ if p == nil {
239+ return false
240+ }
241+ return ! * p
242+ }
243+
232244// GetConfigRefs returns a map of configs and their checksum
233245func (ct * ConfigTracker ) GetConfigRefs (cd * flaggerv1.Canary ) (* map [string ]string , error ) {
234246 res := make (map [string ]string )
0 commit comments