@@ -27,6 +27,7 @@ import (
2727 "sigs.k8s.io/controller-runtime/pkg/client"
2828
2929 workloads "github.com/apecloud/kubeblocks/apis/workloads/v1"
30+ "github.com/apecloud/kubeblocks/pkg/constant"
3031 "github.com/apecloud/kubeblocks/pkg/controller/instancetemplate"
3132 "github.com/apecloud/kubeblocks/pkg/controller/kubebuilderx"
3233 "github.com/apecloud/kubeblocks/pkg/controller/model"
@@ -74,12 +75,26 @@ func (r *revisionUpdateReconciler) Reconcile(tree *kubebuilderx.ObjectTree) (kub
7475
7576 // build instance revision list from instance templates
7677 var instanceRevisionList []instanceRevision
78+ proposedRevisions := make (map [string ]string )
7779 for instanceName , templateExt := range nameMap {
78- revision , err := buildInstanceTemplateRevision (& templateExt .PodTemplateSpec , its )
80+ updatedRevision , err := buildInstanceTemplateRevision (& templateExt .PodTemplateSpec , its , nil )
7981 if err != nil {
8082 return kubebuilderx .Continue , err
8183 }
82- instanceRevisionList = append (instanceRevisionList , instanceRevision {name : instanceName , revision : revision })
84+
85+ proposedRevision , err := buildInstanceTemplateRevision (& templateExt .PodTemplateSpec , its , func (template * corev1.PodTemplateSpec ) {
86+ newSAName , ok := its .Annotations [constant .ProposedServiceAccountNameAnnotationKey ]
87+ if ok {
88+ template .Spec .ServiceAccountName = newSAName
89+ }
90+ })
91+ if err != nil {
92+ return kubebuilderx .Continue , err
93+ }
94+ if proposedRevision != updatedRevision {
95+ proposedRevisions [instanceName ] = proposedRevision
96+ }
97+ instanceRevisionList = append (instanceRevisionList , instanceRevision {name : instanceName , revision : updatedRevision })
8398 }
8499 updatedRevisions := make (map [string ]string , len (instanceRevisionList ))
85100 for _ , r := range instanceRevisionList {
@@ -92,6 +107,11 @@ func (r *revisionUpdateReconciler) Reconcile(tree *kubebuilderx.ObjectTree) (kub
92107 return kubebuilderx .Continue , err
93108 }
94109 its .Status .UpdateRevisions = revisions
110+ proposedRevisions , err = buildRevisions (proposedRevisions )
111+ if err != nil {
112+ return kubebuilderx .Continue , err
113+ }
114+ its .Status .ProposedRevisions = proposedRevisions
95115 updateRevision := ""
96116 if len (instanceRevisionList ) > 0 {
97117 updateRevision = instanceRevisionList [len (instanceRevisionList )- 1 ].revision
0 commit comments