Spec-Zone.ru › OpenTofu 1.11

Проверки

Блок check позволяет проверять вашу инфраструктуру вне обычного жизненного цикла ресурсов. Блоки проверок заполняют пробел между применением конфигурации и функциональной проверкой инфраструктуры.

Блоки проверок позволяют определять пользовательские условия, которые выполняются при каждой операции планирования или применения OpenTofu, не влияя на общий статус операции. Блоки проверок выполняются на последнем этапе планирования или применения, после того как OpenTofu спланировал или подготовил вашу инфраструктуру.

Синтаксис​

Вы можете объявить блок check с локальным именем, от нуля до одного источника данных с ограниченной областью действия и от одного до нескольких утверждений.

В следующем примере загружается веб-сайт и проверяется, что он возвращает ожидаемый код состояния 200.

Блок кода
check "health_check" {
  data "http" "opentofu_org" {
    url = "https://www.opentofu.org"
  }

  assert {
    condition = data.http.opentofu_org.status_code == 200
    error_message = "${data.http.opentofu_org.url} returned an unhealthy status code"
  }
}

Источники данных с ограниченной областью действия​

В качестве источника данных с ограниченной областью действия в блоке check можно использовать любой источник данных любого провайдера.

Блок check может содержать вложенный источник данных (также называемый источником данных с ограниченной областью действия). Этот блок data работает как внешний источник данных, однако ссылаться на него можно только внутри содержащего его блока check. Кроме того, если провайдер источника данных с ограниченной областью действия выдает ошибки, они маскируются как предупреждения и не мешают OpenTofu продолжить выполнение операции.

Источник данных с ограниченной областью действия можно использовать для проверки состояния фрагмента инфраструктуры вне обычного жизненного цикла ресурсов OpenTofu. В приведенном выше примере, если загрузка источника данных opentofu_org завершится с ошибкой, вы получите предупреждение вместо блокирующей ошибки, которая возникла бы при объявлении этого источника данных вне блока check.

Метааргументы​

Источники данных с ограниченной областью действия поддерживают метааргументы depends_on и provider (метааргументы). Источники данных с ограниченной областью действия не поддерживают метааргументы count илиfor_each.

depends_on​

Метааргумент depends_on может быть особенно полезен при использовании в источниках данных с ограниченной областью действия.

При первом создании начального плана OpenTofu для предыдущего примера план завершается с ошибкой, поскольку OpenTofu еще не применил конфигурацию. Это означает, что проверка завершается неудачей, потому что OpenTofu еще должен создать ресурсы, необходимые для работы этого веб-сайта. Поэтому при первом запуске этой проверки OpenTofu всегда выдает потенциально отвлекающее сообщение об ошибке.

Это можно исправить, добавив depends_on к источнику данных с ограниченной областью действия, чтобы указать его зависимость от важной части инфраструктуры вашего сайта, например балансировщика нагрузки. Проверка возвращает known after apply до тех пор, пока эта важная часть веб-сайта не будет готова. Такой подход позволяет избежать ненужных предупреждений во время настройки, а проверка выполняется при последующих операциях планирования и применения.

Проблема этого подхода заключается в том, что если изменится ресурс, от которого зависит depends_on источника данных с ограниченной областью действия, блок проверки вернет known after apply до тех пор, пока OpenTofu не обновит этот ресурс. В зависимости от вашего сценария такое поведение может быть приемлемым или проблематичным.

Мы рекомендуем использовать метааргумент depends_on, если источник данных с ограниченной областью действия зависит от существования другого ресурса, но не ссылается на него напрямую.

Утверждения​

Блоки проверок проверяют пользовательские утверждения с помощью блоков assert. Каждый блок check должен содержать как минимум один блок assert, но может содержать и несколько таких блоков. Каждый блок assert содержит атрибут condition и атрибут error_message.

В отличие от других пользовательских условий, утверждения не влияют на выполнение операции в OpenTofu. При неудачном утверждении выдается предупреждение, но текущая операция не прерывается. Это отличается от других пользовательских условий, например постусловия, при котором OpenTofu немедленно выдает ошибку, прерывает операцию и блокирует применение или планирование будущих ресурсов.

