@@ -166,17 +166,6 @@ func (rm *resourceManager) customUpdateTable(
166166 setSyncedCondition (desired , corev1 .ConditionFalse , & msg , nil )
167167 return desired , requeueWaitWhileCreating
168168 }
169- if isTableUpdating (latest ) {
170- msg := "table is currently being updated"
171- setSyncedCondition (desired , corev1 .ConditionFalse , & msg , nil )
172- return desired , requeueWaitWhileUpdating
173- }
174- if tableHasTerminalStatus (latest ) {
175- msg := "table is in '" + * latest .ko .Status .TableStatus + "' status"
176- setTerminalCondition (desired , corev1 .ConditionTrue , & msg , nil )
177- setSyncedCondition (desired , corev1 .ConditionTrue , nil , nil )
178- return desired , nil
179- }
180169
181170 // Merge in the information we read from the API call above to the copy of
182171 // the original Kubernetes object we passed to the function
@@ -188,10 +177,36 @@ func (rm *resourceManager) customUpdateTable(
188177 return nil , err
189178 }
190179 }
191- if ! delta .DifferentExcept ("Spec.Tags" ) {
180+
181+ // ResourcePolicy can be updated independently of table state
182+ if delta .DifferentAt ("Spec.ResourcePolicy" ) {
183+ if latest .ko .Status .ACKResourceMetadata == nil || latest .ko .Status .ACKResourceMetadata .ARN == nil {
184+ rlog .Debug ("skipping ResourcePolicy sync - table ARN not available yet" )
185+ return & resource {ko }, requeueWaitWhileCreating
186+ }
187+
188+ err = rm .syncResourcePolicy (ctx , desired , latest )
189+ if err != nil {
190+ return nil , fmt .Errorf ("cannot update table resource policy %v" , err )
191+ }
192+ }
193+
194+ if ! delta .DifferentExcept ("Spec.Tags" , "Spec.ResourcePolicy" ) {
192195 return & resource {ko }, nil
193196 }
194197
198+ if isTableUpdating (latest ) {
199+ msg := "table is currently being updated"
200+ setSyncedCondition (desired , corev1 .ConditionFalse , & msg , nil )
201+ return desired , requeueWaitWhileUpdating
202+ }
203+ if tableHasTerminalStatus (latest ) {
204+ msg := "table is in '" + * latest .ko .Status .TableStatus + "' status"
205+ setTerminalCondition (desired , corev1 .ConditionTrue , & msg , nil )
206+ setSyncedCondition (desired , corev1 .ConditionTrue , nil , nil )
207+ return desired , nil
208+ }
209+
195210 if delta .DifferentAt ("Spec.TimeToLive" ) {
196211 if err := rm .syncTTL (ctx , desired , latest ); err != nil {
197212 // Ignore "already disabled errors"
@@ -522,6 +537,15 @@ func (rm *resourceManager) setResourceAdditionalFields(
522537 } else {
523538 ko .Spec .ContinuousBackups = pitrSpec
524539 }
540+
541+ if ko .Status .ACKResourceMetadata != nil && ko .Status .ACKResourceMetadata .ARN != nil {
542+ policy , err := rm .getResourcePolicyWithContext (ctx , (* string )(ko .Status .ACKResourceMetadata .ARN ))
543+ if err != nil {
544+ return err
545+ }
546+ ko .Spec .ResourcePolicy = policy
547+ }
548+
525549 return nil
526550}
527551
@@ -670,6 +694,7 @@ func customPreCompare(
670694 delta .Add ("Spec.ContributorInsights" , a .ko .Spec .ContributorInsights , b .ko .Spec .ContributorInsights )
671695 }
672696 }
697+ compareResourcePolicyDocument (delta , a , b )
673698
674699}
675700
0 commit comments