2016-11-11 4 views
0

Terraformを使用して複数のVMを作成する際に問題が発生します。 同じnetwork-interface-idを選択しているために失敗するたびに発生します。では、Terraformコードを変更して、これをさまざまなネットワークインターフェイスで使用できるようにするにはどうすればよいですか?ここでテラフォームを通じて複数のVMを作成する必要があります

は私のテラフォームファイルです。

variable "node_count" {default = 2} 

resource "azurerm_network_interface" "terraform-CnetFace" { 
    name = "cacctni-${format("%02d", count.index+1)}" 
    location = "East US 2" 
    resource_group_name = "${azurerm_resource_group.terraform-test.name}" 

    ip_configuration { 
     name = "cIpconfig-${format("%02d", count.index+1)}" 
     subnet_id = "${azurerm_subnet.terraform-test.id}" 
     private_ip_address_allocation = "dynamic" 
    } 
    count = "${var.node_count}" 
} 

variable "confignode_count" {default = 2} 

resource "azurerm_virtual_machine" "terraform-test" { 
    name = "confignode-${format("%02d", count.index+1)}" 
    location = "East US 2" 
    resource_group_name = "${azurerm_resource_group.terraform-test.name}" 
    network_interface_ids = ["${azurerm_network_interface.terraform-CnetFace.id}"] 
    vm_size = "Standard_A0" 
    availability_set_id = "${azurerm_availability_set.terraform-test.id}" 

    storage_image_reference { 
     publisher = "Canonical" 
     offer = "UbuntuServer" 
     sku = "14.04.2-LTS" 
     version = "latest" 
    } 

    storage_os_disk { 
     name = "configosdisk-${format("%02d", count.index+1)}" 
     vhd_uri = "${azurerm_storage_account.terraform-test.primary_blob_endpoint}${azurerm_storage_container.terraform-test.name}/configosdisk-${format("%02d", count.index+1)}.vhd" 
     caching = "ReadWrite" 
     create_option = "FromImage" 
    } 

    storage_data_disk { 
    name   = "configdatadisk-${format("%02d", count.index+1)}" 
    vhd_uri  = "${azurerm_storage_account.terraform-test.primary_blob_endpoint}${azurerm_storage_container.terraform-test.name}/configdatadisk-${format("%02d", count.index+1)}.vhd" 
    disk_size_gb = "512" 
    create_option = "empty" 
    lun   = 0 
    } 

    os_profile { 
     computer_name = "confignode-${format("%02d", count.index+1)}" 
     admin_username = "ubuntu" 
     admin_password = "Qawzsx12345" 
    } 

    os_profile_linux_config { 
     disable_password_authentication = false 
    } 

    tags { 
     environment = "Production" 
    } 
    provisioner "local-exec" { 
     command = "sleep 30" 
    } 

    #Loop for Count 
    count = "${var.confignode_count}" 
} 

答えて

2

あなたがそれらをごループとして2つのリソースをリンクしようとしているなら、あなたは、ループ内で作成されたリソースのリストを取得するには、「スプラット」を使用する必要があり、正しいものを選択してください。これは、interpolation syntax docsresources docsで簡単に説明されています。

あなたはおそらくのような何かをしたい、あなたの場合は

variable "count" {default = 2} 

resource "azurerm_network_interface" "terraform-CnetFace" { 
    count = "${var.count}" 
    ... 
} 

resource "azurerm_virtual_machine" "terraform-test" { 
    count = "${var.count}" 
    ... 
    network_interface_ids = ["${element(azurerm_network_interface.terraform-CnetFace.*.id, count.index)}"] 
    ... 
} 

これは、作成したループ型のネットワーク・インタフェースごとに出力を公開し、それらの出力からidをつかみ、適切なazurerm_virtual_machineに渡すをループ。

+0

ありがとうございましたydaetskcoR。!!!これは私のために働いた。 – 10305059

関連する問題