本文へスキップ

コマンド: validate

tofu validateコマンドは、ディレクトリ内の設定ファイルを検証します。リモート状態、プロバイダーAPIなど、リモートサービスにはアクセスしません。

validateは、既存の状態に関係なく、設定が構文的に有効で内部的に整合性があるかどうかを検証するチェックを実行します。そのため、属性名や値の種類の正確性など、再利用可能なモジュールの一般的な検証に主に役立ちます。

このコマンドは、例えばテキストエディタの保存後のチェックとして、またはCIシステムにおける再利用可能なモジュールのテストステップとして、自動的に実行しても安全です。

検証には、参照されているプラグインとモジュールがインストールされた初期化された作業ディレクトリが必要です。設定されたバックエンドにアクセスせずに検証のための作業ディレクトリを初期化するには、以下を使用します。

コードブロック
$ tofu init -backend=false

特定の実行(特定のターゲットワークスペース、入力変数値など)のコンテキストで設定を検証するには、暗黙的な検証チェックを含むtofu planコマンドを使用します。

使用方法

使用方法: tofu validate [オプション]

このコマンドは次のオプションを受け付けます。

  • -json - テキストエディタの統合やその他の自動化されたシステムで使用できる、マシン可読のJSON形式で出力を生成します。常にカラー表示を無効にします。

  • -no-color - 指定した場合、出力には色が含まれません。

  • -var 'NAME=VALUE' - 設定のルートモジュールの入力変数の値を1つ設定します。複数の変数を設定するには、このオプションを複数回使用します。詳細についてはコマンドラインでの入力変数を参照してください。

  • -var-file=FILENAME - "tfvars"ファイルの定義を使用して、設定のルートモジュールの複数の入力変数の値を設定します。複数のファイルの値を含めるには、このオプションを複数回使用します。

-varおよび-var-fileオプション以外にも、ルートモジュール内の入力変数の値を設定する方法はいくつかあります。詳細についてはルートモジュール変数への値の割り当てを参照してください。

JSON出力形式

-jsonオプションを使用すると、OpenTofuはJSON形式で検証結果を生成し、テキストエディタでのエラーの強調表示など、ツールとの統合に使用できるようにします。

すべてのJSON出力オプションと同様に、OpenTofuは検証タスクを開始する前にエラーに遭遇する可能性があり、そのためJSON出力設定の対象外となる可能性があります。そのため、OpenTofuの出力を消費する外部ソフトウェアは、有効なJSONではないstdout上のデータを見つける準備をする必要があります。そのデータは一般的なエラーケースとして扱う必要があります。

出力にはformat_versionキーが含まれており、その値は"1.0"です。このバージョンは次の意味を持ちます。

  • 下位互換性のある変更または追加に対しては、マイナーバージョン(例:"1.1")を増分します。将来のマイナーバージョンとの前方互換性を維持するために、認識できないオブジェクトのプロパティは無視してください。
  • 下位互換性のない変更に対しては、メジャーバージョン(例:"2.0")を増分します。サポートされていないメジャーバージョンを報告する入力は拒否してください。

OpenTofu 1.0互換性に関する約束の範囲内でのみ、新しいメジャーバージョンを導入します。

通常の場合、OpenTofuは標準出力ストリームにJSONオブジェクトを出力します。最上位のJSONオブジェクトには、次のプロパティがあります。

  • valid (ブール値): OpenTofuが現在の設定を有効と見なす場合はtrue、エラーを検出した場合はfalseを示すことで、全体の検証結果を要約します。

  • error_count (数値): OpenTofuが検出したエラーの数を示す0以上の整数です。validtrueの場合、error_countは常に0になります。これは、エラーの存在が設定が無効であることを示すためです。

  • warning_count (数値): OpenTofuが検出した警告の数を示す0以上の整数です。警告はOpenTofuが設定を無効と見なす原因にはなりませんが、ユーザーが考慮し、解決する必要がある可能性のある潜在的な注意点を示しています。

  • diagnostics (オブジェクトの配列): OpenTofuからのエラーまたは警告をそれぞれ記述する入れ子になったオブジェクトのJSON配列です。

