@@ -95,12 +95,58 @@ var _ = Describe("instance util test", func() {
9595 })
9696 })
9797
98+ Context ("container image comparison" , func () {
99+ It ("ignores registry rewrites but keeps tag, digest, and basename strict" , func () {
100+ oldPod := buildRandomPod ()
101+ newPod := oldPod .DeepCopy ()
102+ oldPod .Spec .Containers [0 ].Image = "172.31.255.3:5000/apecloud/redis:8.4.0"
103+ newPod .Spec .Containers [0 ].Image = "192.168.173.140:6451/apecloud/redis:8.4.0"
104+ oldPod .Spec .InitContainers [0 ].Image = "172.31.255.3:5000/apecloud/kbagent:1.0.3-beta.5"
105+ newPod .Spec .InitContainers [0 ].Image = "192.168.173.140:6451/apecloud/kbagent:1.0.3-beta.5"
106+
107+ its := builder .NewInstanceSetBuilder (namespace , name ).
108+ SetPodUpdatePolicy (kbappsv1 .ReCreatePodUpdatePolicyType ).
109+ SetPodUpgradePolicy (kbappsv1 .PreferInPlacePodUpdatePolicyType ).
110+ GetObject ()
111+
112+ Expect (equalBasicInPlaceFields (oldPod , newPod )).Should (BeTrue ())
113+ Expect (getPodUpdatePolicyInSpec (its , oldPod , newPod )).Should (Equal (kbappsv1 .ReCreatePodUpdatePolicyType ))
114+
115+ By ("tag mismatch" )
116+ tagChangedPod := newPod .DeepCopy ()
117+ tagChangedPod .Spec .Containers [0 ].Image = "192.168.173.140:6451/apecloud/redis:8.4.1"
118+ Expect (equalBasicInPlaceFields (oldPod , tagChangedPod )).Should (BeFalse ())
119+ Expect (getPodUpdatePolicyInSpec (its , oldPod , tagChangedPod )).Should (Equal (kbappsv1 .PreferInPlacePodUpdatePolicyType ))
120+
121+ By ("init container tag mismatch" )
122+ initTagChangedPod := newPod .DeepCopy ()
123+ initTagChangedPod .Spec .InitContainers [0 ].Image = "192.168.173.140:6451/apecloud/kbagent:1.0.3-beta.6"
124+ Expect (equalBasicInPlaceFields (oldPod , initTagChangedPod )).Should (BeFalse ())
125+ Expect (getPodUpdatePolicyInSpec (its , oldPod , initTagChangedPod )).Should (Equal (kbappsv1 .PreferInPlacePodUpdatePolicyType ))
126+
127+ By ("digest mismatch" )
128+ digestChangedPod := newPod .DeepCopy ()
129+ oldPod .Spec .Containers [0 ].Image = "172.31.255.3:5000/apecloud/redis:8.4.0@sha256:old"
130+ digestChangedPod .Spec .Containers [0 ].Image = "192.168.173.140:6451/apecloud/redis:8.4.0@sha256:new"
131+ Expect (equalBasicInPlaceFields (oldPod , digestChangedPod )).Should (BeFalse ())
132+ Expect (getPodUpdatePolicyInSpec (its , oldPod , digestChangedPod )).Should (Equal (kbappsv1 .PreferInPlacePodUpdatePolicyType ))
133+
134+ By ("basename mismatch" )
135+ basenameChangedPod := newPod .DeepCopy ()
136+ oldPod .Spec .Containers [0 ].Image = "172.31.255.3:5000/apecloud/redis:8.4.0"
137+ basenameChangedPod .Spec .Containers [0 ].Image = "192.168.173.140:6451/apecloud/redis-stack:8.4.0"
138+ Expect (equalBasicInPlaceFields (oldPod , basenameChangedPod )).Should (BeFalse ())
139+ Expect (getPodUpdatePolicyInSpec (its , oldPod , basenameChangedPod )).Should (Equal (kbappsv1 .PreferInPlacePodUpdatePolicyType ))
140+ })
141+ })
142+
98143 Context ("getPodUpdatePolicy" , func () {
99144 It ("should work well" , func () {
100145 By ("build an updated pod" )
101146 randStr := rand .String (16 )
102147 key := randStr
103148 podTemplate := template .DeepCopy ()
149+ podTemplate .Spec .Containers [0 ].Image = "192.168.173.140:6451/apecloud/redis:8.4.0"
104150 mergeMap (& map [string ]string {key : randStr }, & podTemplate .Annotations )
105151 mergeMap (& map [string ]string {key : randStr }, & podTemplate .Labels )
106152 its = builder .NewInstanceSetBuilder (namespace , name ).
@@ -146,6 +192,14 @@ var _ = Describe("instance util test", func() {
146192 Expect (policy ).Should (Equal (noOpsPolicy ))
147193 Expect (specPolicy ).Should (Equal (kbappsv1 .PodUpdatePolicyType ("" )))
148194
195+ By ("build a pod with registry rewritten by admission" )
196+ podWithRewrittenRegistry := pod1 .DeepCopy ()
197+ podWithRewrittenRegistry .Spec .Containers [0 ].Image = "172.31.255.3:5000/apecloud/redis:8.4.0"
198+ policy , specPolicy , err = getPodUpdatePolicy (its , podWithRewrittenRegistry )
199+ Expect (err ).Should (BeNil ())
200+ Expect (policy ).Should (Equal (noOpsPolicy ))
201+ Expect (specPolicy ).Should (Equal (kbappsv1 .PodUpdatePolicyType ("" )))
202+
149203 By ("build a pod with revision updated" )
150204 pod2 := pod1 .DeepCopy ()
151205 pod2 .Spec .Containers = append (pod2 .Spec .Containers , corev1.Container {
0 commit comments