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  }