github.com/verrazzano/verrazzano-monitoring-operator@v0.0.30/pkg/config/components.go (about) 1 // Copyright (C) 2020, 2022, 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 config 5 6 import ( 7 "fmt" 8 "os" 9 "strings" 10 11 "github.com/verrazzano/verrazzano-monitoring-operator/pkg/constants" 12 "go.uber.org/zap" 13 corev1 "k8s.io/api/core/v1" 14 ) 15 16 // ComponentDetails struct for component detail info 17 type ComponentDetails struct { 18 Name string 19 EndpointName string 20 Image string 21 ImagePullPolicy corev1.PullPolicy 22 Port int 23 DataDir string 24 LivenessHTTPPath string 25 ReadinessHTTPPath string 26 Privileged bool 27 RunAsUser int64 28 EnvName string 29 OidcProxy *ComponentDetails 30 Optional bool 31 Disabled bool 32 } 33 34 // AllComponentDetails is array of all ComponentDetails 35 var AllComponentDetails = []*ComponentDetails{&Grafana, &Kibana, &OpenSearchDashboards, &ElasticsearchIngest, &ElasticsearchMaster, &ElasticsearchData, &ElasticsearchInit, &API, &OidcProxy} 36 37 // StorageEnableComponents is storage operation-related stuff 38 var StorageEnableComponents = []*ComponentDetails{&Grafana} 39 40 // Grafana is the default Grafana configuration 41 var Grafana = ComponentDetails{ 42 Name: "grafana", 43 EnvName: "GRAFANA_IMAGE", 44 ImagePullPolicy: constants.DefaultImagePullPolicy, 45 Port: 3000, 46 DataDir: "/var/lib/grafana", 47 LivenessHTTPPath: "/api/health", 48 ReadinessHTTPPath: "/api/health", 49 Privileged: false, 50 OidcProxy: &OidcProxy, 51 } 52 53 // Prometheus is the default Prometheus configuration 54 // Note: Update promtool version to match any version changes here 55 // - vmo/images/cirith-server-for-operator/docker-images 56 var Prometheus = ComponentDetails{ 57 Name: "prometheus", 58 EnvName: "PROMETHEUS_IMAGE", 59 ImagePullPolicy: constants.DefaultImagePullPolicy, 60 Port: 9090, 61 DataDir: "/prometheus", 62 LivenessHTTPPath: "/-/healthy", 63 ReadinessHTTPPath: "/-/ready", 64 Privileged: false, 65 RunAsUser: int64(constants.NobodyUID), 66 OidcProxy: &OidcProxy, 67 } 68 69 // AlertManager is the default AlertManager configuration 70 // Note: Update amtool version to match any version changes here 71 // - vmo/images/cirith-server-for-operator/docker-images 72 var AlertManager = ComponentDetails{ 73 Name: "alertmanager", 74 EnvName: "ALERT_MANAGER_IMAGE", 75 ImagePullPolicy: constants.DefaultImagePullPolicy, 76 Port: 9093, 77 LivenessHTTPPath: "/-/healthy", 78 ReadinessHTTPPath: "/-/ready", 79 Privileged: false, 80 } 81 82 // ESWait is the InitContainer config; will wait for ES to reach stable healthy state 83 var ESWait = ComponentDetails{ 84 Name: "wait-for-es", 85 EnvName: "ELASTICSEARCH_WAIT_IMAGE", 86 ImagePullPolicy: constants.DefaultImagePullPolicy, 87 } 88 89 // Kibana is the default Kibana configuration 90 var Kibana = ComponentDetails{ 91 Name: "kibana", 92 EnvName: "KIBANA_IMAGE", 93 ImagePullPolicy: constants.DefaultImagePullPolicy, 94 Port: 5601, 95 LivenessHTTPPath: "/api/status", 96 ReadinessHTTPPath: "/api/status", 97 Privileged: false, 98 OidcProxy: &OidcProxy, 99 } 100 101 // OpenSearchDashboards is the default OpenSearchDashboards configuration 102 var OpenSearchDashboards = ComponentDetails{ 103 Name: "osd", 104 EnvName: "KIBANA_IMAGE", 105 ImagePullPolicy: constants.DefaultImagePullPolicy, 106 Port: 5601, 107 LivenessHTTPPath: "/api/status", 108 ReadinessHTTPPath: "/api/status", 109 Privileged: false, 110 OidcProxy: &OidcProxy, 111 } 112 113 // OpenSearchDashboardsRedirect is the default OpenSearchDashboardsRedirect configuration 114 var OpenSearchDashboardsRedirect = ComponentDetails{ 115 Name: "osd-redirect", 116 EndpointName: "kibana", 117 EnvName: "KIBANA_IMAGE", 118 ImagePullPolicy: constants.DefaultImagePullPolicy, 119 Port: 5601, 120 LivenessHTTPPath: "/api/status", 121 ReadinessHTTPPath: "/api/status", 122 Privileged: false, 123 OidcProxy: &OidcProxy, 124 } 125 126 // OidcProxy is the default OIDC proxy configuration 127 var OidcProxy = ComponentDetails{ 128 Name: "oidc", 129 EnvName: "OIDC_PROXY_IMAGE", 130 ImagePullPolicy: constants.DefaultImagePullPolicy, 131 Port: constants.OidcProxyPort, 132 } 133 134 // ElasticsearchIngest is the default Elasticsearch IngestNodes configuration 135 var ElasticsearchIngest = ComponentDetails{ 136 Name: "es-ingest", 137 EndpointName: "elasticsearch", 138 EnvName: "ELASTICSEARCH_IMAGE", 139 ImagePullPolicy: constants.DefaultImagePullPolicy, 140 Port: constants.OSHTTPPort, 141 LivenessHTTPPath: "/_cluster/health", 142 ReadinessHTTPPath: "/_cluster/health", 143 Privileged: false, 144 OidcProxy: &OidcProxy, 145 } 146 147 // OpensearchIngest is the default Opensearch IngestNodes configuration 148 var OpensearchIngest = ComponentDetails{ 149 Name: "os-ingest", 150 EndpointName: "opensearch", 151 EnvName: "ELASTICSEARCH_IMAGE", 152 ImagePullPolicy: constants.DefaultImagePullPolicy, 153 Port: constants.OSHTTPPort, 154 LivenessHTTPPath: "/_cluster/health", 155 ReadinessHTTPPath: "/_cluster/health", 156 Privileged: false, 157 OidcProxy: &OidcProxy, 158 } 159 160 // OpensearchIngestRedirect is the default OpensearchIngestRedirect IngestNodes configuration 161 var OpensearchIngestRedirect = ComponentDetails{ 162 Name: "os-redirect", 163 EndpointName: "elasticsearch", 164 EnvName: "ELASTICSEARCH_IMAGE", 165 ImagePullPolicy: constants.DefaultImagePullPolicy, 166 Port: constants.OSHTTPPort, 167 LivenessHTTPPath: "/_cluster/health", 168 ReadinessHTTPPath: "/_cluster/health", 169 Privileged: false, 170 OidcProxy: &OidcProxy, 171 } 172 173 // ElasticsearchMaster is the default Elasticsearch MasterNodes configuration 174 var ElasticsearchMaster = ComponentDetails{ 175 Name: "es-master", 176 EnvName: "ELASTICSEARCH_IMAGE", 177 ImagePullPolicy: constants.DefaultImagePullPolicy, 178 Port: constants.OSTransportPort, 179 Privileged: false, 180 } 181 182 // ElasticsearchData is the default Elasticsearch DataNodes configuration 183 var ElasticsearchData = ComponentDetails{ 184 Name: "es-data", 185 EnvName: "ELASTICSEARCH_IMAGE", 186 ImagePullPolicy: constants.DefaultImagePullPolicy, 187 Port: constants.OSHTTPPort, 188 DataDir: "/usr/share/opensearch/data", 189 LivenessHTTPPath: "/_cluster/health", 190 ReadinessHTTPPath: "/_cluster/health", 191 Privileged: false, 192 } 193 194 // ElasticsearchInit contains Elasticsearch init container info 195 var ElasticsearchInit = ComponentDetails{ 196 Name: "elasticsearch-init", 197 EnvName: "ELASTICSEARCH_INIT_IMAGE", 198 ImagePullPolicy: constants.DefaultImagePullPolicy, 199 Privileged: true, 200 } 201 202 // API is the default API configuration 203 var API = ComponentDetails{ 204 Name: "api", 205 EnvName: "VERRAZZANO_MONITORING_INSTANCE_API_IMAGE", 206 ImagePullPolicy: constants.DefaultImagePullPolicy, 207 Port: 9097, 208 LivenessHTTPPath: "/healthcheck", 209 ReadinessHTTPPath: "/healthcheck", 210 Privileged: false, 211 Optional: true, 212 } 213 214 const ( 215 eswaitTargetVersionEnv = "ELASTICSEARCH_WAIT_TARGET_VERSION" 216 oidcAuthEnabled = "OIDC_AUTH_ENABLED" 217 ) 218 219 // ESWaitTargetVersion contains value for environment variable ELASTICSEARCH_WAIT_TARGET_VERSION 220 var ESWaitTargetVersion string 221 222 // InitComponentDetails initialize all components and check ELASTICSEARCH_WAIT_TARGET_VERSION 223 func InitComponentDetails() error { 224 //oidcAuthEnabled defaults to true 225 oidcAuthEnabled := !strings.EqualFold("false", os.Getenv(oidcAuthEnabled)) 226 // Initialize the images to use 227 for _, component := range AllComponentDetails { 228 if len(component.EnvName) > 0 { 229 component.Image = os.Getenv(component.EnvName) 230 if len(component.Image) == 0 { 231 if !component.Optional { 232 return fmt.Errorf("Failed, the environment variable %s translated to an empty string for component %s", component.EnvName, component.Name) 233 } 234 // if no image is provided for an optional component then disable it 235 zap.S().Infof("The environment variable %s translated to an empty string for optional component %s. Marking component disabled.", component.EnvName, component.Name) 236 component.Disabled = true 237 } 238 } 239 if !oidcAuthEnabled { 240 component.OidcProxy = nil 241 } 242 } 243 ESWaitTargetVersion = os.Getenv(eswaitTargetVersionEnv) 244 if len(ESWaitTargetVersion) == 0 { 245 return fmt.Errorf("Failed, the environment variable %s translated to an empty string", eswaitTargetVersionEnv) 246 } 247 return nil 248 }