azurerm_linux_虚拟机内的cloud init脚本中的错误处理
当我使用terraform部署虚拟机时,我会运行一个定制的shell脚本,这可能会引发错误 我的问题是,如何处理这些错误,因为不管脚本的返回代码是什么,terraform都会报告部署成功,这会在VM不执行它应该执行的操作时导致混乱 下面是terraform文件的一个片段,用于上下文:azurerm_linux_虚拟机内的cloud init脚本中的错误处理,azure,azure-virtual-machine,terraform-provider-azure,cloud-init,Azure,Azure Virtual Machine,Terraform Provider Azure,Cloud Init,当我使用terraform部署虚拟机时,我会运行一个定制的shell脚本,这可能会引发错误 我的问题是,如何处理这些错误,因为不管脚本的返回代码是什么,terraform都会报告部署成功,这会在VM不执行它应该执行的操作时导致混乱 下面是terraform文件的一个片段,用于上下文: data "template_file" "setup_script" { count = var.agent_count template = file(&q
data "template_file" "setup_script" {
count = var.agent_count
template = file("scripts/setup.sh")
vars = {
POOL_NAME = var.pool_name
AGENT = "agent-${count.index}"
ORGANIZATION_URL = var.organization_url
TOKEN = var.token
TERRAFORM_VERSION = var.terraform_version
VSTS_AGENT_VERSION = var.vsts_agent_version
}
}
resource "azurerm_linux_virtual_machine" "vmachine" {
count = length(module.network.network_interfaces)
name = "agent-${count.index}"
resource_group_name = azurerm_resource_group.deployment-agents.name
location = azurerm_resource_group.deployment-agents.location
size = "Standard_B1ms"
admin_username = "adminuser"
network_interface_ids = [
module.network.network_interfaces[count.index].id,
]
admin_ssh_key {
username = "adminuser"
public_key = var.ssh_public_key
}
os_disk {
caching = "ReadWrite"
storage_account_type = "Standard_LRS"
}
source_image_reference {
publisher = "Canonical"
offer = "UbuntuServer"
sku = "18.04-LTS"
version = "latest"
}
boot_diagnostics {
storage_account_uri = azurerm_storage_account.boot.primary_blob_endpoint
}
custom_data = base64encode(data.template_file.setup_script.*.rendered[count.index])
}
以及setup.sh
shell脚本:
#--snip----
apt获取并安装azure cli
如果[$?-gt 0];然后
echo“无法安装azure cli!”
出口1
fi
#试验
出口1
感谢您的帮助。Terraform只返回关于自身的错误,而不是在VM内执行的脚本。您可以在VM中找到错误消息 要使用shell脚本通过cloud init安装Azure CLI,您需要添加
#/bin/bash
在shell脚本的开头,请参见:
在安装Azure CLI时,我认为您需要做的事情比您尝试过的要多,请看一下需要执行的步骤。或者使用现有的shell脚本。“Terraform只返回关于自身的错误,而不是在VM内执行的脚本。您可以在VM内找到错误消息。”-这就是我的问题,我想要一个解决方案,Terraform意识到cloud init脚本失败,我想这是不可能的。无论如何谢谢你@帕特里克:是的,我同意你的看法。cloud init还将错误消息放入VM内的日志中。Azure不在乎脚本是否成功执行。Azure只关心部署是否成功。