@@ -485,6 +485,51 @@ func (r *ReconcilerBase) GetRouteTLSValues(ba common.BaseComponent) (key string,
485485 return key , cert , ca , destCa , nil
486486}
487487
488+ func (r * ReconcilerBase ) checkCertificateReady (cert * certmanagerv1.Certificate ) error {
489+ err := r .GetClient ().Get (context .TODO (), types.NamespacedName {Name : cert .Name , Namespace : cert .Namespace }, cert )
490+ if err != nil {
491+ return err
492+ }
493+ isReady := false
494+ for _ , condition := range cert .Status .Conditions {
495+ if condition .Type == certmanagerv1 .CertificateConditionReady {
496+ if condition .Status == certmanagermetav1 .ConditionTrue {
497+ isReady = true
498+ }
499+ }
500+ }
501+ if ! isReady {
502+ return fmt .Errorf ("certificate %s is not ready" , cert .Name )
503+ }
504+ return nil
505+ }
506+
507+ func (r * ReconcilerBase ) checkIssuerReady (issuer * certmanagerv1.Issuer ) error {
508+ err := r .GetClient ().Get (context .TODO (), types.NamespacedName {Name : issuer .Name , Namespace : issuer .Namespace }, issuer )
509+ if err != nil {
510+ return err
511+ }
512+ isReady := false
513+ for _ , condition := range issuer .Status .Conditions {
514+ if condition .Type == certmanagerv1 .IssuerConditionReady {
515+ if condition .Status == certmanagermetav1 .ConditionTrue {
516+ isReady = true
517+ }
518+ }
519+ }
520+ if ! isReady {
521+ return fmt .Errorf ("issuer %s is not ready" , issuer .Name )
522+ }
523+ return nil
524+ }
525+
526+ func (r * ReconcilerBase ) checkSecretExists (secretName , secretNamespace string ) error {
527+ secret := & corev1.Secret {}
528+ secret .Name = secretName
529+ secret .Namespace = secretNamespace
530+ return r .GetClient ().Get (context .TODO (), types.NamespacedName {Name : secretName , Namespace : secretNamespace }, secret )
531+ }
532+
488533func (r * ReconcilerBase ) GenerateCMIssuer (namespace string , prefix string , CACommonName string , operatorName string ) error {
489534 if ok , err := r .IsGroupVersionSupported (certmanagerv1 .SchemeGroupVersion .String (), "Issuer" ); err != nil {
490535 return err
@@ -504,16 +549,21 @@ func (r *ReconcilerBase) GenerateCMIssuer(namespace string, prefix string, CACom
504549 if err != nil {
505550 return err
506551 }
552+ if err := r .checkIssuerReady (issuer ); err != nil {
553+ return err
554+ }
555+
507556 caCert := & certmanagerv1.Certificate {ObjectMeta : metav1.ObjectMeta {
508557 Name : prefix + "-ca-cert" ,
509558 Namespace : namespace ,
510559 }}
511560
561+ caCertSecretName := prefix + "-ca-tls"
512562 err = r .CreateOrUpdate (caCert , nil , func () error {
513563 caCert .Labels = MergeMaps (caCert .Labels , map [string ]string {"app.kubernetes.io/managed-by" : operatorName })
514564 caCert .Spec .CommonName = CACommonName
515565 caCert .Spec .IsCA = true
516- caCert .Spec .SecretName = prefix + "-ca-tls"
566+ caCert .Spec .SecretName = caCertSecretName
517567 caCert .Spec .IssuerRef = certmanagermetav1.ObjectReference {
518568 Name : prefix + "-self-signed" ,
519569 }
@@ -530,6 +580,7 @@ func (r *ReconcilerBase) GenerateCMIssuer(namespace string, prefix string, CACom
530580 if err != nil {
531581 return err
532582 }
583+
533584 CustomCACert := & corev1.Secret {ObjectMeta : metav1.ObjectMeta {
534585 Name : prefix + "-custom-ca-tls" ,
535586 Namespace : namespace ,
@@ -539,6 +590,14 @@ func (r *ReconcilerBase) GenerateCMIssuer(namespace string, prefix string, CACom
539590 Namespace : CustomCACert .GetNamespace ()}, CustomCACert )
540591 if err == nil {
541592 customCACertFound = true
593+ } else {
594+ // check CA Certificate and it's Secret exist before CA Issuer init
595+ if err := r .checkCertificateReady (caCert ); err != nil {
596+ return err
597+ }
598+ if err := r .checkSecretExists (caCertSecretName , namespace ); err != nil {
599+ return err
600+ }
542601 }
543602
544603 issuer = & certmanagerv1.Issuer {ObjectMeta : metav1.ObjectMeta {
@@ -548,7 +607,7 @@ func (r *ReconcilerBase) GenerateCMIssuer(namespace string, prefix string, CACom
548607 err = r .CreateOrUpdate (issuer , nil , func () error {
549608 issuer .Labels = MergeMaps (issuer .Labels , map [string ]string {"app.kubernetes.io/managed-by" : operatorName })
550609 issuer .Spec .CA = & certmanagerv1.CAIssuer {}
551- issuer .Spec .CA .SecretName = prefix + "-ca-tls"
610+ issuer .Spec .CA .SecretName = caCertSecretName
552611 if issuer .Annotations == nil {
553612 issuer .Annotations = map [string ]string {}
554613 }
@@ -574,7 +633,6 @@ func (r *ReconcilerBase) GenerateCMIssuer(namespace string, prefix string, CACom
574633}
575634
576635func (r * ReconcilerBase ) GenerateSvcCertSecret (ba common.BaseComponent , prefix string , CACommonName string , operatorName string ) (bool , error ) {
577-
578636 delete (ba .GetStatus ().GetReferences (), common .StatusReferenceCertSecretName )
579637 cleanup := func () {
580638 if ok , err := r .IsGroupVersionSupported (certmanagerv1 .SchemeGroupVersion .String (), "Certificate" ); err != nil {
0 commit comments