4
4
"context"
5
5
"fmt"
6
6
"log"
7
+ "time"
7
8
8
9
cnoclient "github.com/openshift/cluster-network-operator/pkg/client"
9
10
"github.com/openshift/cluster-network-operator/pkg/controller/statusmanager"
@@ -251,7 +252,7 @@ func signerFailure(r *ReconcileCSR, csr *csrv1.CertificateSigningRequest, reason
251
252
252
253
// Update the status conditions on the CSR object
253
254
func updateCSRStatusConditions (r * ReconcileCSR , csr * csrv1.CertificateSigningRequest , reason string , message string ) {
254
- csr . Status . Conditions = append ( csr .Status .Conditions , csrv1.CertificateSigningRequestCondition {
255
+ setCertificateSigningRequestCondition ( & csr .Status .Conditions , csrv1.CertificateSigningRequestCondition {
255
256
Type : csrv1 .CertificateFailed ,
256
257
Status : "True" ,
257
258
Reason : reason ,
@@ -264,3 +265,24 @@ func updateCSRStatusConditions(r *ReconcileCSR, csr *csrv1.CertificateSigningReq
264
265
fmt .Sprintf ("Unable to update csr: %v" , err ))
265
266
}
266
267
}
268
+
269
+ func setCertificateSigningRequestCondition (conditions * []csrv1.CertificateSigningRequestCondition , newCondition csrv1.CertificateSigningRequestCondition ) {
270
+ if conditions == nil {
271
+ conditions = & []csrv1.CertificateSigningRequestCondition {}
272
+ }
273
+ var existingCondition * csrv1.CertificateSigningRequestCondition
274
+ for i := range * conditions {
275
+ if (* conditions )[i ].Type == newCondition .Type {
276
+ existingCondition = & (* conditions )[i ]
277
+ }
278
+ }
279
+ if existingCondition == nil {
280
+ newCondition .LastTransitionTime = metav1 .NewTime (time .Now ())
281
+ * conditions = append (* conditions , newCondition )
282
+ return
283
+ }
284
+ existingCondition .Status = newCondition .Status
285
+ existingCondition .Reason = newCondition .Reason
286
+ existingCondition .Message = newCondition .Message
287
+ existingCondition .LastTransitionTime = metav1 .NewTime (time .Now ())
288
+ }
0 commit comments