github.com/olli-ai/jx/v2@v2.0.400-0.20210921045218-14731b4dd448/pkg/cmd/opts/cert_manager.go (about)

     1  package opts
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/jenkins-x/jx-logging/pkg/log"
     7  	"github.com/olli-ai/jx/v2/pkg/helm"
     8  	"github.com/olli-ai/jx/v2/pkg/kube"
     9  	"github.com/olli-ai/jx/v2/pkg/kube/pki"
    10  	"github.com/olli-ai/jx/v2/pkg/util"
    11  	"github.com/pkg/errors"
    12  )
    13  
    14  // jxInstallCertManagerVersion is the locked cert-manager version to use for the old jenkins x install method
    15  const jxInstallCertManagerVersion = "0.9.1"
    16  
    17  // EnsureCertManager ensures cert-manager is installed
    18  func (o *CommonOptions) EnsureCertManager() error {
    19  	log.Logger().Infof("Looking for %q deployment in namespace %q...", pki.CertManagerDeployment, pki.CertManagerNamespace)
    20  	client, err := o.KubeClient()
    21  	if err != nil {
    22  		return errors.Wrap(err, "creating kube client")
    23  	}
    24  	_, err = kube.GetDeploymentPods(client, pki.CertManagerDeployment, pki.CertManagerNamespace)
    25  	if err != nil {
    26  		ok := true
    27  		if !o.BatchMode {
    28  			ok, err = util.Confirm(
    29  				"CertManager deployment not found, shall we install it now?",
    30  				true,
    31  				"CertManager automatically configures Ingress rules with TLS using signed certificates from LetsEncrypt",
    32  				o.GetIOFileHandles())
    33  			if err != nil {
    34  				return err
    35  			}
    36  		}
    37  		if ok {
    38  			log.Logger().Info("Installing cert-manager...")
    39  			log.Logger().Infof("Installing CRDs from %q...", pki.CertManagerCRDsFile)
    40  			output, err := o.ResourcesInstaller().Install(pki.CertManagerCRDsFile)
    41  			if err != nil {
    42  				return errors.Wrapf(err, "installing the cert-manager CRDs from %q", pki.CertManagerCRDsFile)
    43  			}
    44  			log.Logger().Info(output)
    45  
    46  			log.Logger().Infof("Ensuring helm repo %q at %q for cert-manager chart is configured", pki.CertManagerChartOwner,
    47  				pki.CertManagerChartURL)
    48  			o.SetHelm(o.Helm())
    49  			err = o.helm.AddRepo(pki.CertManagerChartOwner, pki.CertManagerChartURL, "", "")
    50  			if err != nil {
    51  				return errors.Wrapf(err, "adding helm repo %q", pki.CertManagerChartOwner)
    52  			}
    53  
    54  			log.Logger().Infof("Installing the chart %q in namespace %q...", pki.CertManagerChart, pki.CertManagerNamespace)
    55  			values := []string{
    56  				"rbac.create=true",
    57  				"webhook.enabled=false",
    58  				"ingressShim.defaultIssuerName=letsencrypt-staging",
    59  				"ingressShim.defaultIssuerKind=Issuer"}
    60  
    61  			err = o.InstallChartWithOptions(helm.InstallChartOptions{
    62  				ReleaseName: pki.CertManagerReleaseName,
    63  				Chart:       pki.CertManagerChart,
    64  				Version:     jxInstallCertManagerVersion,
    65  				Ns:          pki.CertManagerNamespace,
    66  				HelmUpdate:  true,
    67  				SetValues:   values,
    68  			})
    69  			if err != nil {
    70  				return errors.Wrapf(err, "installing %q chart", pki.CertManagerChart)
    71  			}
    72  
    73  			log.Logger().Info("Waiting for CertManager deployment to be ready, this can take a few minutes")
    74  
    75  			err = kube.WaitForDeploymentToBeReady(client, pki.CertManagerDeployment, pki.CertManagerNamespace, 10*time.Minute)
    76  			if err != nil {
    77  				return errors.Wrapf(err, "waiting for %q deployment", pki.CertManagerDeployment)
    78  			}
    79  		}
    80  	}
    81  	return nil
    82  }