Usando o Terraform para criar instâncias do GCE, erro ocorrendo na conexão do disco secundário?

1

Meu arquivo terraform é assim.

resource "google_compute_disk" "sqlserversecondary" {
    name = "sql-server-secondary"
    type = "pd-ssd"
    zone = "us-central1-a"
    size = "512"
}

resource "google_compute_instance" "sqlserver2016rc2" {
    name = "sqlserver2016rc2"
    machine_type = "n1-highmem-8"

    tags = ["database", "sqlserver2016rc2"]
    zone = "us-central1-a"

    disk {
        image = "sqlserver2016"
        size = "120"
    }

    disk {
        image = "sql-server-secondary"
    }

    network_interface {
        network = "default"
        access_config {
            // Ephemeral IP
        }
    }

    service_account {
        scopes = ["userinfo-email", "compute-ro", "storage-ro"]
    }
}

O segundo disco existe no GCE, mas nessa situação particular eu continuo recebendo o seguinte erro.

Error applying plan:

1 error(s) occurred:

* google_compute_instance.sqlserver2016rc2: Error creating instance: googleapi: Error 400: Invalid value for field 'resource.disks[1].initializeParams': ''. Cannot specify initializeParams for non-boot persistent disks., invalid
    
por Adron 18.04.2016 / 20:03

1 resposta

4

Para o seu segundo disco, você deseja usar disk = "sql-server-secondary" em vez de image como o identificador. Além disso, é melhor fazer referência ao segundo disco usando a sintaxe de interpolação do Terraform (por exemplo, ${...} ) para garantir que seus recursos sejam criados e gerenciados na ordem apropriada.

resource "google_compute_disk" "sqlserversecondary" {
  name = "sql-server-secondary"
  type = "pd-ssd"
  zone = "us-central1-a"
  size = "512"
}

resource "google_compute_instance" "sqlserver2016rc2" {
  name         = "sqlserver2016rc2"
  machine_type = "n1-highmem-8"

  tags = ["database", "sqlserver2016rc2"]
  zone = "us-central1-a"

  disk {
    image = "ubuntu-1404-trusty-v20160114e"
    size  = "120"
  }

  disk {
    disk = "${google_compute_disk.sqlserversecondary.name}" // s/image/disk
  }

  network_interface {
    network = "default"

    access_config {
      // Ephemeral IP
    }
  }

  service_account {
    scopes = ["userinfo-email", "compute-ro", "storage-ro"]
  }
}

O Terraform define InitializeParams para discos de imagens pré-existentes ( código ) que está causando o erro que você recebeu. Parece que pode haver um bug nesse cenário, anexando um disco que não seja de inicialização de uma imagem existente, mas ainda estou pesquisando isso.

Espero que isso ajude!

    
por 18.04.2016 / 22:39