github.com/verrazzano/verrazzano@v1.7.1/tests/e2e/update/a-la-carte/a_la_carte_test.go (about) 1 // Copyright (c) 2023, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package alacarte 5 6 import ( 7 "fmt" 8 "github.com/verrazzano/verrazzano/tests/e2e/pkg/update" 9 apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" 10 "os" 11 "time" 12 13 . "github.com/onsi/ginkgo/v2" 14 . "github.com/onsi/gomega" 15 vzapi "github.com/verrazzano/verrazzano/platform-operator/apis/verrazzano/v1alpha1" 16 "github.com/verrazzano/verrazzano/tests/e2e/pkg/test/framework" 17 ) 18 19 const ( 20 waitTimeout = 30 * time.Minute 21 pollingInterval = 10 * time.Second 22 ) 23 24 const ( 25 promEdgeStack = "prom-edge-stack" 26 appStack = "app-stack" 27 istioAppStack = "istio-app-stack" 28 clusterManagementStack = "cluster-management-stack" 29 noneProfile = "none-profile" 30 31 ocidnsType = "ocidns" 32 letsEncryptType = "letsEncrypt" 33 34 ociConfigSecretName = "oci" 35 dnsZoneCompartmentOCIDEnvvar = "OCI_ZONE_COMPARTMENT_ID" 36 dnsZoneOCIDEnvvar = "DNS_ZONE_OCID" 37 dnsZoneNameEnvvar = "OCI_DNS_ZONE_NAME" 38 ) 39 40 var ( 41 t = framework.NewTestFramework("a_la_carte") 42 trueVal = true 43 falseVal = false 44 ) 45 46 var failed = false 47 var _ = t.AfterEach(func() { 48 failed = failed || CurrentSpecReport().Failed() 49 }) 50 51 type prometheusEdgeStackModifier struct { 52 } 53 54 type appStackModifier struct { 55 } 56 57 type istioAppStackModifier struct { 58 } 59 60 type clusterManagementStackModifier struct { 61 } 62 63 type noneModifier struct { 64 } 65 66 func (m prometheusEdgeStackModifier) ModifyCR(cr *vzapi.Verrazzano) { 67 cr.Spec.Components.PrometheusOperator = &vzapi.PrometheusOperatorComponent{Enabled: &trueVal} 68 cr.Spec.Components.Prometheus = &vzapi.PrometheusComponent{Enabled: &trueVal} 69 cr.Spec.Components.PrometheusNodeExporter = &vzapi.PrometheusNodeExporterComponent{Enabled: &trueVal} 70 cr.Spec.Components.PrometheusAdapter = &vzapi.PrometheusAdapterComponent{Enabled: &trueVal} 71 cr.Spec.Components.PrometheusPushgateway = &vzapi.PrometheusPushgatewayComponent{Enabled: &trueVal} 72 cr.Spec.Components.KubeStateMetrics = &vzapi.KubeStateMetricsComponent{Enabled: &trueVal} 73 } 74 75 func (m appStackModifier) ModifyCR(cr *vzapi.Verrazzano) { 76 cr.Spec.Components.PrometheusNodeExporter = &vzapi.PrometheusNodeExporterComponent{Enabled: &falseVal} 77 cr.Spec.Components.PrometheusAdapter = &vzapi.PrometheusAdapterComponent{Enabled: &falseVal} 78 cr.Spec.Components.PrometheusPushgateway = &vzapi.PrometheusPushgatewayComponent{Enabled: &falseVal} 79 cr.Spec.Components.KubeStateMetrics = &vzapi.KubeStateMetricsComponent{Enabled: &falseVal} 80 81 cr.Spec.Components.ApplicationOperator = &vzapi.ApplicationOperatorComponent{Enabled: &trueVal} 82 cr.Spec.Components.AuthProxy = &vzapi.AuthProxyComponent{Enabled: &trueVal} 83 cr.Spec.Components.ClusterIssuer = &vzapi.ClusterIssuerComponent{Enabled: &trueVal} 84 cr.Spec.Components.Fluentd = &vzapi.FluentdComponent{Enabled: &trueVal} 85 cr.Spec.Components.Grafana = &vzapi.GrafanaComponent{Enabled: &trueVal} 86 cr.Spec.Components.Ingress = &vzapi.IngressNginxComponent{Enabled: &trueVal} 87 cr.Spec.Components.Keycloak = &vzapi.KeycloakComponent{Enabled: &trueVal} 88 cr.Spec.Components.MySQLOperator = &vzapi.MySQLOperatorComponent{Enabled: &trueVal} 89 cr.Spec.Components.OpenSearchOperator = &vzapi.OpenSearchOperatorComponent{Enabled: &trueVal} 90 cr.Spec.Components.Elasticsearch = &vzapi.ElasticsearchComponent{Enabled: &trueVal} 91 cr.Spec.Components.Kibana = &vzapi.KibanaComponent{Enabled: &trueVal} 92 cr.Spec.Components.OAM = &vzapi.OAMComponent{Enabled: &trueVal} 93 cr.Spec.Components.Verrazzano = &vzapi.VerrazzanoComponent{Enabled: &trueVal} 94 cr.Spec.Components.JaegerOperator = &vzapi.JaegerOperatorComponent{Enabled: &trueVal} 95 if dnsType == ocidnsType { 96 cr.Spec.Components.DNS = &vzapi.DNSComponent{ 97 OCI: &vzapi.OCI{ 98 DNSZoneCompartmentOCID: os.Getenv(dnsZoneCompartmentOCIDEnvvar), 99 DNSZoneOCID: os.Getenv(dnsZoneOCIDEnvvar), 100 DNSZoneName: os.Getenv(dnsZoneNameEnvvar), 101 OCIConfigSecret: ociConfigSecretName, 102 }, 103 } 104 } 105 106 cr.Spec.Components.CertManager = &vzapi.CertManagerComponent{Enabled: &falseVal} 107 108 clusterIssuer := &vzapi.ClusterIssuerComponent{ 109 ClusterResourceNamespace: clusterResourceNamespace, 110 } 111 if certificateType == letsEncryptType { 112 clusterIssuer.LetsEncrypt = &vzapi.LetsEncryptACMEIssuer{ 113 EmailAddress: "jane.doe@mycompany.com", 114 Environment: "staging", 115 } 116 } 117 cr.Spec.Components.ClusterIssuer = clusterIssuer 118 119 cr.Spec.Components.CertManagerWebhookOCI = &vzapi.CertManagerWebhookOCIComponent{ 120 InstallOverrides: vzapi.InstallOverrides{ 121 ValueOverrides: []vzapi.Overrides{ 122 { 123 Values: &apiextensionsv1.JSON{ 124 Raw: []byte(fmt.Sprintf(`{ 125 "certManager": { 126 "namespace": "my-cert-manager", 127 "clusterResourceNamespace": "%s" 128 }}`, clusterResourceNamespace)), 129 }, 130 }, 131 }, 132 }, 133 } 134 } 135 136 func (m istioAppStackModifier) ModifyCR(cr *vzapi.Verrazzano) { 137 cr.Spec.Components.Istio = &vzapi.IstioComponent{Enabled: &trueVal} 138 cr.Spec.Components.Kiali = &vzapi.KialiComponent{Enabled: &trueVal} 139 } 140 141 func (m clusterManagementStackModifier) ModifyCR(cr *vzapi.Verrazzano) { 142 cr.Spec.Components.ArgoCD = &vzapi.ArgoCDComponent{Enabled: &trueVal} 143 cr.Spec.Components.CoherenceOperator = &vzapi.CoherenceOperatorComponent{Enabled: &trueVal} 144 cr.Spec.Components.ClusterOperator = &vzapi.ClusterOperatorComponent{Enabled: &trueVal} 145 cr.Spec.Components.Console = &vzapi.ConsoleComponent{Enabled: &trueVal} 146 cr.Spec.Components.Rancher = &vzapi.RancherComponent{Enabled: &trueVal} 147 cr.Spec.Components.RancherBackup = &vzapi.RancherBackupComponent{Enabled: &trueVal} 148 cr.Spec.Components.Velero = &vzapi.VeleroComponent{Enabled: &trueVal} 149 cr.Spec.Components.WebLogicOperator = &vzapi.WebLogicOperatorComponent{Enabled: &trueVal} 150 } 151 152 func (m noneModifier) ModifyCR(cr *vzapi.Verrazzano) { 153 cr.Spec.Components.PrometheusOperator = &vzapi.PrometheusOperatorComponent{Enabled: &falseVal} 154 cr.Spec.Components.Prometheus = &vzapi.PrometheusComponent{Enabled: &falseVal} 155 } 156 157 var beforeSuite = t.BeforeSuiteFunc(func() { 158 Expect(getModifer(updateType)).ToNot(BeNil(), fmt.Sprintf("Provided update type %s was not a supported update type", updateType)) 159 }) 160 161 var _ = BeforeSuite(beforeSuite) 162 163 var _ = t.Describe("Updating a la carte configuration", func() { 164 t.It(fmt.Sprintf("to the %s and waiting for Verrazzano to become ready", updateType), func() { 165 modifier := getModifer(updateType) 166 if modifier == nil { 167 AbortSuite(fmt.Sprintf("Unsupported modifier %s", updateType)) 168 } 169 update.UpdateCRWithRetries(modifier, pollingInterval, waitTimeout) 170 }) 171 }) 172 173 func getModifer(updateType string) update.CRModifier { 174 switch updateType { 175 case promEdgeStack: 176 return prometheusEdgeStackModifier{} 177 case appStack: 178 return appStackModifier{} 179 case istioAppStack: 180 return istioAppStackModifier{} 181 case clusterManagementStack: 182 return clusterManagementStackModifier{} 183 case noneProfile: 184 return noneModifier{} 185 default: 186 return nil 187 } 188 }