Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
azurerm_linux_虚拟机内的cloud init脚本中的错误处理_Azure_Azure Virtual Machine_Terraform Provider Azure_Cloud Init - Fatal编程技术网

azurerm_linux_虚拟机内的cloud init脚本中的错误处理

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

当我使用terraform部署虚拟机时,我会运行一个定制的shell脚本,这可能会引发错误

我的问题是,如何处理这些错误,因为不管脚本的返回代码是什么,terraform都会报告部署成功,这会在VM不执行它应该执行的操作时导致混乱

下面是terraform文件的一个片段,用于上下文:

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只关心部署是否成功。