4

Terraform に次のリソースがあります。

provider "docker" {
    host = "tcp://${digitalocean_droplet.docker_server.ipv4_address}:2376/"
}

ipv4_addressこれは、docker マシンに接続できるようになる前に、値がわかっていることに依存しています。この値は、別のリソースがプロビジョニングされるまで不明です。

resource "digitalocean_droplet" "docker_server" {
    image = "docker-18-04"
    name = "docker_server"
    region = "nyc2"
    size = "512mb"
    private_networking = true
    ssh_keys = [
      var.ssh_fingerprint
    ]

    connection {
        user = "root"
        type = "ssh"
        private_key = file(var.pvt_key)
        timeout = "2m"
    }
}

を実行するterraform planと、次のエラーが表示されます。

エラー: Docker クライアントの初期化中にエラーが発生しました: Docker ホスト `` を解析できません

docker.tf の 1 行目、プロバイダー "docker": 1: プロバイダー "docker" {

ipv4_addressDocker プラグインがプロビジョニングされる前に Docker マシンに接続しようとしているため、 は空に見えます。接続を試行する前に、マシンがプロビジョニングされるのを待つように指示するにはどうすればよいですか?


私が試したことの1つ:

provider "docker" {
    host = "tcp://${digitalocean_droplet.docker_server.ipv4_address}:2376/"
    depends_on = [
        digitalocean_droplet.docker_server.ipv4_address,
    ]
}

これを行うと、次のエラーが表示されます。

エラー:プロバイダー ブロックの予約済み引数名

docker.tf の 4 行目、プロバイダ "docker": 4: depends_on = [

プロバイダー引数名「depends_on」は、Terraform が将来のバージョンで使用するために予約されています。

しかし、もっと読んでdepends_onみると、とにかくそれが解決策だとは思いません。

4

1 に答える 1