otelcollector/shared/configmap/mp/tomlparser-prometheus-collector-settings.go (111 lines of code) (raw):

package configmapsettings import ( "fmt" "os" "regexp" "strings" ) func (fcl *FilesystemConfigLoader) ParseConfigMap() (map[string]string, error) { config := make(map[string]string) if _, err := os.Stat(fcl.ConfigMapMountPath); os.IsNotExist(err) { fmt.Println("configmapprometheus-collector-configmap for prometheus collector settings not mounted, using defaults") return config, nil } content, err := os.ReadFile(fcl.ConfigMapMountPath) if err != nil { fmt.Printf("Error reading config map file: %s, using defaults, please check config map for errors\n", err) return nil, err } lines := strings.Split(string(content), "\n") for _, line := range lines { parts := strings.SplitN(line, "=", 2) if len(parts) == 2 { config[strings.TrimSpace(parts[0])] = strings.TrimSpace(parts[1]) } } return config, nil } func (cp *ConfigProcessor) PopulateSettingValuesFromConfigMap(parsedConfig map[string]string) { if value, ok := parsedConfig["default_metric_account_name"]; ok { cp.DefaultMetricAccountName = value fmt.Printf("Using configmap setting for default metric account name: %s\n", cp.DefaultMetricAccountName) } if value, ok := parsedConfig["cluster_alias"]; ok { cp.ClusterAlias = strings.TrimSpace(value) fmt.Printf("Got configmap setting for cluster_alias: %s\n", cp.ClusterAlias) // Only perform the replacement if cp.ClusterAlias is not an empty string if cp.ClusterAlias != "" { cp.ClusterAlias = regexp.MustCompile(`[^0-9a-zA-Z]+`).ReplaceAllString(cp.ClusterAlias, "_") cp.ClusterAlias = strings.Trim(cp.ClusterAlias, "_") // Trim underscores from the beginning and end (since cluster_alias is being passed in as "" which are being replaced with _) fmt.Printf("After replacing non-alpha-numeric characters with '_': %s\n", cp.ClusterAlias) } } if operatorEnabled := os.Getenv("AZMON_OPERATOR_ENABLED"); operatorEnabled != "" && strings.ToLower(operatorEnabled) == "true" { cp.IsOperatorEnabledChartSetting = true if value, ok := parsedConfig["operator_enabled"]; ok { if value == "true" { cp.IsOperatorEnabled = true } else { cp.IsOperatorEnabled = false } fmt.Printf("Configmap setting enabling operator: %t\n", cp.IsOperatorEnabled) } } else { cp.IsOperatorEnabledChartSetting = false } } func (fcw *FileConfigWriter) WriteConfigToFile(filename string, configParser *ConfigProcessor) error { file, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) if err != nil { return fmt.Errorf("exception while opening file for writing prometheus-collector config environment variables: %s", err) } defer file.Close() file.WriteString(fmt.Sprintf("AZMON_DEFAULT_METRIC_ACCOUNT_NAME=%s\n", configParser.DefaultMetricAccountName)) file.WriteString(fmt.Sprintf("AZMON_CLUSTER_LABEL=%s\n", configParser.ClusterLabel)) file.WriteString(fmt.Sprintf("AZMON_CLUSTER_ALIAS=%s\n", configParser.ClusterAlias)) file.WriteString(fmt.Sprintf("AZMON_OPERATOR_ENABLED_CHART_SETTING=%t\n", configParser.IsOperatorEnabledChartSetting)) if configParser.IsOperatorEnabled { file.WriteString(fmt.Sprintf("AZMON_OPERATOR_ENABLED=%t\n", configParser.IsOperatorEnabled)) file.WriteString(fmt.Sprintf("AZMON_OPERATOR_ENABLED_CFG_MAP_SETTING=%t\n", configParser.IsOperatorEnabled)) } return nil } func (c *Configurator) Configure() { configSchemaVersion := os.Getenv("AZMON_AGENT_CFG_SCHEMA_VERSION") fmt.Printf("Configure:Print the value of AZMON_AGENT_CFG_SCHEMA_VERSION: %s\n", os.Getenv("AZMON_AGENT_CFG_SCHEMA_VERSION")) if configSchemaVersion != "" && strings.TrimSpace(configSchemaVersion) == "v1" { configMapSettings, err := c.ConfigLoader.ParseConfigMap() if err == nil && len(configMapSettings) > 0 { c.ConfigParser.PopulateSettingValuesFromConfigMap(configMapSettings) } } else { if _, err := os.Stat(c.ConfigLoader.ConfigMapMountPath); err == nil { fmt.Printf("Unsupported/missing config schema version - '%s', using defaults, please use supported schema version\n", configSchemaVersion) } } if mac := os.Getenv("MAC"); mac != "" && strings.TrimSpace(mac) == "true" { clusterArray := strings.Split(strings.TrimSpace(os.Getenv("CLUSTER")), "/") c.ConfigParser.ClusterLabel = clusterArray[len(clusterArray)-1] } else { c.ConfigParser.ClusterLabel = os.Getenv("CLUSTER") } if c.ConfigParser.ClusterAlias != "" && len(c.ConfigParser.ClusterAlias) > 0 { c.ConfigParser.ClusterLabel = c.ConfigParser.ClusterAlias fmt.Printf("Using clusterLabel from cluster_alias: %s\n", c.ConfigParser.ClusterAlias) } fmt.Printf("AZMON_CLUSTER_ALIAS: '%s'\n", c.ConfigParser.ClusterAlias) fmt.Printf("AZMON_CLUSTER_LABEL: %s\n", c.ConfigParser.ClusterLabel) err := c.ConfigWriter.WriteConfigToFile(c.ConfigFilePath, c.ConfigParser) if err != nil { fmt.Printf("%v\n", err) return } } func parseConfigAndSetEnvInFile() { configurator := &Configurator{ ConfigLoader: &FilesystemConfigLoader{ConfigMapMountPath: collectorSettingsMountPath}, ConfigParser: &ConfigProcessor{}, ConfigWriter: &FileConfigWriter{ConfigProcessor: &ConfigProcessor{}}, ConfigFilePath: collectorSettingsEnvVarPath, } configurator.Configure() }