Spec-Zone.ru › OpenTofu 1.10

Проверки

Блок 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 meta-arguments. Источники данных с ограниченной областью действия не поддерживают метааргументы 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.10/language/checks/

Spec-Zone.ru

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