in otelcollector/otel-allocator/internal/watcher/promOperator.go [348:407]
func (w *PrometheusCRWatcher) LoadConfig(ctx context.Context) (*promconfig.Config, error) {
promCfg := &promconfig.Config{}
if w.resourceSelector != nil {
serviceMonitorInstances, err := w.resourceSelector.SelectServiceMonitors(ctx, w.informers[monitoringv1.ServiceMonitorName].ListAllByNamespace)
if err != nil {
return nil, err
}
podMonitorInstances, err := w.resourceSelector.SelectPodMonitors(ctx, w.informers[monitoringv1.PodMonitorName].ListAllByNamespace)
if err != nil {
return nil, err
}
probeInstances, err := w.resourceSelector.SelectProbes(ctx, w.informers[monitoringv1.ProbeName].ListAllByNamespace)
if err != nil {
return nil, err
}
scrapeConfigInstances, err := w.resourceSelector.SelectScrapeConfigs(ctx, w.informers[promv1alpha1.ScrapeConfigName].ListAllByNamespace)
if err != nil {
return nil, err
}
generatedConfig, err := w.configGenerator.GenerateServerConfiguration(
w.prometheusCR,
serviceMonitorInstances,
podMonitorInstances,
probeInstances,
scrapeConfigInstances,
w.store,
nil,
nil,
nil,
[]string{})
if err != nil {
return nil, err
}
unmarshalErr := yaml.Unmarshal(generatedConfig, promCfg)
if unmarshalErr != nil {
return nil, unmarshalErr
}
// set kubeconfig path to service discovery configs, else kubernetes_sd will always attempt in-cluster
// authentication even if running with a detected kubeconfig
for _, scrapeConfig := range promCfg.ScrapeConfigs {
for _, serviceDiscoveryConfig := range scrapeConfig.ServiceDiscoveryConfigs {
if serviceDiscoveryConfig.Name() == "kubernetes" {
sdConfig := interface{}(serviceDiscoveryConfig).(*kubeDiscovery.SDConfig)
sdConfig.KubeConfig = w.kubeConfigPath
}
}
}
return promCfg, nil
} else {
w.logger.Info("Unable to load config since resource selector is nil, returning empty prometheus config")
return promCfg, nil
}
}