Ограничения версий
Везде, где OpenTofu позволяет указать диапазон допустимых версий чего-либо, ожидается специальным образом отформатированная строка, называемая ограничением версии. Ограничения версий используются при настройке:
- Модулей
- Требований к провайдерам
-
Параметра
required_versionв блокеterraform.
Синтаксис ограничений версий
Синтаксис ограничений версий в OpenTofu очень похож на синтаксис, используемый в других системах управления зависимостями, таких как Bundler и NPM.
version = ">= 1.2.0, < 2.0.0"
Ограничение версии — это строковый литерал, содержащий одно или несколько условий, разделённых запятыми.
Каждое условие состоит из оператора и номера версии.
Номер версии должен представлять собой последовательность чисел, разделённых точками (например, 1.2.0); при необходимости к нему можно добавить суффикс, указывающий на бета-версию.
Допустимы следующие операторы:
-
=(или отсутствие оператора): допускает только один точный номер версии. Нельзя комбинировать с другими условиями. -
!=: исключает точный номер версии. -
>,>=,<,<=: сравнивают с указанной версией и допускают версии, для которых сравнение истинно. Оператор «больше» запрашивает более новые версии, а оператор «меньше» — более старые. -
~>: позволяет увеличивать только самый правый компонент версии. Например, чтобы разрешить новые версии исправлений в рамках конкретной минорной версии, укажите полный номер версии:~> 1.0.4позволит установить1.0.5и1.0.10, но не1.1.0. Этот оператор обычно называют пессимистическим оператором ограничения.
Поведение ограничений версий
Номер версии, удовлетворяющий всем применимым ограничениям, считается допустимым.
OpenTofu проверяет ограничения версий, чтобы определить, есть ли у него допустимые версии самого OpenTofu, необходимых подключаемых модулей провайдеров и необходимых модулей. Для подключаемых модулей и модулей будет использоваться самая новая установленная версия, удовлетворяющая применимым ограничениям.
Если у OpenTofu нет допустимой версии необходимого подключаемого модуля или модуля, он попытается загрузить самую новую версию, удовлетворяющую применимым ограничениям.
Если OpenTofu не может получить допустимые версии внешних зависимостей или у него нет допустимой версии самого себя, он не будет выполнять планы, применения или операции с состоянием.
И корневой модуль, и любой дочерний модуль могут ограничивать допустимые версии OpenTofu и используемых ими провайдеров. OpenTofu считает эти ограничения равнозначными и продолжит работу, только если будут выполнены все они.
Предварительная версия — это номер версии с суффиксом, добавленным после дефиса, например 1.2.0-beta. Предварительную версию можно выбрать только с помощью ограничения на точную версию (оператор = или отсутствие оператора). Предварительные версии не соответствуют неточным операторам, таким как >=, ~> и т. д.
Рекомендации
Версии модулей
-
При использовании сторонних модулей указывайте конкретные версии, чтобы обновления происходили только тогда, когда вам это удобно.
-
Для модулей, которые поддерживаются в вашей организации, можно указать диапазоны версий, если семантическое версионирование используется последовательно или если существует чётко определённый процесс выпуска, предотвращающий нежелательные обновления.
Версии ядра OpenTofu и провайдеров
-
В повторно используемых модулях следует указывать только минимальные допустимые версии OpenTofu и провайдеров, например
>= 0.12.0. Это помогает избежать известных несовместимостей и при этом позволяет пользователям модуля обновляться до более новых версий OpenTofu, не изменяя сам модуль. -
В корневых модулях следует использовать ограничение
~>, чтобы задать для каждого используемого провайдера нижнюю и верхнюю границы версий.
Поддержка версий OpenTofu и Terraform
- Если конфигурация должна поддерживаться и OpenTofu, и Terraform, например в модулях, используемых обоими движками, используйте файл
providers.tofu, чтобы задать ограничение версии OpenTofu, переопределяющее ограничение, определённое вproviders.tf. Подробнее о приоритете расширений.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/language/expressions/version-constraints/