Terraform默认脚本路径
我正在Azure中使用cloud init创建多个VM,它们是并行创建的,当其中任何一个失败时,我可以在日志中看到: 错误:执行“/tmp/terraform876543210.sh”时出错:进程已退出,状态为1 但我没有办法找出哪个VM出现故障,我需要对每个VM进行ssh并进行检查 脚本路径似乎是为配置而定义的 是否有一种方法可以将cloud init也重写为:/tmp/terraform_vmName_876543210.sh 我使用的不是provisioner而是cloud init,你知道如何强制terraform覆盖terraform sh文件吗 下面是我的脚本:Terraform默认脚本路径,terraform,terraform-provider-azure,cloud-init,Terraform,Terraform Provider Azure,Cloud Init,我正在Azure中使用cloud init创建多个VM,它们是并行创建的,当其中任何一个失败时,我可以在日志中看到: 错误:执行“/tmp/terraform876543210.sh”时出错:进程已退出,状态为1 但我没有办法找出哪个VM出现故障,我需要对每个VM进行ssh并进行检查 脚本路径似乎是为配置而定义的 是否有一种方法可以将cloud init也重写为:/tmp/terraform_vmName_876543210.sh 我使用的不是provisioner而是cloud init,你知
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"
})
)
}
和我的云初始化脚本:
## template: jinja
#cloud-config
runcmd:
- sudo /tmp/bootstrap.sh
write_files:
- path: /tmp/bootstrap.sh
permissions: 00700
content: |
#!/bin/sh -e
echo hello
根据您为地形找到的代码,它显示: DefaultUnixScriptPath用作将文件复制到的路径 如果未另行提供,则在Unix上远程执行 这是远程执行的配置。对于SSH的远程执行,您可以在中为复制文件设置
源
和目标
但它用于设置远程VM中的路径,而不是您执行Terraform的本地机器。您可以像这样覆盖文件名:
provisioner "file" {
source = "conf/myapp.conf"
destination = "/etc/terraform_$(var.vmName).conf"
...
}
感谢您的回复,但正如我所说,我不是在使用provisioner而是cloud init,我更新了我的问题以使其更清楚。此外,/tmp/terraform876543210.sh sh sh文件是由terraform本身创建的,我无法控制it@proximator你能分享
mycloudinit.tmpl
文件吗?@proximator实际上,如果您使用cloud init来配置VM,它将不会在路径/tmp/
中创建文件。我添加了它,非常感谢