in otelcollector/prom-config-validator-builder/main.go [283:364]
func main() {
log.SetFlags(0)
configFilePtr := flag.String("config", "", "Config file to validate")
outFilePtr := flag.String("output", "", "Output file path for writing collector config")
otelTemplatePathPtr := flag.String("otelTemplate", "", "OTel Collector config template file path")
flag.Parse()
promFilePath := *configFilePtr
otelConfigTemplatePath := *otelTemplatePathPtr
if otelConfigTemplatePath == "" {
logFatalError("prom-config-validator::Please provide otel config template path\n")
os.Exit(1)
}
if promFilePath != "" {
fmt.Printf("prom-config-validator::Config file provided - %s\n", promFilePath)
outputFilePath := *outFilePtr
if outputFilePath == "" {
outputFilePath = "merged-otel-config.yaml"
}
err := generateOtelConfig(promFilePath, outputFilePath, otelConfigTemplatePath)
if err != nil {
logFatalError(fmt.Sprintf("Generating otel config failed: %v\n", err))
os.Exit(1)
}
flags := new(flag.FlagSet)
//parserProvider.Flags(flags)
configFlagEx := new(stringArrayValue)
flags.Var(configFlagEx, "config", "Locations to the config file(s), note that only a"+
" single location can be set per flag entry e.g. `-config=file:/path/to/first --config=file:path/to/second`.")
configFlag := fmt.Sprintf("--config=%s", outputFilePath)
err = flags.Parse([]string{
configFlag,
})
if err != nil {
logFatalError(fmt.Sprintf("prom-config-validator::Error parsing flags - %v\n", err))
os.Exit(1)
}
factories, err := components()
if err != nil {
logFatalError(fmt.Sprintf("prom-config-validator::Failed to build components: %v\n", err))
os.Exit(1)
}
fmp := fileprovider.NewFactory()
envp := envprovider.NewFactory()
providers := []confmap.ProviderFactory{fmp, envp}
cp, err := otelcol.NewConfigProvider(
otelcol.ConfigProviderSettings{
ResolverSettings: confmap.ResolverSettings{
URIs: []string{fmt.Sprintf("file:%s", outputFilePath)},
ProviderFactories: providers,
},
},
)
if err != nil {
logFatalError(fmt.Errorf("prom-config-validator::Cannot load configuration's parser: %w\n", err).Error())
os.Exit(1)
}
fmt.Printf("prom-config-validator::Loading configuration...\n")
cfg, err := cp.Get(context.Background(), factories)
if err != nil {
logFatalError(fmt.Sprintf("prom-config-validator::Cannot load configuration: %v", err))
os.Exit(1)
}
err = cfg.Validate()
if err != nil {
logFatalError(fmt.Errorf("prom-config-validator::Invalid configuration: %w\n", err).Error())
os.Exit(1)
}
} else {
logFatalError("prom-config-validator::Please provide a config file using the --config flag to validate\n")
os.Exit(1)
}
fmt.Printf("prom-config-validator::Successfully loaded and validated prometheus config\n")
os.Exit(0)
}