GCP でいくつかの VM をセットアップして独自の Kubernetes プラットフォームを構築できるように、テラフォーム ファイルを作成しています (はい、Google には独自のエンジンがありますが、いくつかのカスタム アイテムを使用したいと考えています)。Kubespray プロジェクトの他のセットアップと同様に、.tf ファイルを作成してスタック全体を作成することができました。AWS で VM をテラフォーミングするために行うことのようなものです。
自動化する必要がある最後の部分は、Ansible のホスト ファイルの作成です。
google_compute_region_instance_group
各インスタンスを GCP 内の異なる AZ に配置するというリソースを使用して、マスターとワーカーを作成します。ここで、これらのインスタンスに与えるホスト名と IP を取得する必要があります。私が抱えている問題は、それらが動的に作成されたリソースであることです。この情報を引き出すには、データ ソースを使用して情報を取得します。
これが私が今持っているものです。
data.google_compute_region_instance_group.data_masters.instances
[
{
"instance" = "https://www.googleapis.com/compute/v1/projects/appportablityphase2/zones/us-east1-c/instances/k8-masters-4r2f"
"named_ports" = []
"status" = "RUNNING"
},
{
"instance" = "https://www.googleapis.com/compute/v1/projects/appportablityphase2/zones/us-east1-d/instances/k8-masters-qh64"
"named_ports" = []
"status" = "RUNNING"
},
{
"instance" = "https://www.googleapis.com/compute/v1/projects/appportablityphase2/zones/us-east1-b/instances/k8-masters-w9c8"
"named_ports" = []
"status" = "RUNNING"
},
]
ご覧のとおり、出力はリストとマップが混在しています。この行でインスタンスのセルフ URL だけを取得できます。
lookup(data.google_compute_region_instance_group.data_masters.instances[0], "instance")
https://www.googleapis.com/compute/v1/projects/appportablityphase2/zones/us-east1-c/instances/k8-masters-4r2f
次に、インスタンス名を分割して取得できます。これは、Terraform では把握できない難しい部分です。上記の行では[0]
、インスタンス情報を呼び出すために使用する必要があります。次に、3 つまたは 3 つを超える可能性があるすべてのインスタンスを反復処理する必要があります。
このデータ ソース タイプでこれを行う方法が見つかりません。count.index を試してみましたが、データ ソースではなくリソース タイプでのみサポートされています。スプラット構文も試しましたが、うまくいきませんでした。