pkg/common/utils/resource/configmap.go (158 lines of code) (raw):

// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package resource import ( "bytes" "errors" dorisv1 "github.com/apache/doris-operator/api/doris/v1" "github.com/spf13/viper" corev1 "k8s.io/api/core/v1" "k8s.io/klog/v2" "os" ) // the fe ports key const ( HTTP_PORT = "http_port" RPC_PORT = "rpc_port" QUERY_PORT = "query_port" EDIT_LOG_PORT = "edit_log_port" ) // the cn or be ports key const ( THRIFT_PORT = "thrift_port" BE_PORT = "be_port" WEBSERVER_PORT = "webserver_port" HEARTBEAT_SERVICE_PORT = "heartbeat_service_port" BRPC_PORT = "brpc_port" ) // the default ResolveKey const ( FE_RESOLVEKEY = "fe.conf" BE_RESOLVEKEY = "be.conf" CN_RESOLVEKEY = "be.conf" BROKER_RESOLVEKEY = "apache_hdfs_broker.conf" MS_RESOLVEKEY = "doris_cloud.conf" DefaultMsToken = "greedisgood9999" DefaultMsTokenKey = "http_token" ) const ARROW_FLIGHT_SQL_PORT = "arrow_flight_sql_port" const BRPC_LISTEN_PORT = "brpc_listen_port" const BROKER_IPC_PORT = "broker_ipc_port" const GRACE_SHUTDOWN_WAIT_SECONDS = "grace_shutdown_wait_seconds" const ENABLE_FQDN = "enable_fqdn_mode" const START_MODEL_FQDN = "FQDN" const START_MODEL_IP = "IP" // defMap the default port about abilities. var defMap = map[string]int32{ HTTP_PORT: 8030, RPC_PORT: 9020, QUERY_PORT: 9030, EDIT_LOG_PORT: 9010, THRIFT_PORT: 9060, BE_PORT: 9060, WEBSERVER_PORT: 8040, HEARTBEAT_SERVICE_PORT: 9050, BRPC_PORT: 8060, BROKER_IPC_PORT: 8000, BRPC_LISTEN_PORT: 5000, ARROW_FLIGHT_SQL_PORT: -1, } // GetStartMode return fe host type, fqdn(host) or ip, from 'fe.conf' enable_fqdn_mode func GetStartMode(config map[string]interface{}) string { // not use configmap if len(config) == 0 { return START_MODEL_FQDN } // use configmap v, ok := config[ENABLE_FQDN] if ok && v.(string) == "true" { return START_MODEL_FQDN } else { return START_MODEL_IP } } func GetDefaultPort(key string) int32 { return defMap[key] } func getDefaultResolveKey(componentType dorisv1.ComponentType) string { switch componentType { case dorisv1.Component_FE: return FE_RESOLVEKEY case dorisv1.Component_BE: return BE_RESOLVEKEY case dorisv1.Component_CN: return CN_RESOLVEKEY case dorisv1.Component_Broker: return BROKER_RESOLVEKEY default: klog.Infof("the componentType: %s have not default ResolveKey", componentType) } return "" } func ResolveConfigMaps(configMaps []*corev1.ConfigMap, componentType dorisv1.ComponentType) (map[string]interface{}, error) { key := getDefaultResolveKey(componentType) for _, configMap := range configMaps { if configMap == nil { continue } if value, ok := configMap.Data[key]; ok { os.Setenv("DORIS_HOME", getDefaultDorisHome(componentType)) viper.SetConfigType("properties") viper.AutomaticEnv() viper.ReadConfig(bytes.NewBuffer([]byte(value))) return viper.AllSettings(), nil } } err := errors.New("not fund configmap ResolveKey: " + key) return nil, err } func GetMountConfigMapInfo(c dorisv1.ConfigMapInfo) (finalConfigMaps []dorisv1.MountConfigMapInfo) { if c.ConfigMapName != "" { finalConfigMaps = append( finalConfigMaps, dorisv1.MountConfigMapInfo{ ConfigMapName: c.ConfigMapName, MountPath: "", }, ) } finalConfigMaps = append(finalConfigMaps, c.ConfigMaps...) return finalConfigMaps } // getDorisCoreConfigMapName return a configmap`s name include doris configurations such as fe.conf/be.conf func getDorisCoreConfigMapName(dcr *dorisv1.DorisCluster, componentType dorisv1.ComponentType) string { var cmInfo dorisv1.ConfigMapInfo switch componentType { case dorisv1.Component_FE: cmInfo = dcr.Spec.FeSpec.ConfigMapInfo case dorisv1.Component_BE: cmInfo = dcr.Spec.BeSpec.ConfigMapInfo case dorisv1.Component_CN: cmInfo = dcr.Spec.CnSpec.ConfigMapInfo case dorisv1.Component_Broker: cmInfo = dcr.Spec.BrokerSpec.ConfigMapInfo default: klog.Infof("getCoreCmName: the componentType: %s have not default ResolveKey", componentType) } maps := GetMountConfigMapInfo(cmInfo) for i := range maps { if maps[i].MountPath == "" || maps[i].MountPath == ConfigEnvPath { return maps[i].ConfigMapName } } return "" } func GetDorisCoreConfigMapNames(dcr *dorisv1.DorisCluster) map[dorisv1.ComponentType]string { dorisCoreConfigMaps := map[dorisv1.ComponentType]string{} if dcr.Spec.FeSpec != nil { if cm := getDorisCoreConfigMapName(dcr, dorisv1.Component_FE); cm != "" { dorisCoreConfigMaps[dorisv1.Component_FE] = cm } } if dcr.Spec.BeSpec != nil { if cm := getDorisCoreConfigMapName(dcr, dorisv1.Component_BE); cm != "" { dorisCoreConfigMaps[dorisv1.Component_BE] = cm } } if dcr.Spec.CnSpec != nil { if cm := getDorisCoreConfigMapName(dcr, dorisv1.Component_CN); cm != "" { dorisCoreConfigMaps[dorisv1.Component_CN] = cm } } if dcr.Spec.BrokerSpec != nil { if cm := getDorisCoreConfigMapName(dcr, dorisv1.Component_Broker); cm != "" { dorisCoreConfigMaps[dorisv1.Component_Broker] = cm } } return dorisCoreConfigMaps }