@@ -85,6 +85,8 @@ func AreSecretHashesInSync(
8585 return true , "" , nil
8686 }
8787
88+ hashCache := map [string ]string {}
89+
8890 for i := range nodesetList .Items {
8991 item := & nodesetList .Items [i ]
9092
@@ -102,23 +104,28 @@ func AreSecretHashesInSync(
102104 }
103105
104106 for secretName , deployedHash := range secretHashes {
105- currentSecret := & corev1.Secret {}
106- err := c .Get (ctx , types.NamespacedName {
107- Name : secretName ,
108- Namespace : namespace ,
109- }, currentSecret )
110- if err != nil {
111- if k8s_errors .IsNotFound (err ) {
112- info := fmt .Sprintf ("nodeset %s/%s: deployed secret %s no longer exists" ,
113- item .GetNamespace (), item .GetName (), secretName )
114- return false , info , nil
107+ currentHash , ok := hashCache [secretName ]
108+ if ! ok {
109+ currentSecret := & corev1.Secret {}
110+ err := c .Get (ctx , types.NamespacedName {
111+ Name : secretName ,
112+ Namespace : namespace ,
113+ }, currentSecret )
114+ if err != nil {
115+ if k8s_errors .IsNotFound (err ) {
116+ info := fmt .Sprintf ("nodeset %s/%s: deployed secret %s no longer exists" ,
117+ item .GetNamespace (), item .GetName (), secretName )
118+ return false , info , nil
119+ }
120+ return false , "" , fmt .Errorf ("failed to get secret %s: %w" , secretName , err )
115121 }
116- return false , "" , fmt .Errorf ("failed to get secret %s: %w" , secretName , err )
117- }
118122
119- currentHash , hashErr := oko_secret .Hash (currentSecret )
120- if hashErr != nil {
121- return false , "" , fmt .Errorf ("failed to hash secret %s: %w" , secretName , hashErr )
123+ h , hashErr := oko_secret .Hash (currentSecret )
124+ if hashErr != nil {
125+ return false , "" , fmt .Errorf ("failed to hash secret %s: %w" , secretName , hashErr )
126+ }
127+ currentHash = h
128+ hashCache [secretName ] = currentHash
122129 }
123130
124131 if currentHash != deployedHash {
@@ -167,6 +174,9 @@ func IsSecretHashInSync(
167174 return false , "" , fmt .Errorf ("failed to list OpenStackDataPlaneNodeSets: %w" , err )
168175 }
169176
177+ var currentHash string
178+ var hashResolved bool
179+
170180 for i := range nodesetList .Items {
171181 item := & nodesetList .Items [i ]
172182
@@ -184,19 +194,23 @@ func IsSecretHashInSync(
184194 continue
185195 }
186196
187- currentSecret := & corev1.Secret {}
188- if err := c .Get (ctx , types.NamespacedName {Name : secretName , Namespace : namespace }, currentSecret ); err != nil {
189- if k8s_errors .IsNotFound (err ) {
190- info := fmt .Sprintf ("nodeset %s/%s: deployed secret %s no longer exists" ,
191- item .GetNamespace (), item .GetName (), secretName )
192- return false , info , nil
197+ if ! hashResolved {
198+ currentSecret := & corev1.Secret {}
199+ if err := c .Get (ctx , types.NamespacedName {Name : secretName , Namespace : namespace }, currentSecret ); err != nil {
200+ if k8s_errors .IsNotFound (err ) {
201+ info := fmt .Sprintf ("nodeset %s/%s: deployed secret %s no longer exists" ,
202+ item .GetNamespace (), item .GetName (), secretName )
203+ return false , info , nil
204+ }
205+ return false , "" , fmt .Errorf ("failed to get secret %s: %w" , secretName , err )
193206 }
194- return false , "" , fmt .Errorf ("failed to get secret %s: %w" , secretName , err )
195- }
196207
197- currentHash , hashErr := oko_secret .Hash (currentSecret )
198- if hashErr != nil {
199- return false , "" , fmt .Errorf ("failed to hash secret %s: %w" , secretName , hashErr )
208+ h , hashErr := oko_secret .Hash (currentSecret )
209+ if hashErr != nil {
210+ return false , "" , fmt .Errorf ("failed to hash secret %s: %w" , secretName , hashErr )
211+ }
212+ currentHash = h
213+ hashResolved = true
200214 }
201215
202216 if currentHash != deployedHash {
0 commit comments