in otelcollector/shared/configmap/mp/configmapparser.go [140:255]
func Configmapparser() {
setConfigFileVersionEnv()
setConfigSchemaVersionEnv()
parseSettingsForPodAnnotations()
parsePrometheusCollectorConfig()
parseDefaultScrapeSettings()
parseDebugModeSettings()
tomlparserTargetsMetricsKeepList()
tomlparserScrapeInterval()
azmonOperatorEnabled := os.Getenv("AZMON_OPERATOR_ENABLED")
containerType := os.Getenv("CONTAINER_TYPE")
if azmonOperatorEnabled == "true" || containerType == "ConfigReaderSidecar" {
prometheusConfigMerger(true)
} else {
prometheusConfigMerger(false)
}
shared.SetEnvAndSourceBashrcOrPowershell("AZMON_INVALID_CUSTOM_PROMETHEUS_CONFIG", "false", true)
shared.SetEnvAndSourceBashrcOrPowershell("CONFIG_VALIDATOR_RUNNING_IN_AGENT", "true", true)
// Running promconfigvalidator if promMergedConfig.yml exists
if shared.FileExists("/opt/promMergedConfig.yml") {
if !shared.FileExists("/opt/microsoft/otelcollector/collector-config.yml") {
err := shared.StartCommandAndWait("/opt/promconfigvalidator",
"--config", "/opt/promMergedConfig.yml",
"--output", "/opt/microsoft/otelcollector/collector-config.yml",
"--otelTemplate", "/opt/microsoft/otelcollector/collector-config-template.yml",
)
if err != nil {
fmt.Println("prom-config-validator::Prometheus custom config validation failed. The custom config will not be used")
fmt.Printf("Command execution failed: %v\n", err)
shared.SetEnvAndSourceBashrcOrPowershell("AZMON_INVALID_CUSTOM_PROMETHEUS_CONFIG", "true", true)
if shared.FileExists(mergedDefaultConfigPath) {
fmt.Println("prom-config-validator::Running validator on just default scrape configs")
shared.StartCommandAndWait("/opt/promconfigvalidator", "--config", mergedDefaultConfigPath, "--output", "/opt/collector-config-with-defaults.yml", "--otelTemplate", "/opt/microsoft/otelcollector/collector-config-template.yml")
if !shared.FileExists("/opt/collector-config-with-defaults.yml") {
fmt.Println("prom-config-validator::Prometheus default scrape config validation failed. No scrape configs will be used")
} else {
shared.CopyFile("/opt/collector-config-with-defaults.yml", "/opt/microsoft/otelcollector/collector-config-default.yml")
}
}
shared.SetEnvAndSourceBashrcOrPowershell("AZMON_USE_DEFAULT_PROMETHEUS_CONFIG", "true", true)
} else {
shared.SetEnvAndSourceBashrcOrPowershell("AZMON_SET_GLOBAL_SETTINGS", "true", true)
}
}
} else if _, err := os.Stat(mergedDefaultConfigPath); err == nil {
fmt.Println("prom-config-validator::No custom prometheus config found. Only using default scrape configs")
err := shared.StartCommandAndWait("/opt/promconfigvalidator", "--config", mergedDefaultConfigPath, "--output", "/opt/collector-config-with-defaults.yml", "--otelTemplate", "/opt/microsoft/otelcollector/collector-config-template.yml")
if err != nil {
fmt.Println("prom-config-validator::Prometheus default scrape config validation failed. No scrape configs will be used")
fmt.Printf("Command execution failed: %v\n", err)
} else {
fmt.Println("prom-config-validator::Prometheus default scrape config validation succeeded, using this as collector config")
shared.CopyFile("/opt/collector-config-with-defaults.yml", "/opt/microsoft/otelcollector/collector-config-default.yml")
}
shared.SetEnvAndSourceBashrcOrPowershell("AZMON_USE_DEFAULT_PROMETHEUS_CONFIG", "true", true)
} else {
// This else block is needed, when there is no custom config mounted as config map or default configs enabled
fmt.Println("prom-config-validator::No custom config via configmap or default scrape configs enabled.")
shared.SetEnvAndSourceBashrcOrPowershell("AZMON_USE_DEFAULT_PROMETHEUS_CONFIG", "true", true)
}
if _, err := os.Stat("/opt/microsoft/prom_config_validator_env_var"); err == nil {
file, err := os.Open("/opt/microsoft/prom_config_validator_env_var")
if err != nil {
shared.EchoError("Error opening file:" + err.Error())
return
}
defer file.Close()
// Create or truncate envvars.env file
envFile, err := os.Create("/opt/envvars.env")
if err != nil {
shared.EchoError("Error creating env file:" + err.Error())
return
}
defer envFile.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
parts := strings.Split(line, "=")
if len(parts) == 2 {
key := parts[0]
value := parts[1]
shared.SetEnvAndSourceBashrcOrPowershell(key, value, true)
// Write to envvars.env
fmt.Fprintf(envFile, "%s=%s\n", key, value)
}
}
if err := scanner.Err(); err != nil {
shared.EchoError("Error reading file:" + err.Error())
return
}
// Source prom_config_validator_env_var
filename := "/opt/microsoft/prom_config_validator_env_var"
err = shared.SetEnvVarsFromFile(filename)
if err != nil {
fmt.Printf("Error when settinng env for /opt/microsoft/prom_config_validator_env_var: %v\n", err)
}
filename = "/opt/envvars.env"
err = shared.SetEnvVarsFromFile(filename)
if err != nil {
fmt.Printf("Error when settinng env for /opt/envvars.env: %v\n", err)
}
}
fmt.Printf("prom-config-validator::Use default prometheus config: %s\n", os.Getenv("AZMON_USE_DEFAULT_PROMETHEUS_CONFIG"))
}