web-dev-qa-db-fra.com

Comment ajouter une clé ssh à une instance GCP en utilisant terraform?

J'ai donc un script terraform qui crée des instances dans Google Cloud Platform, je veux pouvoir avoir mon script terraform ajouter également ma clé ssh aux instances que je crée afin de pouvoir les provisionner via ssh. Voici mon script terraform actuel.

#PROVIDER INFO
provider "google" {
  credentials = "${file("account.json")}"
  project     = "myProject"
  region      = "us-central1"
}


#MAKING CONSUL SERVERS
resource "google_compute_instance" "default" {
  count    =  3
  name     =  "a-consul${count.index}"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  disk {
    image = "ubuntu-1404-trusty-v20160627"
  }

  # Local SSD disk
  disk {
    type    = "local-ssd"
    scratch = true
  }

  network_interface {
    network = "myNetwork"
    access_config {}
  }
}

Que dois-je ajouter à cela pour que mon script terraform ajoute ma clé ssh /Users/myUsername/.ssh/id_rsa.pub?

15
Alex Cohen

Je pense que quelque chose comme ça devrait fonctionner:

  metadata = {
    ssh-keys = "${var.gce_ssh_user}:${file(var.gce_ssh_pub_key_file)}"
  }

https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys décrit le mécanisme des métadonnées, et j'ai trouvé cet exemple sur https: // github .com/hashicorp/terraform/issues/6678

25
mblakele

Juste pour info. À partir de 0,12, il semble que le bloc devrait ressembler à:

resource "google_compute_instance" "default" {
  # ...

  metadata = {
    ssh-keys = join("\n", [for user, key in var.ssh_keys : "${user}:${key}"])
  }

  # ...
}

(Remarque = signe après metadata jeton et ssh-keys contre sshKeys).

5
courteouselk

En voici un testé.

  metadata {
    sshKeys = "${var.ssh_user}:${var.ssh_key} \n${var.ssh_user1}:${var.ssh_key1}"
}
3
tanaji yadav

Si vous voulez plusieurs clés, vous pouvez utiliser heredoc comme ceci

  metadata = {
    "ssh-keys" = <<EOT
<user>:<key>
<user>:<key>
EOT
  }

Je suis resté avec la mise en forme bizarre ici dans le post qui terraform fmt m'a fourni.

1
hashier