#yaml
Вопрос:
Учитывая этот файл YAML:
Все начинается с:
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
- является
scrape_configs
ли словарь ключом? - содержит ли он элемент списка под названием
job_name
? - имеет ли этот элемент списка
job_name
значение"kubernetes-apiservers"
- есть ли у него тогда ключ словаря под названием
kubernetes_sd_configs
? kubernetes_sd_configs
содержит ли тогда значение, которое является элементом списка, называемымrole
со значениемendpoints
?- есть ли у него тогда другой ключ словаря, называемый
scheme
со значениемhttps
? - есть ли у него тогда другой ключ словаря, вызываемый
tls_config
со значением словаря, который является ключом словаря, называемымca_file
, который имеет значение словаря/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
- и еще один ключ словаря, называемый
relabel_configs
, у которого есть список, в котором в качестве первого элемента указан словарь с ключомsource_labels
- какова структура данных для
source_labels
значения? - как ключ
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 не использует список слов