Отступы и интерпретация YAML для примера Prometheus Kubernetes

#yaml

Вопрос:

Учитывая этот файл YAML:

https://raw.githubusercontent.com/prometheus/prometheus/main/documentation/examples/prometheus-kubernetes.yml

Все начинается с:

 scrape_configs:
  - job_name: "kubernetes-apiservers"

    kubernetes_sd_configs:
      - role: endpoints

    # Default to scraping over https. If required, just disable this or change to
    # `http`.
    scheme: https

    # This TLS amp; authorization config is used to connect to the actual scrape
    # endpoints for cluster components. This is separate to discovery auth
    # configuration because discovery amp; scraping are two separate concerns in
    # Prometheus. The discovery auth config is automatic if Prometheus runs inside
    # the cluster. Otherwise, more config options have to be provided within the
    # <kubernetes_sd_config>.
    tls_config:
      ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      # If your node certificates are self-signed or use a different CA to the
      # master CA, then disable certificate verification below. Note that
      # certificate verification is an integral part of a secure infrastructure
      # so this should only be disabled in a controlled environment. You can
      # disable certificate verification by uncommenting the line below.
      #
      # insecure_skip_verify: true
    authorization:
      credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token

    # Keep only the default/kubernetes service endpoints for the https port. This
    # will add targets for each API server which Kubernetes adds an endpoint to
    # the default/kubernetes service.
    relabel_configs:
      - source_labels:
          [
            __meta_kubernetes_namespace,
            __meta_kubernetes_service_name,
            __meta_kubernetes_endpoint_port_name,
          ]
        action: keep
        regex: defau<kubernetes;https
 
  1. является scrape_configs ли словарь ключом?
  2. содержит ли он элемент списка под названием job_name ?
  3. имеет ли этот элемент списка job_name значение "kubernetes-apiservers"
  4. есть ли у него тогда ключ словаря под названием kubernetes_sd_configs ?
  5. kubernetes_sd_configs содержит ли тогда значение, которое является элементом списка, называемым role со значением endpoints ?
  6. есть ли у него тогда другой ключ словаря, называемый scheme со значением https ?
  7. есть ли у него тогда другой ключ словаря, вызываемый tls_config со значением словаря, который является ключом словаря, называемым ca_file , который имеет значение словаря /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  8. и еще один ключ словаря, называемый relabel_configs , у которого есть список, в котором в качестве первого элемента указан словарь с ключом source_labels
  9. какова структура данных для source_labels значения?
  10. как ключ action словаря соединяется с relabel_configs (или source_labels — кажется, это не элемент списка?

==== ОБНОВЛЕНИЕ

Итак, если kubernetes_sd_configs является родным братом job_name , почему он также не начинается с - . т. е.

 - job_name: "kubernetes-apiservers"
- kubernetes_sd_configs:
 

Ответ №1:

является ли scrape_configs ключом словаря?

Технически это ключ отображения. Терминология YAML не использует словарь слов, однако сопоставление YAML обычно загружается в словарь Python, если оно загружено с PyYAML.

содержит ли он элемент списка с именем job_name?

Нет. Сопоставление содержит одну пару ключ-значение, ключом которой является scrape_configs и значением которой является последовательность (терминология YAML не использует список слов), которая не имеет дальнейшего имени.

имеет ли этот элемент списка job_name значение «kubernetes-apiservers»

Нет. Первый элемент в последовательности-это сопоставление, содержащее пару ключ-значение job_name , которая является ключом и "kubernetes-apiservers" значением. Далее следуют другие пары ключ-значение.

есть ли у него тогда ключ словаря под названием kubernetes_sd_configs?

kubernetes_sd_configs является родственным ключом к job_name отображению, которое является первым элементом последовательности.

содержит ли kubernetes_sd_configs значение, которое является элементом списка под названием роль со значениями конечных точек?

Как и прежде, ключ kubernetes_sd_configs имеет последовательность в качестве значения. Эта последовательность содержит сопоставление с одной парой ключ-значение, чей ключ role и чье значение endpoints .

есть ли у него тогда другой ключ словаря под названием scheme со значением https?

Это еще одна родственная пара ключ-значение.

есть ли у него тогда другой ключ словаря под названием tls_config со значением словаря, которое является ключом словаря под названием ca_file, который имеет значение словаря /var/run/секреты/kubernetes.io/serviceaccount/ca.crt

Далее следует пара ключ-значение с tls_config ключом as и сопоставление как значение, содержимое которого представляет собой единственную пару ключ-значение ca_value , являющуюся ключом. Нигде значение сопоставления не является ключом.

и еще один ключ словаря под названием relabel_configs, в котором есть список, в котором в качестве первого элемента указан словарь с ключом source_labels какова структура данных для значения source_labels?

Пара ключ-значение с ключом relabel_configs имеет в качестве значения последовательность с одним элементом. Этот элемент представляет собой сопоставление, первая пара ключ-значение которого содержит ключ source_labels . Значение source_labels представляет собой последовательность, записанную в потоковой нотации (в отличие от ранее используемой блочной нотации, в которой есть - начальные элементы). Потоковая нотация заключает элементы списка [] и разделяет их запятыми. Нет никакой семантической разницы в блокировке обозначений. Нет необходимости указывать эти значения в потоковой записи, на самом деле, если они записаны в отдельных строках, они также могут быть указаны в блочной записи.

как ключ словаря действий соединяется с relabel_configs (или source_labels — похоже, это не элемент списка?

action является родственным ключом source_labels и является частью одного и того же сопоставления, которое является первым элементом в значении последовательности ключа relabel_configs .

Итак, если kubernetes_sd_configs является родным братом job_name, почему он также не начинается с -

Потому что тогда это не был бы брат или сестра. В этом примере:

 - job_name: "kubernetes-apiservers"
- kubernetes_sd_configs:
 

У нас есть последовательность из двух пунктов, обозначенных символом - . Каждый элемент представляет собой сопоставление. Первое сопоставление содержит пару ключ-значение с job_name ключом as. Второе сопоставление содержит пару ключ-значение с kubernetes_sd_configs ключом as, значение не отображается. Поскольку два ключа находятся в разных элементах последовательности, они являются частью разных сопоставлений и, следовательно, не являются братьями и сестрами друг друга.

Только если не начинать новый элемент последовательности kubernetes_sd_configs , он становится родным братом job_name :

 - job_name: "kubernetes-apiservers"
  kubernetes_sd_configs:
 

Комментарии:

1. см. ОБНОВЛЕНИЕ выше.

2. @Snowcrash Обновил ответ, но, пожалуйста, имейте в виду, что SO не является дискуссионным форумом, и вы не должны изменять вопрос после того, как на него дан ответ.

3. Отличный ответ. Кстати, терминология YAML не использует список слов