func main()

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)
}