{{ define "alloy.config.kube_controller_manager" }}
// Kube Controller Manager
discovery.relabel "kube_controller_manager" {
  targets = discovery.kubernetes.pods.targets
  rule {
    source_labels = ["__meta_kubernetes_namespace"]
    regex = "kube-system"
    action = "keep"
  }
  rule {
    source_labels = ["__meta_kubernetes_pod_label_component"]
    regex = "kube-controller-manager"
    action = "keep"
  }
  rule {
    source_labels = ["__address__"]
    replacement = "$1:{{ .Values.metrics.kubeControllerManager.port }}"
    target_label = "__address__"
  }
{{- if .Values.metrics.extraRelabelingRules }}
{{ .Values.metrics.extraRelabelingRules | indent 2 }}
{{- end }}
{{- if .Values.metrics.kubeControllerManager.extraRelabelingRules }}
{{ .Values.metrics.kubeControllerManager.extraRelabelingRules | indent 2 }}
{{- end }}
}

prometheus.scrape "kube_controller_manager" {
  job_name   = "kube-controller-manager"
  targets    = discovery.relabel.kube_controller_manager.output
  scheme     = "https"
  scrape_interval = {{ .Values.metrics.kubeControllerManager.scrapeInterval | default .Values.metrics.scrapeInterval | quote }}
  bearer_token_file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
  tls_config {
    insecure_skip_verify = true
  }
{{- if .Values.alloy.alloy.clustering.enabled }}
  clustering {
    enabled = true
  }
{{- end }}
  forward_to = [prometheus.relabel.kube_controller_manager.receiver]
}

prometheus.relabel "kube_controller_manager" {
  max_cache_size = {{ .Values.metrics.kubeControllerManager.maxCacheSize | default .Values.metrics.maxCacheSize | int }}
{{- if .Values.metrics.kubeControllerManager.metricsTuning.includeMetrics }}
  rule {
    source_labels = ["__name__"]
    regex = "up|{{ join "|" .Values.metrics.kubeControllerManager.metricsTuning.includeMetrics }}"
    action = "keep"
  }
{{- end }}
{{- if .Values.metrics.kubeControllerManager.metricsTuning.excludeMetrics }}
  rule {
    source_labels = ["__name__"]
    regex = {{ join "|" .Values.metrics.kubeControllerManager.metricsTuning.excludeMetrics | quote }}
    action = "drop"
  }
{{- end }}
{{- if .Values.metrics.extraMetricRelabelingRules }}
{{ .Values.metrics.extraMetricRelabelingRules | indent 2 }}
{{- end }}
{{- if .Values.metrics.kubeControllerManager.extraMetricRelabelingRules }}
{{ .Values.metrics.kubeControllerManager.extraMetricRelabelingRules | indent 2 }}
{{- end }}
  forward_to = [prometheus.relabel.metrics_service.receiver]
}
{{ end }}
