azure - 如何使用 Terraform 的文件配置程序从本地计算机复制到虚拟机?

标签 azure terraform

我是 Terraform 的新手,到目前为止已经成功在 Azure 上启动并运行了基本的 VM(加上资源管理器修剪)。我想到的下一个任务是让 Terraform 将文件从本地计算机复制到新创建的实例中。理想情况下,我正在寻找一个解决方案,每次运行应用命令时都会复制文件。

我觉得我已经很接近了,但到目前为止,一旦我申请,我就会收到无尽的“仍在创建...”语句(文件为 0kb,所以几分钟后,我感觉可以安全放弃)。

到目前为止,这就是我所得到的(基于此代码):https://stackoverflow.com/a/37866044/4941009

网络

resource "azurerm_public_ip" "pub-ip" {
    name = "PublicIp"
    location = "${var.location}"
    resource_group_name = "${azurerm_resource_group.rg.name}"
    public_ip_address_allocation = "Dynamic"
    domain_name_label = "${var.hostname}"
}

虚拟机

resource "azurerm_virtual_machine" "vm" {
  name                  = "${var.hostname}"
  location              = "${var.location}"
  resource_group_name   = "${azurerm_resource_group.rg.name}"
  vm_size               = "${var.vm_size}"
  network_interface_ids = ["${azurerm_network_interface.nic.id}"]

  storage_image_reference {
    publisher = "${var.image_publisher}"
    offer     = "${var.image_offer}"
    sku       = "${var.image_sku}"
    version   = "${var.image_version}"
  }

  storage_os_disk {
    name          = "${var.hostname}osdisk1"
    vhd_uri       = "${azurerm_storage_account.stor.primary_blob_endpoint}${azurerm_storage_container.cont.name}/${var.hostname}osdisk.vhd"
    os_type       = "${var.os_type}"
    caching       = "ReadWrite"
    create_option = "FromImage"
  }

  os_profile {
    computer_name  = "${var.hostname}"
    admin_username = "${var.admin_username}"
    admin_password = "${var.admin_password}"
  }

  os_profile_windows_config {
    provision_vm_agent = true
  }

  boot_diagnostics {
    enabled     = true
    storage_uri = "${azurerm_storage_account.stor.primary_blob_endpoint}"
  }

  tags {
      environment = "${var.environment}"
  }
}

文件配置器

resource "null_resource" "copy-test-file" {

  connection {
    type     = "ssh"
    host     = "${azurerm_virtual_machine.vm.ip_address}"
    user     = "${var.admin_username}"
    password = "${var.admin_password}"
  }

  provisioner "file" {
    source      = "test.txt"
    destination = "/tmp/test.txt"
  }

}

顺便说一句,如果我将错误的登录详细信息传递给配置程序(即在创建虚拟机后重新运行此命令并向配置程序提供不同的密码),则行为是相同的。谁能建议我哪里出错了?

最佳答案

我最终成功了。老实说,我有点忘记了这个问题,所以我不记得我的确切问题是什么,但下面的示例似乎适用于我的实例:

resource "null_resource" remoteExecProvisionerWFolder {

  provisioner "file" {
    source      = "test.txt"
    destination = "/tmp/test.txt"
  }

  connection {
    host     = "${azurerm_virtual_machine.vm.ip_address}"
    type     = "ssh"
    user     = "${var.admin_username}"
    password = "${var.admin_password}"
    agent    = "false"
  }
}

所以看起来这里唯一的区别是添加了 agent = "false"。这是有道理的,因为 Windows 只有一个 SSH 身份验证代理,而且我之前可能没有明确指定使用该代理。然而,很可能我最终改变了配置中其他地方的某些内容。抱歉, future 的人们在这方面没有提供太多帮助。

关于azure - 如何使用 Terraform 的文件配置程序从本地计算机复制到虚拟机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48567881/

相关文章:

azure - 如何使用 Kudu 控制台删除 Azure 应用服务文件夹中的所有文件

Terraform 在每个 Terraform 应用上创建一个新的 EBS 快照

azure - 如何将map(list(string)和map(string)定义为单个变量 block 中的变量类型?

json - 如何在 JSON 文件中添加 terraform 变量

azure - 无法坚持使用 SSL 的应用程序网关重定向的自定义域

c# - 使用 Azure SignalR 服务和 Azure Functions 进行本地开发

基于 Azure Kubernetes token 的 ML Web 服务身份验证

terraform - 如何将变量传递给 heml.tf 中的 yaml 文件?

azure - Terraform 对动态资源的 ignore_changes

c# - 从 cosmos 数据库按时间获取最新记录时出现问题