メインコンテンツにスキップ

バージョン制約

OpenTofuでは、許容できるバージョンの範囲を指定できる箇所では、バージョン制約と呼ばれる特殊な形式の文字列が想定されています。バージョン制約は、以下の設定時に使用されます。

バージョン制約の構文

OpenTofuのバージョン制約の構文は、BundlerやNPMなどの他の依存関係管理システムで使用される構文と非常に似ています。

コードブロック
version = ">= 1.2.0, < 2.0.0"

バージョン制約は、1つ以上の条件を含む文字列リテラルで、条件はコンマで区切られます。

各条件は、演算子とバージョン番号で構成されます。

バージョン番号は、ピリオドで区切られた一連の数字(例:1.2.0)で、ベータリリースを示す接尾辞が付く場合があります。

以下の演算子が有効です。

  • =(または演算子なし):正確に1つのバージョン番号のみを許可します。他の条件と組み合わせることはできません。

  • !=:正確なバージョン番号を除外します。

  • >>=<<=:指定されたバージョンとの比較で、比較がtrueとなるバージョンを許可します。「より大きい」は新しいバージョンを、「より小さい」は古いバージョンを要求します。

  • ~>:*最右端の*バージョンコンポーネントのみを増分することを許可します。たとえば、特定のマイナーリリース内で新しいパッチリリースを許可するには、完全なバージョン番号を使用します。~> 1.0.4は、1.0.51.0.10のインストールを許可しますが、1.1.0は許可しません。これは通常、悲観的制約演算子と呼ばれます。

バージョン制約の動作

適用されるすべての制約を満たすバージョン番号は、許容されるものと見なされます。

OpenTofuは、バージョン制約を参照して、自身、必要なプロバイダープラグイン、必要なモジュールの許容可能なバージョンがあるかどうかを判断します。プラグインとモジュールの場合、適用される制約を満たす最新のインストール済みバージョンが使用されます。

OpenTofuに必要なプラグインまたはモジュールの許容可能なバージョンがない場合、適用される制約を満たす最新のバージョンをダウンロードしようとします。

OpenTofuが外部依存関係の許容可能なバージョンを取得できない場合、または自身の許容可能なバージョンがない場合、計画、適用、状態操作アクションは続行されません。

ルートモジュールと子モジュールの両方で、OpenTofuと使用するプロバイダーの許容可能なバージョンを制約できます。OpenTofuはこれらの制約を等しいとみなし、すべてが満たされる場合にのみ続行します。

プレリリースバージョンとは、1.2.0-betaのように、ダッシュで導入された接尾辞を含むバージョン番号です。プレリリースバージョンは、*正確な*バージョン制約(=演算子または演算子なし)によってのみ選択できます。プレリリースバージョンは、>=~>などの不正確な演算子とは一致しません。

ベストプラクティス

モジュールバージョン

  • サードパーティのモジュールに依存している場合は、更新が都合の良いときだけ行われるように、特定のバージョンを要求してください。

  • 組織内で管理されているモジュールの場合は、セマンティックバージョニングが一貫して使用されている場合、または望ましくない更新を回避する明確に定義されたリリースプロセスがある場合に、バージョン範囲の指定が適切な場合があります。

OpenTofuコアとプロバイダーのバージョン

  • 再利用可能なモジュールは、OpenTofuとプロバイダーの最小許容バージョン(例:>= 0.12.0)のみを制約する必要があります。これは、既知の非互換性を回避するのに役立ち、モジュールを使用するユーザーはモジュールを変更せずにOpenTofuの新しいバージョンにアップグレードできます。

  • ルートモジュールは、~>制約を使用して、依存する各プロバイダーのバージョンの下限と上限の両方を設定する必要があります。