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 }