Аргументы условия в блоках assert могут ссылаться на источники данных с ограниченной областью действия внутри содержащего их блока check, а также на любые переменные, ресурсы, источники данных или выходные значения модулей в текущем модуле.

Подробнее об утверждениях.

Метааргументы​

В настоящее время блоки проверок не поддерживают метааргументы. Мы продолжаем собирать отзывы об этой функции, поэтому, если в вашем сценарии полезной была бы поддержка метааргументов в блоках проверок, сообщите нам.

Непрерывная проверка в TACOS (программном обеспечении для автоматизации и совместной работы с TF)​

TACOS (программное обеспечение для автоматизации и совместной работы с TF) может автоматически проверять, продолжают ли проходить проверки в конфигурации рабочего пространства после того, как OpenTofu подготовит новую инфраструктуру.

Выбор проверок или других пользовательских условий​

Блоки проверок обеспечивают наиболее гибкий способ проверки в OpenTofu. В утверждениях проверок можно ссылаться на выходные значения, переменные, ресурсы и источники данных. Проверки также можно использовать для моделирования любых альтернативных пользовательских условий. Однако это не означает, что все пользовательские условия следует заменять блоками проверок.

Между утверждениями в блоках проверок и другими пользовательскими условиями есть существенные различия в поведении. Главное из них — блоки проверок не влияют на выполнение операции в OpenTofu. Это неблокирующее поведение позволяет выбрать наиболее подходящий для вашего сценария тип проверки.

Выходные значения и переменные​

Постусловия выходных значений и проверки переменных позволяют задавать утверждения о входных и выходных данных.

Это один из случаев, когда может потребоваться заблокировать дальнейшее выполнение OpenTofu.

Например, OpenTofu бесполезно предупреждать о недопустимой входной переменной после применения всей конфигурации с этой переменной. В этом случае блок проверки предупредит о недопустимой входной переменной, не прерывая операцию. Блок проверки той же входной переменной сообщит о недопустимом значении и остановит операцию планирования или применения.

Предусловия и постусловия ресурсов​

Различие между предусловиями и постусловиями и блоками проверок тоньше.

Предусловия отличаются от других пользовательских условий тем, что выполняются до применения или планирования изменения ресурса. В разделе «Выбор между предусловиями и постусловиями» приведены рекомендации по выбору между предусловием и постусловием; те же соображения применимы и при выборе между предусловием и блоком проверки.

Часто постусловия можно использовать взаимозаменяемо с блоками проверок для проверки ресурсов и источников данных.

Например, можно переписать приведенный выше пример блока check, заменив его постусловием. В приведенном ниже коде используется блок postcondition, чтобы проверить, что веб-сайт возвращает ожидаемый код состояния 200.

Блок кода
data "http" "opentofu_org" {
  url = "https://www.opentofu.org"

  lifecycle {
    postcondition {
        condition = self.status_code == 200
        error_message = "${self.url} returned an unhealthy status code"
    }
  }
}

В обоих примерах с блоками check и postcondition проверяется, что веб-сайт возвращает код состояния 200 во время операции планирования или применения. Разница между этими блоками заключается в том, как каждый из них обрабатывает ошибку.

Если блок postcondition завершается с ошибкой, он блокирует выполнение текущей операции в OpenTofu. Если блок check завершается с ошибкой, он не блокирует выполнение операции в OpenTofu.

Если постусловие из приведенного выше примера не выполняется, восстановиться невозможно. OpenTofu блокирует любые последующие операции планирования или применения, если постусловие не выполняется на этапе планирования. Проблема возникает потому, что постусловие зависит не напрямую от конфигурации OpenTofu, а от сложного взаимодействия между несколькими ресурсами.

Мы рекомендуем использовать блоки проверок для оценки состояния инфраструктуры в целом. Постусловия рекомендуется использовать только в тех случаях, когда требуется гарантия для отдельного ресурса на основе его конфигурации.

Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.11/language/checks/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API