diagnostics内の入れ子になったオブジェクトには、次のプロパティがあります。

  • severity (文字列): 診断の重大度を示す文字列キーワードで、"error"または"warning"のいずれかです。

    エラーが存在すると、OpenTofu は設定が無効であると判断しますが、警告はユーザーへのアドバイスや注意であり、設定の使用をブロックしません。将来のOpenTofuのバージョンでは、新しい重大度キーワードが導入される可能性があるため、ユーザーは理解できない重大度値を受け入れて無視できるようにする必要があります。

  • summary (文字列): 診断が報告している問題の性質を簡潔に説明する記述。

    OpenTofu の通常のヒューマンオリエンテッドな診断メッセージでは、summary は診断の「見出し」のようなものであり、「Error:」または「Warning:」のインジケーターの後に表示されます。

    Summary は通常、短い単文ですが、完全な診断を返すように設計されていないサブシステムからのエラーを返す結果、エラーメッセージ全体が summary になる場合、長くなることもあります。そのような場合、summary には改行文字が含まれることがあり、レンダラーはメッセージをユーザーに視覚的に提示する際に、それを尊重する必要があります。

  • detail (文字列): 問題に関する詳細情報を提供するオプションの追加メッセージ。

    OpenTofu の通常のヒューマンオリエンテッドな診断メッセージでは、detail は見出しとソース位置参照の後に表示されるテキストの段落を提供します。

    Detail メッセージは多くの場合、複数の段落からなり、段落ではない行が混在している可能性があるため、ユーザーに detail メッセージを表示することを目的としたツールは、先頭にスペースがない行を段落として扱い、先頭にスペースがある行を整形済みテキストとして区別する必要があります。次に、レンダラーは段落をレンダリングコンテナの幅に合わせて折り返しますが、整形済み行は折り返しません。

    一部の OpenTofu detail メッセージには、箇条書きをマークするために ASCII 文字を使用した箇条書きの近似が含まれています。これは契約上の書式設定規則ではないため、レンダラーはそれに依存することを避け、それらの行を段落または整形済みテキストとして扱う必要があります。この形式の将来のバージョンでは、他のテキスト規則に関する追加の規則が定義される可能性がありますが、後方互換性は維持されます。

  • range (オブジェクト): 診断メッセージが関連する設定ソースコードの一部を参照するオプションのオブジェクト。エラーの場合、これは通常、無効と検出された特定のブロックヘッダー、属性、または式の範囲を示します。

    ソース範囲は、現在の作業ディレクトリからの相対パスとしてファイル名を指定するfilenameプロパティと、以下で説明するソース位置を記述する2つのプロパティstartendを持つオブジェクトです。

    すべての診断メッセージが設定の特定の部分に関連付けられているわけではないため、関連性がない診断メッセージの場合、range は省略されるかnullになります。

  • snippet (オブジェクト): 診断メッセージが関連する設定ソースコードの抜粋を含むオプションのオブジェクト。

    snippet 情報には以下が含まれます。

    • context (文字列): 診断のルートコンテキストの概要を示すオプションの記述。たとえば、診断をトリガーした式を含むリソースブロックとなる場合があります。一部の診断ではこの情報は利用できないため、このプロパティはnullになります。

    • code (文字列): 診断のソースを含む OpenTofu 設定のスニペット。これは複数行になる場合があり、診断をトリガーした式の周囲に追加の設定ソースコードが含まれる場合があります。

    • start_line (数値): ソースファイル内でcode抜粋が始まる位置を表す1から始まる行数。これは必ずしもrange.start.lineと同じ値ではありません。codeは診断のソースの前に1行以上のコンテキストを含む可能性があるためです。

    • highlight_start_offset (数値): 診断をトリガーした式の開始点を指す、code文字列への0から始まる文字オフセット。

    • highlight_end_offset (数値): 診断をトリガーした式の終了点を指す、code文字列への0から始まる文字オフセット。

    • values (オブジェクトの配列): 複雑な式における診断のソースを理解するのに役立つ可能性のある0個以上の式の値を含みます。これらの式値オブジェクトについては以下で説明します。

ソース位置

診断オブジェクトのrangeプロパティで使用されるソース位置オブジェクトには、次のプロパティがあります。

  • byte (数値): 指定されたファイルへの0から始まるバイトオフセット。

  • line (数値): 指定されたファイル内で関連する位置を含む行の1から始まる行数。

  • column (数値): lineで示された行の先頭からのUnicode文字の1から始まるカウント。

start位置は包括的ですが、end位置は排他的です。特定のエラーメッセージに使用される正確な位置は、人間の解釈のみを目的としています。

式値

式値オブジェクトは、診断をトリガーした式の parts の値に関する追加情報を提供します。これは、for_eachや同様の構成を使用する場合、エラーの原因となっている値を正確に特定するために特に役立ちます。このオブジェクトには2つのプロパティがあります。

  • traversal (文字列): var.instance_countなどのHCLのようなトラバーサル文字列。複雑なインデックスキー値は省略される場合があるため、これは常に有効な解析可能なHCLとは限りません。この文字列の内容は、人間が読み取れることを目的としています。

  • statement (文字列): 診断がトリガーされたときの式の値を説明する短い英語の断片。この文字列の内容は、人間が読み取れることを目的としており、将来のバージョンのOpenTofuで変更される可能性があります。