HashiCorpはTerraformプロバイダーコード生成ツールセットのテクニカルプレビューをリリースした。これにはOpenAPI仕様からTerraformプロバイダーコードを生成する新しいツールが含まれる。このリリースには、プロバイダーコードの仕様からTerraformプラグインフレームワークのコードを生成するツールも含まれている。
TerraformプロバイダはGoで書かれた実行可能なバイナリで、RPCインターフェイスを介してTerraformコアと他のサービス間のインターフェイスを提供する。HashiCorpのシニアソフトウェアエンジニアであるAustin Valle氏が指摘するように、プロバイダの作成はコードレイヤーに不整合をもたらす反復作業になりうる。Valle氏は、このコード生成ソリューションを "既存のプロバイダー開発者コミュニティによって拡張可能な共有仕様に基づいたスケーラブルなコード生成エコシステム "と表現している。
Terraformコード生成ワークフロー(クレジット:HashiCorp)
OpenAPIで文書化された仕様と相互作用するワークフローでは、OpenAPIプロバイダ仕様ジェネレータを使ってプロバイダコード仕様を生成できる。このツールは、OpenAPI仕様がバージョン3.1.xまたは3.0.xであることを必要とする。実行されると、Terraformプロバイダーコードを作成するためにフレームワークコードジェネレーターが使用できるプロバイダーコード仕様を出力する。
ジェネレーターconfigは、APIオペレーションとコンポーネントを適切なTerraformリソース、データソース、プロバイダーにマッピングするために使われるYAMLファイルである。例えば、データソースの仕様を生成するには、mapdata_sources
を使う。
data_sources:
thing:
read:
path: /thing/{id}
method: GET
プロバイダー・コードの仕様は、関連するGoバインディングを持つJSONスキーマとして実装されたバージョン管理されたインターフェースである。インターフェイスは階層化されており、データ・ソースなどのトップ・レベルの形式から、個々の型の詳細(必須、機密など)に至るまで、構造を詳細に記述している。
プロバイダーコード仕様は、Terraformプロバイダーコードを生成する新しいFramework Code Generatorと一緒に使うことができる。このCLIツールにはgenerate
とscaffold
の2つのコマンドがある。generate
コマンドはプロバイダコード仕様を入力とし、Terraformプラグインフレームワークコードを生成する。これは_gen.go
というサフィックスを持つGoファイルとして生成され、それ以上の編集はできない。
scaffold
コマンドは、あらかじめ定義されたテンプレートからTerraformプラグインフレームワークのコードをGoで作成するために使われる。これらはプラグインフレームワークの生成プロセスを簡略化するための出発点となる。
リリース時点では、ジェネレーターはスキーマとデータモデル型の出力をサポートしている。スキーマでは、すべてのフレームワーク機能が、入れ子に制限なく含まれる。仕様内で提供される場合、データモデル型は外部のGo型に変換される。GitHubのレポには、CRUDロジックをサポートするためにジェネレーターを拡張する計画があると書かれている。
設計ドキュメントにあるように、コード生成はベンダーやツールにとらわれず、拡張可能であることを意図している。OpenAPIの実装は、IDL、開発者が生成したスクリプト、API SDK情報など、他の潜在的な生成ソースを含む最初の実装であることを意図している。リリースの時点では、追加ソースのサポートに関する時間枠は提供されていない。
OpenAPI Provider Spec Generator、Terraform Plugin Framework Code Generator、そして関連するスキーマはすべて、MPL-2.0ライセンスの下でGitHubで利用可能である。すべてのコードジェネレータコンポーネントは現在技術プレビュー中である。質問やフィードバックはプラグイン開発コミュニティフォーラムで受け付けている。