@@ -1248,22 +1248,44 @@ func imagePolicyConfigFileList(namespaceJSONs map[string][]byte) []generatedConf
12481248 return namespacedPolicyConfigFileList
12491249}
12501250
1251- func credProviderConfigObject (contents []byte ) (* kubeletconfig.CredentialProviderConfig , error ) {
1252- credProviderConfigObject := & kubeletconfig.CredentialProviderConfig {}
1251+ func credProviderConfigObject (contents []byte ) (* credentialProviderConfigWithVersion , error ) {
1252+ // Unmarshal into custom struct first to handle YAML with omitempty fields
1253+ credProviderConfigObject := & credentialProviderConfigWithVersion {}
12531254 err := yaml .Unmarshal (contents , credProviderConfigObject )
12541255 if err != nil {
12551256 return nil , fmt .Errorf ("error unmarshalling credential provider config: %w" , err )
12561257 }
1258+
12571259 return credProviderConfigObject , nil
12581260}
12591261
1260- type credentialProviderConfigVersioned struct {
1261- APIVersion string `yaml:"apiVersion"`
1262- Kind string `yaml:"kind"`
1263- Providers []kubeletconfig.CredentialProvider `yaml:"providers"`
1262+ // credentialProviderWithTag is a custom struct with omitempty tags to avoid null values in YAML
1263+ type credentialProviderWithTag struct {
1264+ Name string `json:"name"`
1265+ MatchImages []string `json:"matchImages"`
1266+ DefaultCacheDuration * metav1.Duration `json:"defaultCacheDuration,omitempty"`
1267+ APIVersion string `json:"apiVersion"`
1268+ Args []string `json:"args,omitempty"`
1269+ Env []kubeletconfig.ExecEnvVar `json:"env,omitempty"`
1270+ TokenAttributes * serviceAccountTokenAttributesVersioned `json:"tokenAttributes,omitempty"`
1271+ }
1272+
1273+ // serviceAccountTokenAttributesVersioned is a custom struct with omitempty tags to avoid null values in YAML
1274+ type serviceAccountTokenAttributesVersioned struct {
1275+ ServiceAccountTokenAudience string `json:"serviceAccountTokenAudience"`
1276+ CacheType kubeletconfig.ServiceAccountTokenCacheType `json:"cacheType"`
1277+ RequireServiceAccount * bool `json:"requireServiceAccount"`
1278+ RequiredServiceAccountAnnotationKeys []string `json:"requiredServiceAccountAnnotationKeys,omitempty"`
1279+ OptionalServiceAccountAnnotationKeys []string `json:"optionalServiceAccountAnnotationKeys,omitempty"`
1280+ }
1281+
1282+ type credentialProviderConfigWithVersion struct {
1283+ APIVersion string `json:"apiVersion"`
1284+ Kind string `json:"kind"`
1285+ Providers []* credentialProviderWithTag `json:"providers"`
12641286}
12651287
1266- func updateCredentialProviderConfig (credProviderConfigObject * kubeletconfig. CredentialProviderConfig , matchImages map [string ]bool ) ([]byte , error ) {
1288+ func updateCredentialProviderConfig (credProviderConfigObject * credentialProviderConfigWithVersion , matchImages map [string ]bool ) ([]byte , error ) {
12671289
12681290 // matchImages is not expected to be empty here as the caller should skip calling this function if there are no images
12691291 images := []string {}
@@ -1287,12 +1309,12 @@ func updateCredentialProviderConfig(credProviderConfigObject *kubeletconfig.Cred
12871309 if crioCredProviderExist && crioCredProviderIdx != - 1 {
12881310 credProviderConfigObject .Providers [crioCredProviderIdx ].MatchImages = images
12891311 } else {
1290- newProvider := kubeletconfig. CredentialProvider {
1312+ newProvider := & credentialProviderWithTag {
12911313 Name : crioCredentialProviderName ,
12921314 MatchImages : images ,
12931315 DefaultCacheDuration : & metav1.Duration {Duration : time .Second },
12941316 APIVersion : credentialProviderAPIVersion ,
1295- TokenAttributes : & kubeletconfig. ServiceAccountTokenAttributes {
1317+ TokenAttributes : & serviceAccountTokenAttributesVersioned {
12961318 ServiceAccountTokenAudience : "https://kubernetes.default.svc" ,
12971319 RequireServiceAccount : ptr .To (false ),
12981320 CacheType : kubeletconfig .TokenServiceAccountTokenCacheType ,
@@ -1301,15 +1323,10 @@ func updateCredentialProviderConfig(credProviderConfigObject *kubeletconfig.Cred
13011323 credProviderConfigObject .Providers = append (credProviderConfigObject .Providers , newProvider )
13021324 }
13031325
1304- credProviderConfigVersionedObj := credentialProviderConfigVersioned {
1305- APIVersion : "kubelet.config.k8s.io/v1" ,
1306- Kind : "CredentialProviderConfig" ,
1307- Providers : credProviderConfigObject .Providers ,
1308- }
1309-
1310- credProviderConfigsYaml , err := yaml .Marshal (credProviderConfigVersionedObj )
1326+ credProviderConfigsYaml , err := yaml .Marshal (credProviderConfigObject )
13111327 if err != nil {
13121328 return nil , fmt .Errorf ("error marshalling credential provider config: %v" , err )
13131329 }
1330+
13141331 return credProviderConfigsYaml , nil
13151332}
0 commit comments