Spec-Zone.ru › OpenTofu 1.12

Проверки

Блок 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.12/language/checks/

Spec-Zone.ru

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