otelcollector/shared/configmap/ccp/tomlparser-ccp-default-scrape-settings.go (136 lines of code) (raw):
package ccpconfigmapsettings
import (
"fmt"
"os"
"regexp"
"strings"
)
func (fcl *FilesystemConfigLoader) SetDefaultScrapeSettings() (map[string]string, error) {
config := make(map[string]string)
// Set default values
config["controlplane-apiserver"] = "true"
config["controlplane-cluster-autoscaler"] = "false"
config["controlplane-kube-scheduler"] = "false"
config["controlplane-kube-controller-manager"] = "false"
config["controlplane-etcd"] = "true"
return config, nil
}
func (fcl *FilesystemConfigLoader) ParseConfigMapForDefaultScrapeSettings() (map[string]string, error) {
config := make(map[string]string)
// Set default values
config["controlplane-apiserver"] = "true"
config["controlplane-cluster-autoscaler"] = "false"
config["controlplane-kube-scheduler"] = "false"
config["controlplane-kube-controller-manager"] = "false"
config["controlplane-etcd"] = "true"
if _, err := os.Stat(fcl.ConfigMapMountPath); os.IsNotExist(err) {
fmt.Println("configmap for ccp default scrape settings not mounted, using defaults")
return config, nil
}
content, err := os.ReadFile(string(fcl.ConfigMapMountPath))
if err != nil {
return config, fmt.Errorf("using default values, error reading config map file: %s", 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])
}
}
fmt.Println("using configmap for ccp scrape settings...")
return config, nil
}
func (cp *ConfigProcessor) PopulateSettingValues(parsedConfig map[string]string) {
if val, ok := parsedConfig["controlplane-kube-controller-manager"]; ok && val != "" {
cp.ControlplaneKubeControllerManager = val
fmt.Printf("config::Using scrape settings for controlplane-kube-controller-manager: %v\n", cp.ControlplaneKubeControllerManager)
}
if val, ok := parsedConfig["controlplane-kube-scheduler"]; ok && val != "" {
cp.ControlplaneKubeScheduler = val
fmt.Printf("config::Using scrape settings for controlplane-kube-scheduler: %v\n", cp.ControlplaneKubeScheduler)
}
if val, ok := parsedConfig["controlplane-apiserver"]; ok && val != "" {
cp.ControlplaneApiserver = val
fmt.Printf("config::Using scrape settings for controlplane-apiserver: %v\n", cp.ControlplaneApiserver)
}
if val, ok := parsedConfig["controlplane-cluster-autoscaler"]; ok && val != "" {
cp.ControlplaneClusterAutoscaler = val
fmt.Printf("config::Using scrape settings for controlplane-cluster-autoscaler: %v\n", cp.ControlplaneClusterAutoscaler)
}
if val, ok := parsedConfig["controlplane-etcd"]; ok && val != "" {
cp.ControlplaneEtcd = val
fmt.Printf("config::Using scrape settings for controlplane-etcd: %v\n", cp.ControlplaneEtcd)
}
if os.Getenv("MODE") == "" && strings.ToLower(strings.TrimSpace(os.Getenv("MODE"))) == "advanced" {
controllerType := os.Getenv("CONTROLLER_TYPE")
if controllerType == "ReplicaSet" && strings.ToLower(os.Getenv("OS_TYPE")) == "linux" &&
cp.ControlplaneKubeControllerManager == "" && cp.ControlplaneKubeScheduler == "" &&
cp.ControlplaneApiserver == "" && cp.ControlplaneClusterAutoscaler == "" && cp.ControlplaneEtcd == "" {
cp.NoDefaultsEnabled = true
}
} else if cp.ControlplaneKubeControllerManager == "" && cp.ControlplaneKubeScheduler == "" &&
cp.ControlplaneApiserver == "" && cp.ControlplaneClusterAutoscaler == "" && cp.ControlplaneEtcd == "" {
cp.NoDefaultsEnabled = true
}
if cp.NoDefaultsEnabled {
fmt.Printf("No default scrape configs enabled")
}
}
func (fcw *FileConfigWriter) WriteDefaultScrapeSettingsToFile(filename string, cp *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_PROMETHEUS_CONTROLPLANE_KUBE_CONTROLLER_MANAGER_ENABLED=%v\n", cp.ControlplaneKubeControllerManager))
file.WriteString(fmt.Sprintf("AZMON_PROMETHEUS_CONTROLPLANE_KUBE_SCHEDULER_ENABLED=%v\n", cp.ControlplaneKubeScheduler))
file.WriteString(fmt.Sprintf("AZMON_PROMETHEUS_CONTROLPLANE_APISERVER_ENABLED=%v\n", cp.ControlplaneApiserver))
file.WriteString(fmt.Sprintf("AZMON_PROMETHEUS_CONTROLPLANE_CLUSTER_AUTOSCALER_ENABLED=%v\n", cp.ControlplaneClusterAutoscaler))
file.WriteString(fmt.Sprintf("AZMON_PROMETHEUS_CONTROLPLANE_ETCD_ENABLED=%v\n", cp.ControlplaneEtcd))
file.WriteString(fmt.Sprintf("AZMON_PROMETHEUS_NO_DEFAULT_SCRAPING_ENABLED=%v\n", cp.NoDefaultsEnabled))
return nil
}
func (c *Configurator) ConfigureDefaultScrapeSettings() {
configSchemaVersion := os.Getenv("AZMON_AGENT_CFG_SCHEMA_VERSION")
fmt.Printf("ConfigureDefaultScrapeSettings getenv:configSchemaVersion:", configSchemaVersion)
fmt.Printf("Start prometheus-collector-settings Processing\n")
if configSchemaVersion != "" && strings.TrimSpace(configSchemaVersion) == "v1" {
configMapSettings, err := c.ConfigLoader.ParseConfigMapForDefaultScrapeSettings()
if err == nil && len(configMapSettings) > 0 {
c.ConfigParser.PopulateSettingValues(configMapSettings)
}
} else {
defaultSettings, err := c.ConfigLoader.SetDefaultScrapeSettings()
if err == nil && len(defaultSettings) > 0 {
c.ConfigParser.PopulateSettingValues(defaultSettings)
}
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.ClusterAlias = clusterArray[len(clusterArray)-1]
} else {
c.ConfigParser.ClusterAlias = os.Getenv("CLUSTER")
}
if c.ConfigParser.ClusterAlias != "" && len(c.ConfigParser.ClusterAlias) > 0 {
// replace all non alpha-numeric characters with "_" -- this is to ensure that all down stream places where this is used (like collector, telegraf config etc are keeping up with sanity)
c.ConfigParser.ClusterAlias = regexp.MustCompile(`[^0-9a-zA-Z]+`).ReplaceAllString(c.ConfigParser.ClusterAlias, "_")
c.ConfigParser.ClusterAlias = strings.Trim(c.ConfigParser.ClusterAlias, "_")
fmt.Printf("After replacing non-alpha-numeric characters with '_': %s\n", c.ConfigParser.ClusterAlias)
}
err := c.ConfigWriter.WriteDefaultScrapeSettingsToFile(c.ConfigFilePath, c.ConfigParser)
if err != nil {
fmt.Printf("%v\n", err)
return
}
fmt.Printf("End prometheus-collector-settings Processing\n")
}
func tomlparserCCPDefaultScrapeSettings() {
configurator := &Configurator{
ConfigLoader: &FilesystemConfigLoader{ConfigMapMountPath: "/etc/config/settings/default-scrape-settings-enabled"},
ConfigWriter: &FileConfigWriter{Config: map[string]string{}},
ConfigFilePath: "/opt/microsoft/configmapparser/config_default_scrape_settings_env_var",
ConfigParser: &ConfigProcessor{},
}
fmt.Println("Start ccp-default-scrape-settings Processing")
configurator.ConfigureDefaultScrapeSettings()
fmt.Println("End ccp-default-scrape-settings Processing")
}