Terraform Remote-Exec на Windows с SSH - PullRequest
1 голос
/ 17 мая 2019

Я установил сервер Windows и установил ssh с помощью Chocolatey.Если я запускаю это вручную, у меня нет проблем с подключением и выполнением моих команд.Когда я пытаюсь использовать Terraform для запуска своих команд, он успешно соединяется, но не запускает никаких команд.

Я начал с использования winrm, а затем мог выполнять команды, но из-за некоторых проблем с созданием кластера сервисной фабрики поверхwinrm Я решил попробовать вместо этого использовать ssh, и при ручном запуске все работало, и кластер работал.Так что, похоже, путь вперед.

Я настроил виртуальную машину Linux и получил ssh, работающий с использованием закрытого ключа.Поэтому я попытался использовать тот же конфиг, что и для виртуальной машины Linux в Windows, но он по-прежнему просил меня использовать мой пароль.

В чем может быть причина того, что я могу запускать команды через ssh вручную ииспользуя только Terraform connect, но команды не запускаются?Я запускаю это в OpenStack с Windows 2016

null_resource.sf_cluster_install (remote-exec): Connecting to remote host via SSH...
null_resource.sf_cluster_install (remote-exec):   Host: 1.1.1.1
null_resource.sf_cluster_install (remote-exec):   User: Administrator
null_resource.sf_cluster_install (remote-exec):   Password: true
null_resource.sf_cluster_install (remote-exec):   Private key: false
null_resource.sf_cluster_install (remote-exec):   SSH Agent: false
null_resource.sf_cluster_install (remote-exec):   Checking Host Key: false
null_resource.sf_cluster_install (remote-exec): Connected!
null_resource.sf_cluster_install: Creation complete after 4s (ID: 5017581117349235118)

Вот скрипт, который я использую для запуска команд:

resource "null_resource" "sf_cluster_install" {
  # count = "${local.sf_count}"
  depends_on = ["null_resource.copy_sf_package"]

  # Changes to any instance of the cluster requires re-provisioning
  triggers = {
    cluster_instance_ids = "${openstack_compute_instance_v2.sf_servers.0.id}"
  }

  connection = {
    type = "ssh"
    host = "${openstack_networking_floatingip_v2.sf_floatIP.0.address}"
    user = "Administrator"

   # private_key = "${file("~/.ssh/id_rsa")}"

   password = "${var.admin_pass}"
 }

  provisioner "remote-exec" {
    inline = [
      "echo hello",
      "powershell.exe Write-Host hello",
      "powershell.exe New-Item C:/tmp/hello.txt -type file"
    ]
  }
}

1 Ответ

0 голосов
/ 12 июня 2019

Поместите блок connection внутрь блока provisioner:

provisioner "remote-exec" {
  connection = {
    type = "ssh"
    ...
  }

  inline = [
    "echo hello",
    "powershell.exe Write-Host hello",
    "powershell.exe New-Item C:/tmp/hello.txt -type file"
  ]
}
...