github.com/verrazzano/verrazzano@v1.7.1/pkg/vzcr/enabled.go (about)

     1  // Copyright (c) 2021, 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 vzcr
     5  
     6  import (
     7  	"fmt"
     8  	"strings"
     9  
    10  	"k8s.io/apimachinery/pkg/runtime"
    11  
    12  	installv1alpha1 "github.com/verrazzano/verrazzano/platform-operator/apis/verrazzano/v1alpha1"
    13  	installv1beta1 "github.com/verrazzano/verrazzano/platform-operator/apis/verrazzano/v1beta1"
    14  	"github.com/verrazzano/verrazzano/platform-operator/controllers/verrazzano/component/common/override"
    15  	"github.com/verrazzano/verrazzano/platform-operator/controllers/verrazzano/component/spi"
    16  )
    17  
    18  // IsPrometheusEnabled - Returns false only if explicitly disabled in the CR
    19  func IsPrometheusEnabled(cr runtime.Object) bool {
    20  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
    21  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.Prometheus != nil && vzv1alpha1.Spec.Components.Prometheus.Enabled != nil {
    22  			return *vzv1alpha1.Spec.Components.Prometheus.Enabled
    23  		}
    24  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
    25  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.Prometheus != nil && vzv1beta1.Spec.Components.Prometheus.Enabled != nil {
    26  			return *vzv1beta1.Spec.Components.Prometheus.Enabled
    27  		}
    28  	}
    29  	return true
    30  }
    31  
    32  // IsOpenSearchDashboardsEnabled - Returns false only if explicitly disabled in the CR
    33  func IsOpenSearchDashboardsEnabled(cr runtime.Object) bool {
    34  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
    35  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.Kibana != nil && vzv1alpha1.Spec.Components.Kibana.Enabled != nil {
    36  			return *vzv1alpha1.Spec.Components.Kibana.Enabled
    37  		}
    38  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
    39  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.OpenSearchDashboards != nil && vzv1beta1.Spec.Components.OpenSearchDashboards.Enabled != nil {
    40  			return *vzv1beta1.Spec.Components.OpenSearchDashboards.Enabled
    41  		}
    42  	}
    43  	return true
    44  }
    45  
    46  // IsNGINXEnabled - Returns false only if explicitly disabled in the CR
    47  func IsNGINXEnabled(cr runtime.Object) bool {
    48  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
    49  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.Ingress != nil && vzv1alpha1.Spec.Components.Ingress.Enabled != nil {
    50  			return *vzv1alpha1.Spec.Components.Ingress.Enabled
    51  		}
    52  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
    53  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.IngressNGINX != nil && vzv1beta1.Spec.Components.IngressNGINX.Enabled != nil {
    54  			return *vzv1beta1.Spec.Components.IngressNGINX.Enabled
    55  		}
    56  	}
    57  	return true
    58  }
    59  
    60  // IsIstioEnabled - Returns false only if explicitly disabled in the CR
    61  func IsIstioEnabled(cr runtime.Object) bool {
    62  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
    63  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.Istio != nil && vzv1alpha1.Spec.Components.Istio.Enabled != nil {
    64  			return *vzv1alpha1.Spec.Components.Istio.Enabled
    65  		}
    66  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
    67  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.Istio != nil && vzv1beta1.Spec.Components.Istio.Enabled != nil {
    68  			return *vzv1beta1.Spec.Components.Istio.Enabled
    69  		}
    70  	}
    71  
    72  	return true
    73  }
    74  
    75  // IsIstioInjectionEnabled - Returns false if either:
    76  //
    77  //	Istio is explicitly disabled in the CR OR
    78  //	Istio is enabled but injection is explicitly disabled in the CR
    79  func IsIstioInjectionEnabled(cr runtime.Object) bool {
    80  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
    81  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.Istio != nil && vzv1alpha1.Spec.Components.Istio.Enabled != nil {
    82  			return *vzv1alpha1.Spec.Components.Istio.Enabled && (vzv1alpha1.Spec.Components.Istio.InjectionEnabled == nil || *vzv1alpha1.Spec.Components.Istio.InjectionEnabled)
    83  		}
    84  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
    85  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.Istio != nil && vzv1beta1.Spec.Components.Istio.Enabled != nil {
    86  			return *vzv1beta1.Spec.Components.Istio.Enabled && (vzv1beta1.Spec.Components.Istio.InjectionEnabled == nil || *vzv1beta1.Spec.Components.Istio.InjectionEnabled)
    87  		}
    88  	}
    89  
    90  	return true
    91  }
    92  
    93  // IsClusterAPIEnabled - Returns false only if ClusterAPI is explicitly disabled by the user
    94  func IsClusterAPIEnabled(cr runtime.Object) bool {
    95  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
    96  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.ClusterAPI != nil && vzv1alpha1.Spec.Components.ClusterAPI.Enabled != nil {
    97  			return *vzv1alpha1.Spec.Components.ClusterAPI.Enabled
    98  		}
    99  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   100  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.ClusterAPI != nil && vzv1beta1.Spec.Components.ClusterAPI.Enabled != nil {
   101  			return *vzv1beta1.Spec.Components.ClusterAPI.Enabled
   102  		}
   103  	}
   104  	return true
   105  }
   106  
   107  // IsCertManagerEnabled - Returns false only if CertManager is explicitly disabled by the user
   108  func IsCertManagerEnabled(cr runtime.Object) bool {
   109  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   110  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.CertManager != nil && vzv1alpha1.Spec.Components.CertManager.Enabled != nil {
   111  			return *vzv1alpha1.Spec.Components.CertManager.Enabled
   112  		}
   113  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   114  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.CertManager != nil && vzv1beta1.Spec.Components.CertManager.Enabled != nil {
   115  			return *vzv1beta1.Spec.Components.CertManager.Enabled
   116  		}
   117  	}
   118  	return true
   119  }
   120  
   121  // IsClusterIssuerEnabled - Returns false only if the ClusterIssuerComponent is explicitly disabled
   122  func IsClusterIssuerEnabled(cr runtime.Object) bool {
   123  	if IsCertManagerEnabled(cr) {
   124  		return true
   125  	}
   126  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   127  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.ClusterIssuer != nil &&
   128  			vzv1alpha1.Spec.Components.ClusterIssuer.Enabled != nil {
   129  			return *vzv1alpha1.Spec.Components.ClusterIssuer.Enabled
   130  		}
   131  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   132  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.ClusterIssuer != nil &&
   133  			vzv1beta1.Spec.Components.ClusterIssuer.Enabled != nil {
   134  			return *vzv1beta1.Spec.Components.ClusterIssuer.Enabled
   135  		}
   136  	}
   137  	return true
   138  }
   139  
   140  // IsCertManagerWebhookOCIEnabled - Returns true IFF the ExternalCertManager component is explicitly enabled
   141  func IsCertManagerWebhookOCIEnabled(cr runtime.Object) bool {
   142  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   143  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.CertManagerWebhookOCI != nil &&
   144  			vzv1alpha1.Spec.Components.CertManagerWebhookOCI.Enabled != nil {
   145  			return *vzv1alpha1.Spec.Components.CertManagerWebhookOCI.Enabled
   146  		}
   147  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   148  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.CertManagerWebhookOCI != nil &&
   149  			vzv1beta1.Spec.Components.CertManagerWebhookOCI.Enabled != nil {
   150  			return *vzv1beta1.Spec.Components.CertManagerWebhookOCI.Enabled
   151  		}
   152  	}
   153  	return false
   154  }
   155  
   156  // IsCertManagerWebhookOCIRequired - Returns true if the ExternalCertManager component is explicitly enabled, OR
   157  // if all of the following is true:
   158  // - ACME/LetsEncrypt certificates are configured
   159  // - OCI DNS is enabled
   160  // - the ClusterIssuerComponent is enabled
   161  //
   162  // This behavior is to allow backwards compatibility with earlier releases where the behavior was not implemented in
   163  // a separate component, and was implicitly enabled by the other conditions
   164  func IsCertManagerWebhookOCIRequired(cr runtime.Object) bool {
   165  	isLetsEncryptConfig, _ := IsLetsEncryptConfig(cr)
   166  	return IsCertManagerWebhookOCIEnabled(cr) || IsOCIDNSEnabled(cr) && isLetsEncryptConfig && IsClusterIssuerEnabled(cr)
   167  }
   168  
   169  // IsLetsEncryptConfig - Check if cert-type is LetsEncrypt
   170  func IsLetsEncryptConfig(cr runtime.Object) (bool, error) {
   171  	if cr == nil {
   172  		return false, fmt.Errorf("Nil CR passed in")
   173  	}
   174  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   175  		componentSpec := vzv1alpha1.Spec.Components
   176  		if componentSpec.ClusterIssuer == nil {
   177  			return false, nil
   178  		}
   179  		return componentSpec.ClusterIssuer.IsLetsEncryptIssuer()
   180  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   181  		componentSpec := vzv1beta1.Spec.Components
   182  		if componentSpec.ClusterIssuer == nil {
   183  			return false, nil
   184  		}
   185  		return componentSpec.ClusterIssuer.IsLetsEncryptIssuer()
   186  	}
   187  	return false, fmt.Errorf("Illegal configuration state, unable to resolve ClusterIssuerComponent type: %v", cr)
   188  }
   189  
   190  // IsCAConfig - Check if cert-type is CA, if not it is assumed to be Acme
   191  func IsCAConfig(cr runtime.Object) (bool, error) {
   192  	if cr == nil {
   193  		return false, fmt.Errorf("Nil CR passed in")
   194  	}
   195  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   196  		componentSpec := vzv1alpha1.Spec.Components
   197  		if componentSpec.ClusterIssuer == nil {
   198  			return true, nil
   199  		}
   200  		return componentSpec.ClusterIssuer.IsCAIssuer()
   201  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   202  		componentSpec := vzv1beta1.Spec.Components
   203  		if componentSpec.ClusterIssuer == nil {
   204  			return true, nil
   205  		}
   206  		return componentSpec.ClusterIssuer.IsCAIssuer()
   207  	}
   208  	return false, fmt.Errorf("Illegal configuration state, unable to resolve ClusterIssuerComponent type: %v", cr)
   209  }
   210  
   211  // IsKialiEnabled - Returns false only if explicitly disabled in the CR
   212  func IsKialiEnabled(cr runtime.Object) bool {
   213  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   214  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.Kiali != nil && vzv1alpha1.Spec.Components.Kiali.Enabled != nil {
   215  			return *vzv1alpha1.Spec.Components.Kiali.Enabled
   216  		}
   217  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   218  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.Kiali != nil && vzv1beta1.Spec.Components.Kiali.Enabled != nil {
   219  			return *vzv1beta1.Spec.Components.Kiali.Enabled
   220  		}
   221  	}
   222  	return true
   223  }
   224  
   225  // IsOpenSearchEnabled - Returns false only if explicitly disabled in the CR
   226  func IsOpenSearchEnabled(cr runtime.Object) bool {
   227  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   228  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.Elasticsearch != nil && vzv1alpha1.Spec.Components.Elasticsearch.Enabled != nil {
   229  			return *vzv1alpha1.Spec.Components.Elasticsearch.Enabled
   230  		}
   231  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   232  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.OpenSearch != nil && vzv1beta1.Spec.Components.OpenSearch.Enabled != nil {
   233  			return *vzv1beta1.Spec.Components.OpenSearch.Enabled
   234  		}
   235  	}
   236  	return true
   237  }
   238  
   239  // IsGrafanaEnabled - Returns false only if explicitly disabled in the CR
   240  func IsGrafanaEnabled(cr runtime.Object) bool {
   241  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   242  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.Grafana != nil && vzv1alpha1.Spec.Components.Grafana.Enabled != nil {
   243  			return *vzv1alpha1.Spec.Components.Grafana.Enabled
   244  		}
   245  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   246  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.Grafana != nil && vzv1beta1.Spec.Components.Grafana.Enabled != nil {
   247  			return *vzv1beta1.Spec.Components.Grafana.Enabled
   248  		}
   249  	}
   250  	return true
   251  }
   252  
   253  // IsFluentdEnabled - Returns false only if explicitly disabled in the CR
   254  func IsFluentdEnabled(cr runtime.Object) bool {
   255  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   256  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.Fluentd != nil && vzv1alpha1.Spec.Components.Fluentd.Enabled != nil {
   257  			return *vzv1alpha1.Spec.Components.Fluentd.Enabled
   258  		}
   259  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   260  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.Fluentd != nil && vzv1beta1.Spec.Components.Fluentd.Enabled != nil {
   261  			return *vzv1beta1.Spec.Components.Fluentd.Enabled
   262  		}
   263  	}
   264  	return true
   265  }
   266  
   267  // IsFluentOperatorEnabled - Returns true IFF the FluentOperator component is explicitly enabled
   268  func IsFluentOperatorEnabled(cr runtime.Object) bool {
   269  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   270  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.FluentOperator != nil && vzv1alpha1.Spec.Components.FluentOperator.Enabled != nil {
   271  			return *vzv1alpha1.Spec.Components.FluentOperator.Enabled
   272  		}
   273  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   274  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.FluentOperator != nil && vzv1beta1.Spec.Components.FluentOperator.Enabled != nil {
   275  			return *vzv1beta1.Spec.Components.FluentOperator.Enabled
   276  		}
   277  	}
   278  	return false
   279  }
   280  
   281  // IsFluentbitOpensearchOutputEnabled - Returns true IFF the FluentbitOpensearchOutput component is explicitly enabled
   282  func IsFluentbitOpensearchOutputEnabled(cr runtime.Object) bool {
   283  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   284  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.FluentbitOpensearchOutput != nil && vzv1alpha1.Spec.Components.FluentbitOpensearchOutput.Enabled != nil {
   285  			return *vzv1alpha1.Spec.Components.FluentbitOpensearchOutput.Enabled
   286  		}
   287  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   288  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.FluentbitOpensearchOutput != nil && vzv1beta1.Spec.Components.FluentbitOpensearchOutput.Enabled != nil {
   289  			return *vzv1beta1.Spec.Components.FluentbitOpensearchOutput.Enabled
   290  		}
   291  	}
   292  	return false
   293  
   294  }
   295  
   296  // IsConsoleEnabled - Returns false only if explicitly disabled in the CR
   297  func IsConsoleEnabled(cr runtime.Object) bool {
   298  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   299  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.Console != nil && vzv1alpha1.Spec.Components.Console.Enabled != nil {
   300  			return *vzv1alpha1.Spec.Components.Console.Enabled
   301  		}
   302  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   303  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.Console != nil && vzv1beta1.Spec.Components.Console.Enabled != nil {
   304  			return *vzv1beta1.Spec.Components.Console.Enabled
   305  		}
   306  	}
   307  	return true
   308  }
   309  
   310  // IsKeycloakEnabled - Returns false only if explicitly disabled in the CR
   311  func IsKeycloakEnabled(cr runtime.Object) bool {
   312  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   313  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.Keycloak != nil && vzv1alpha1.Spec.Components.Keycloak.Enabled != nil {
   314  			return *vzv1alpha1.Spec.Components.Keycloak.Enabled
   315  		}
   316  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   317  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.Keycloak != nil && vzv1beta1.Spec.Components.Keycloak.Enabled != nil {
   318  			return *vzv1beta1.Spec.Components.Keycloak.Enabled
   319  		}
   320  	}
   321  	return true
   322  }
   323  
   324  // IsRancherEnabled - Returns false only if explicitly disabled in the CR
   325  func IsRancherEnabled(cr runtime.Object) bool {
   326  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   327  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.Rancher != nil && vzv1alpha1.Spec.Components.Rancher.Enabled != nil {
   328  			return *vzv1alpha1.Spec.Components.Rancher.Enabled
   329  		}
   330  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   331  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.Rancher != nil && vzv1beta1.Spec.Components.Rancher.Enabled != nil {
   332  			return *vzv1beta1.Spec.Components.Rancher.Enabled
   333  		}
   334  	}
   335  	return true
   336  }
   337  
   338  // IsExternalDNSEnabled Indicates if the external-dns service is expected to be deployed, true if OCI DNS is configured
   339  func IsExternalDNSEnabled(cr runtime.Object) bool {
   340  	return IsOCIDNSEnabled(cr)
   341  }
   342  
   343  // IsOCIDNSEnabled Returns true if OCI DNS is configured
   344  func IsOCIDNSEnabled(cr runtime.Object) bool {
   345  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   346  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.DNS != nil && vzv1alpha1.Spec.Components.DNS.OCI != nil {
   347  			return true
   348  		}
   349  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   350  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.DNS != nil && vzv1beta1.Spec.Components.DNS.OCI != nil {
   351  			return true
   352  		}
   353  	}
   354  	return false
   355  }
   356  
   357  // IsVMOEnabled - Returns false if all VMO components are disabled
   358  func IsVMOEnabled(vz runtime.Object) bool {
   359  	return IsOpenSearchDashboardsEnabled(vz) || IsOpenSearchEnabled(vz) || IsGrafanaEnabled(vz)
   360  }
   361  
   362  // IsPrometheusOperatorEnabled returns false only if the Prometheus Operator is explicitly disabled in the CR
   363  func IsPrometheusOperatorEnabled(cr runtime.Object) bool {
   364  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   365  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.PrometheusOperator != nil && vzv1alpha1.Spec.Components.PrometheusOperator.Enabled != nil {
   366  			return *vzv1alpha1.Spec.Components.PrometheusOperator.Enabled
   367  		}
   368  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   369  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.PrometheusOperator != nil && vzv1beta1.Spec.Components.PrometheusOperator.Enabled != nil {
   370  			return *vzv1beta1.Spec.Components.PrometheusOperator.Enabled
   371  		}
   372  	}
   373  	return true
   374  }
   375  
   376  // IsPrometheusAdapterEnabled returns true only if the Prometheus Adapter is explicitly enabled in the CR
   377  func IsPrometheusAdapterEnabled(cr runtime.Object) bool {
   378  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   379  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.PrometheusAdapter != nil && vzv1alpha1.Spec.Components.PrometheusAdapter.Enabled != nil {
   380  			return *vzv1alpha1.Spec.Components.PrometheusAdapter.Enabled
   381  		}
   382  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   383  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.PrometheusAdapter != nil && vzv1beta1.Spec.Components.PrometheusAdapter.Enabled != nil {
   384  			return *vzv1beta1.Spec.Components.PrometheusAdapter.Enabled
   385  		}
   386  	}
   387  	return false
   388  }
   389  
   390  // IsKubeStateMetricsEnabled returns true only if Kube State Metrics is explicitly enabled in the CR
   391  func IsKubeStateMetricsEnabled(cr runtime.Object) bool {
   392  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   393  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.KubeStateMetrics != nil && vzv1alpha1.Spec.Components.KubeStateMetrics.Enabled != nil {
   394  			return *vzv1alpha1.Spec.Components.KubeStateMetrics.Enabled
   395  		}
   396  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   397  		return *vzv1beta1.Spec.Components.KubeStateMetrics.Enabled
   398  	}
   399  	return false
   400  }
   401  
   402  // IsPrometheusPushgatewayEnabled returns true only if the Prometheus Pushgateway is explicitly enabled in the CR
   403  func IsPrometheusPushgatewayEnabled(cr runtime.Object) bool {
   404  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   405  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.PrometheusPushgateway != nil && vzv1alpha1.Spec.Components.PrometheusPushgateway.Enabled != nil {
   406  			return *vzv1alpha1.Spec.Components.PrometheusPushgateway.Enabled
   407  		}
   408  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   409  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.PrometheusPushgateway != nil && vzv1beta1.Spec.Components.PrometheusPushgateway.Enabled != nil {
   410  			return *vzv1beta1.Spec.Components.PrometheusPushgateway.Enabled
   411  		}
   412  	}
   413  	return false
   414  }
   415  
   416  // IsPrometheusNodeExporterEnabled returns false only if the Prometheus Node-Exporter is explicitly disabled in the CR
   417  func IsPrometheusNodeExporterEnabled(cr runtime.Object) bool {
   418  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   419  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.PrometheusNodeExporter != nil && vzv1alpha1.Spec.Components.PrometheusNodeExporter.Enabled != nil {
   420  			return *vzv1alpha1.Spec.Components.PrometheusNodeExporter.Enabled
   421  		}
   422  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   423  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.PrometheusNodeExporter != nil && vzv1beta1.Spec.Components.PrometheusNodeExporter.Enabled != nil {
   424  			return *vzv1beta1.Spec.Components.PrometheusNodeExporter.Enabled
   425  		}
   426  	}
   427  	return true
   428  }
   429  
   430  // IsJaegerOperatorEnabled returns true only if the Jaeger Operator is explicitly enabled in the CR
   431  func IsJaegerOperatorEnabled(cr runtime.Object) bool {
   432  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   433  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.JaegerOperator != nil && vzv1alpha1.Spec.Components.JaegerOperator.Enabled != nil {
   434  			return *vzv1alpha1.Spec.Components.JaegerOperator.Enabled
   435  		}
   436  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   437  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.JaegerOperator != nil && vzv1beta1.Spec.Components.JaegerOperator.Enabled != nil {
   438  			return *vzv1beta1.Spec.Components.JaegerOperator.Enabled
   439  		}
   440  	}
   441  	return false
   442  }
   443  
   444  // IsAuthProxyEnabled returns false only if Auth Proxy is explicitly disabled in the CR
   445  func IsAuthProxyEnabled(cr runtime.Object) bool {
   446  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   447  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.AuthProxy != nil && vzv1alpha1.Spec.Components.AuthProxy.Enabled != nil {
   448  			return *vzv1alpha1.Spec.Components.AuthProxy.Enabled
   449  		}
   450  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   451  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.AuthProxy != nil && vzv1beta1.Spec.Components.AuthProxy.Enabled != nil {
   452  			return *vzv1beta1.Spec.Components.AuthProxy.Enabled
   453  		}
   454  	}
   455  	return true
   456  }
   457  
   458  // IsApplicationOperatorEnabled returns false only if Application Operator is explicitly disabled in the CR
   459  func IsApplicationOperatorEnabled(cr runtime.Object) bool {
   460  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   461  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.ApplicationOperator != nil && vzv1alpha1.Spec.Components.ApplicationOperator.Enabled != nil {
   462  			return *vzv1alpha1.Spec.Components.ApplicationOperator.Enabled
   463  		}
   464  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   465  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.ApplicationOperator != nil && vzv1beta1.Spec.Components.ApplicationOperator.Enabled != nil {
   466  			return *vzv1beta1.Spec.Components.ApplicationOperator.Enabled
   467  		}
   468  	}
   469  	return true
   470  }
   471  
   472  // IsVeleroEnabled returns false unless Velero is not explicitly enabled in the CR
   473  func IsVeleroEnabled(cr runtime.Object) bool {
   474  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   475  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.Velero != nil && vzv1alpha1.Spec.Components.Velero.Enabled != nil {
   476  			return *vzv1alpha1.Spec.Components.Velero.Enabled
   477  		}
   478  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   479  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.Velero != nil && vzv1beta1.Spec.Components.Velero.Enabled != nil {
   480  			return *vzv1beta1.Spec.Components.Velero.Enabled
   481  		}
   482  	}
   483  	return false
   484  }
   485  
   486  // IsMySQLOperatorEnabled returns false if MySqlOperator is explicitly disabled in the CR
   487  func IsMySQLOperatorEnabled(cr runtime.Object) bool {
   488  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   489  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.MySQLOperator != nil && vzv1alpha1.Spec.Components.MySQLOperator.Enabled != nil {
   490  			return *vzv1alpha1.Spec.Components.MySQLOperator.Enabled
   491  		}
   492  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   493  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.MySQLOperator != nil && vzv1beta1.Spec.Components.MySQLOperator.Enabled != nil {
   494  			return *vzv1beta1.Spec.Components.MySQLOperator.Enabled
   495  		}
   496  	}
   497  	return true
   498  }
   499  
   500  // IsOAMEnabled returns false if OAM is explicitly disabled in the CR
   501  func IsOAMEnabled(cr runtime.Object) bool {
   502  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   503  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.OAM != nil && vzv1alpha1.Spec.Components.OAM.Enabled != nil {
   504  			return *vzv1alpha1.Spec.Components.OAM.Enabled
   505  		}
   506  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   507  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.OAM != nil && vzv1beta1.Spec.Components.OAM.Enabled != nil {
   508  			return *vzv1beta1.Spec.Components.OAM.Enabled
   509  		}
   510  	}
   511  	return true
   512  }
   513  
   514  // IsVerrazzanoComponentEnabled returns false if Verrazzano is explicitly disabled in the CR
   515  func IsVerrazzanoComponentEnabled(cr runtime.Object) bool {
   516  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   517  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.Verrazzano != nil && vzv1alpha1.Spec.Components.Verrazzano.Enabled != nil {
   518  			return *vzv1alpha1.Spec.Components.Verrazzano.Enabled
   519  		}
   520  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   521  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.Verrazzano != nil && vzv1beta1.Spec.Components.Verrazzano.Enabled != nil {
   522  			return *vzv1beta1.Spec.Components.Verrazzano.Enabled
   523  		}
   524  	}
   525  	return true
   526  }
   527  
   528  // IsClusterOperatorEnabled returns false only if Cluster Operator is explicitly disabled in the CR
   529  func IsClusterOperatorEnabled(cr runtime.Object) bool {
   530  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   531  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.ClusterOperator != nil && vzv1alpha1.Spec.Components.ClusterOperator.Enabled != nil {
   532  			return *vzv1alpha1.Spec.Components.ClusterOperator.Enabled
   533  		}
   534  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   535  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.ClusterOperator != nil && vzv1beta1.Spec.Components.ClusterOperator.Enabled != nil {
   536  			return *vzv1beta1.Spec.Components.ClusterOperator.Enabled
   537  		}
   538  	}
   539  	return true
   540  }
   541  
   542  // IsWebLogicOperatorEnabled returns false if WebLogicOperator is explicitly disabled in the CR
   543  func IsWebLogicOperatorEnabled(cr runtime.Object) bool {
   544  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   545  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.WebLogicOperator != nil && vzv1alpha1.Spec.Components.WebLogicOperator.Enabled != nil {
   546  			return *vzv1alpha1.Spec.Components.WebLogicOperator.Enabled
   547  		}
   548  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   549  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.WebLogicOperator != nil && vzv1beta1.Spec.Components.WebLogicOperator.Enabled != nil {
   550  			return *vzv1beta1.Spec.Components.WebLogicOperator.Enabled
   551  		}
   552  	}
   553  	return true
   554  }
   555  
   556  // IsCoherenceOperatorEnabled returns false if CoherenceOperator is explicitly disabled in the CR
   557  func IsCoherenceOperatorEnabled(cr runtime.Object) bool {
   558  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   559  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.CoherenceOperator != nil && vzv1alpha1.Spec.Components.CoherenceOperator.Enabled != nil {
   560  			return *vzv1alpha1.Spec.Components.CoherenceOperator.Enabled
   561  		}
   562  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   563  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.CoherenceOperator != nil && vzv1beta1.Spec.Components.CoherenceOperator.Enabled != nil {
   564  			return *vzv1beta1.Spec.Components.CoherenceOperator.Enabled
   565  		}
   566  	}
   567  	return true
   568  }
   569  
   570  // IsNodeExporterEnabled returns false if NodeExporter is explicitly disabled in the CR, or Prometheus is disabled in the CR
   571  func IsNodeExporterEnabled(cr runtime.Object) bool {
   572  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   573  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.PrometheusNodeExporter != nil && vzv1alpha1.Spec.Components.PrometheusNodeExporter.Enabled != nil {
   574  			return *vzv1alpha1.Spec.Components.PrometheusNodeExporter.Enabled
   575  		}
   576  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   577  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.PrometheusNodeExporter != nil && vzv1beta1.Spec.Components.PrometheusNodeExporter.Enabled != nil {
   578  			return *vzv1beta1.Spec.Components.PrometheusNodeExporter.Enabled
   579  		}
   580  	}
   581  	return IsPrometheusEnabled(cr)
   582  }
   583  
   584  // IsRancherBackupEnabled returns false unless RancherBackup is explicitly enabled in the CR
   585  func IsRancherBackupEnabled(cr runtime.Object) bool {
   586  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   587  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.RancherBackup != nil && vzv1alpha1.Spec.Components.RancherBackup.Enabled != nil {
   588  			return *vzv1alpha1.Spec.Components.RancherBackup.Enabled
   589  		}
   590  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   591  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.RancherBackup != nil && vzv1beta1.Spec.Components.RancherBackup.Enabled != nil {
   592  			return *vzv1beta1.Spec.Components.RancherBackup.Enabled
   593  		}
   594  	}
   595  	return false
   596  }
   597  
   598  // IsArgoCDEnabled returns false unless ArgoCD is explicitly enabled in the CR
   599  func IsArgoCDEnabled(cr runtime.Object) bool {
   600  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   601  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.ArgoCD != nil && vzv1alpha1.Spec.Components.ArgoCD.Enabled != nil {
   602  			return *vzv1alpha1.Spec.Components.ArgoCD.Enabled
   603  		}
   604  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   605  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.ArgoCD != nil && vzv1beta1.Spec.Components.ArgoCD.Enabled != nil {
   606  			return *vzv1beta1.Spec.Components.ArgoCD.Enabled
   607  		}
   608  	}
   609  	return false
   610  }
   611  
   612  // IsThanosEnabled returns true only if Thanos is explicitly enabled in the CR
   613  func IsThanosEnabled(cr runtime.Object) bool {
   614  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   615  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.Thanos != nil && vzv1alpha1.Spec.Components.Thanos.Enabled != nil {
   616  			return *vzv1alpha1.Spec.Components.Thanos.Enabled
   617  		}
   618  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   619  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.Thanos != nil && vzv1beta1.Spec.Components.Thanos.Enabled != nil {
   620  			return *vzv1beta1.Spec.Components.Thanos.Enabled
   621  		}
   622  	}
   623  	return false
   624  }
   625  
   626  // IsClusterAgentEnabled returns false only if Cluster Agent is explicitly disabled in the CR
   627  func IsClusterAgentEnabled(cr runtime.Object) bool {
   628  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   629  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.ClusterAgent != nil && vzv1alpha1.Spec.Components.ClusterAgent.Enabled != nil {
   630  			return *vzv1alpha1.Spec.Components.ClusterAgent.Enabled
   631  		}
   632  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   633  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.ClusterAgent != nil && vzv1beta1.Spec.Components.ClusterAgent.Enabled != nil {
   634  			return *vzv1beta1.Spec.Components.ClusterAgent.Enabled
   635  		}
   636  	}
   637  	return true
   638  }
   639  
   640  // IsComponentStatusEnabled checks if the component is enabled by looking at the component status State field
   641  func IsComponentStatusEnabled(cr runtime.Object, componentName string) bool {
   642  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   643  		if vzv1alpha1 != nil &&
   644  			vzv1alpha1.Status.Components[componentName] != nil &&
   645  			!(vzv1alpha1.Status.Components[componentName].State == installv1alpha1.CompStateDisabled ||
   646  				vzv1alpha1.Status.Components[componentName].State == installv1alpha1.CompStateUninstalled ||
   647  				vzv1alpha1.Status.Components[componentName].State == installv1alpha1.CompStateUninstalling) {
   648  			return true
   649  		}
   650  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   651  		if vzv1beta1 != nil &&
   652  			vzv1beta1.Status.Components[componentName] != nil &&
   653  			!(vzv1beta1.Status.Components[componentName].State == installv1beta1.CompStateDisabled ||
   654  				vzv1beta1.Status.Components[componentName].State == installv1beta1.CompStateUninstalled ||
   655  				vzv1beta1.Status.Components[componentName].State == installv1beta1.CompStateUninstalling) {
   656  			return true
   657  		}
   658  	}
   659  	return false
   660  }
   661  
   662  // IsAlertmanagerEnabled returns true only if the Alertmanager is explicitly enabled in the CR as part of Prometheus Operator overrides
   663  func IsAlertmanagerEnabled(cr runtime.Object, ctx spi.ComponentContext) (bool, error) {
   664  	var overrideStrings []string
   665  	var err error
   666  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   667  		if vzv1alpha1 == nil || vzv1alpha1.Spec.Components.PrometheusOperator == nil || (vzv1alpha1.Spec.Components.PrometheusOperator.Enabled != nil && !*vzv1alpha1.Spec.Components.PrometheusOperator.Enabled) || vzv1alpha1.Spec.Components.PrometheusOperator.ValueOverrides == nil {
   668  			return false, nil
   669  		}
   670  
   671  		overrideStrings, err = override.GetInstallOverridesYAML(ctx, vzv1alpha1.Spec.Components.PrometheusOperator.ValueOverrides)
   672  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   673  		if vzv1beta1 == nil || vzv1beta1.Spec.Components.PrometheusOperator == nil || (vzv1beta1.Spec.Components.PrometheusOperator.Enabled != nil && !*vzv1beta1.Spec.Components.PrometheusOperator.Enabled) || vzv1beta1.Spec.Components.PrometheusOperator.ValueOverrides == nil {
   674  			return false, nil
   675  		}
   676  
   677  		overrideStrings, err = override.GetInstallOverridesYAMLUsingClient(ctx.Client(), vzv1beta1.Spec.Components.PrometheusOperator.ValueOverrides, vzv1beta1.Namespace)
   678  	}
   679  
   680  	if err != nil {
   681  		return false, fmt.Errorf("error while reading install overrides, error: %v", err.Error())
   682  	}
   683  
   684  	if len(overrideStrings) == 0 {
   685  		return false, nil
   686  	}
   687  
   688  	for _, overrideYaml := range overrideStrings {
   689  		if strings.Contains(overrideYaml, "alertmanager:") {
   690  			value, err := override.ExtractValueFromOverrideString(overrideYaml, "alertmanager.enabled")
   691  			if err != nil {
   692  				return false, fmt.Errorf("error while reading value for alertmanager.enabled from overrides")
   693  			}
   694  			return value.(bool), nil
   695  		}
   696  	}
   697  
   698  	return false, nil
   699  }
   700  
   701  // IsDexEnabled returns true only if Dex is explicitly enabled in the CR
   702  func IsDexEnabled(cr runtime.Object) bool {
   703  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   704  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.Dex != nil && vzv1alpha1.Spec.Components.Dex.Enabled != nil {
   705  			return *vzv1alpha1.Spec.Components.Dex.Enabled
   706  		}
   707  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   708  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.Dex != nil && vzv1beta1.Spec.Components.Dex.Enabled != nil {
   709  			return *vzv1beta1.Spec.Components.Dex.Enabled
   710  		}
   711  	}
   712  	return false
   713  }
   714  
   715  // IsOpenSearchOperatorEnabled returns false only if OpenSearchOperator is explicitly disabled in the CR
   716  func IsOpenSearchOperatorEnabled(cr runtime.Object) bool {
   717  	if vzv1alpha1, ok := cr.(*installv1alpha1.Verrazzano); ok {
   718  		if vzv1alpha1 != nil && vzv1alpha1.Spec.Components.OpenSearchOperator != nil && vzv1alpha1.Spec.Components.OpenSearchOperator.Enabled != nil {
   719  			return *vzv1alpha1.Spec.Components.OpenSearchOperator.Enabled
   720  		}
   721  	} else if vzv1beta1, ok := cr.(*installv1beta1.Verrazzano); ok {
   722  		if vzv1beta1 != nil && vzv1beta1.Spec.Components.OpenSearchOperator != nil && vzv1beta1.Spec.Components.OpenSearchOperator.Enabled != nil {
   723  			return *vzv1beta1.Spec.Components.OpenSearchOperator.Enabled
   724  		}
   725  	}
   726  	return true
   727  }