@@ -21,11 +21,13 @@ import (
2121 "fmt"
2222 "strings"
2323
24- "knative.dev/eventing /pkg/apis/feature "
24+ "k8s.io/apimachinery /pkg/api/equality "
2525 duckv1 "knative.dev/pkg/apis/duck/v1"
2626 "knative.dev/pkg/kmeta"
2727 pkgreconciler "knative.dev/pkg/reconciler"
2828
29+ "knative.dev/eventing/pkg/apis/feature"
30+
2931 "go.uber.org/zap"
3032 v1 "k8s.io/api/core/v1"
3133 apierrs "k8s.io/apimachinery/pkg/api/errors"
@@ -38,10 +40,10 @@ import (
3840)
3941
4042const (
41- //OIDCLabelKey is used to filter out all the informers that related to OIDC work
42- OIDCLabelKey = "oidc"
43+ // OIDCLabelKey is used to filter out all the informers that related to OIDC work
44+ OIDCLabelKey = "eventing.knative.dev/ oidc"
4345
44- // OIDCTokenRoleLabelSelector is the label selector for the OIDC token creator role and rolebinding informers
46+ // OIDCLabelSelector is the label selector for the OIDC resources
4547 OIDCLabelSelector = OIDCLabelKey
4648)
4749
@@ -87,28 +89,38 @@ func EnsureOIDCServiceAccountExistsForResource(ctx context.Context, serviceAccou
8789 saName := GetOIDCServiceAccountNameForResource (gvk , objectMeta )
8890 sa , err := serviceAccountLister .ServiceAccounts (objectMeta .Namespace ).Get (saName )
8991
92+ expected := GetOIDCServiceAccountForResource (gvk , objectMeta )
93+
9094 // If the resource doesn't exist, we'll create it.
9195 if apierrs .IsNotFound (err ) {
9296 logging .FromContext (ctx ).Debugw ("Creating OIDC service account" , zap .Error (err ))
9397
94- expected := GetOIDCServiceAccountForResource (gvk , objectMeta )
95-
9698 _ , err = kubeclient .CoreV1 ().ServiceAccounts (objectMeta .Namespace ).Create (ctx , expected , metav1.CreateOptions {})
9799 if err != nil {
98- return fmt .Errorf ("could not create OIDC service account %s/%s for %s: %w" , objectMeta .Name , objectMeta .Namespace , gvk .Kind , err )
100+ return fmt .Errorf ("could not create OIDC service account %s/%s for %s: %w" , objectMeta .Namespace , objectMeta .Name , gvk .Kind , err )
99101 }
100102
101103 return nil
102104 }
103-
104105 if err != nil {
105- return fmt .Errorf ("could not get OIDC service account %s/%s for %s: %w" , objectMeta .Name , objectMeta .Namespace , gvk .Kind , err )
106+ return fmt .Errorf ("could not get OIDC service account %s/%s for %s: %w" , objectMeta .Namespace , objectMeta .Name , gvk .Kind , err )
106107 }
107-
108108 if ! metav1 .IsControlledBy (& sa .ObjectMeta , & objectMeta ) {
109109 return fmt .Errorf ("service account %s not owned by %s %s" , sa .Name , gvk .Kind , objectMeta .Name )
110110 }
111111
112+ if ! equality .Semantic .DeepDerivative (expected , sa ) {
113+ expected .ResourceVersion = sa .ResourceVersion
114+
115+ _ , err = kubeclient .CoreV1 ().ServiceAccounts (objectMeta .Namespace ).Update (ctx , expected , metav1.UpdateOptions {})
116+ if err != nil {
117+ return fmt .Errorf ("could not update OIDC service account %s/%s for %s: %w" , objectMeta .Namespace , objectMeta .Name , gvk .Kind , err )
118+ }
119+
120+ return nil
121+
122+ }
123+
112124 return nil
113125}
114126
0 commit comments