terraform - Terraform 默认脚本路径
问题描述
我正在使用 cloud-init 在 Azure 中创建多个 VM,它们是并行创建的,当其中任何一个失败时,我可以在日志中看到:
错误:执行“/tmp/terraform_876543210.sh”时出错:进程以状态1退出
但我无法确定哪个 VM 出现故障,我需要对它们中的每一个进行 ssh 并检查脚本路径似乎是为配置Terraform定义的
有没有办法为 cloud-init 覆盖它,例如: /tmp/terraform_vmName_876543210.sh ?
我没有使用配置器而是 cloud-init,知道如何强制 terraform 覆盖 terraform sh 文件吗?
在我的脚本下面:
resource "azurerm_linux_virtual_machine" "example" {
name = "example-machine"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
size = "Standard_F2"
admin_username = "adminuser"
network_interface_ids = [
azurerm_network_interface.example.id,
]
admin_ssh_key {
username = "adminuser"
public_key = file("~/.ssh/id_rsa.pub")
}
os_disk {
caching = "ReadWrite"
storage_account_type = "Standard_LRS"
}
source_image_reference {
publisher = "Canonical"
offer = "UbuntuServer"
sku = "16.04-LTS"
version = "latest"
}
custom_data = base64encode(templatefile(
"my-cloud-init.tmpl", {
var1 = "value1"
var2 = "value2"
})
)
}
还有我的 cloud-init 脚本:
## template: jinja
#cloud-config
runcmd:
- sudo /tmp/bootstrap.sh
write_files:
- path: /tmp/bootstrap.sh
permissions: 00700
content: |
#!/bin/sh -e
echo hello
解决方案
从您为 Terraform 找到的代码中,它显示:
DefaultUnixScriptPath 用作将文件复制到的路径,以便在 Unix 上远程执行(如果未另外提供)。
这是远程执行的配置。source
而对于 SSH 的远程执行,可以destination
在provisioner "file"
.
但它用于设置远程 VM 中的路径,而不是您执行 Terraform 的本地计算机。您可以像这样覆盖文件名:
provisioner "file" {
source = "conf/myapp.conf"
destination = "/etc/terraform_$(var.vmName).conf"
...
}
推荐阅读
- timer - SwiftUI:如何构建可自定义的计时器倒计时及其单独的视图
- c++ - 如何使用 Vulkan 编译 HLSL 着色器?
- php - Web 服务器应如何响应 RFC 8058 List-Unsubscribe 或 List-Unsubscribe-Post?
- javascript - 在刷新之前限制按钮使用一次?
- database - 如何解决 OpenShift 集群中多个 pod 中的 liquibase 等待更改日志锁定问题?
- python - Python 从 iFrame 中抓取财务数据
- azure - AZ CLI - 列出所有资源组为空
- docker - docker:当我只使用--tty 或-t(不带-i)以实现与--rm 一起的彩色输出时,docker 不会在 ctrl+c 上停止
- windows - 如何使用批处理脚本压缩多个文件夹
- c# - 请求的 QueryString 本地化区域性在具有 AJAX 请求的 ASP.NET Core Razor 页面模型中不起作用