5

我试图在我的 terraform 执行中使用以下内容:

resource "azurerm_virtual_machine_extension" "vmex" {
    name = "myVM"
    location = "eastus"
    resource_group_name   = "${azurerm_resource_group.rg.name}"
    virtual_machine_name = "${azurerm_virtual_machine.vm.name}"
    publisher = "Microsoft.Compute"
    type = "CustomScriptExtension"
    type_handler_version = "1.9"
    settings = <<SETTINGS
    {
        "fileUris": [
            "https://example.com/scripts/test.ps1"
        ],
        "commandToExecute": "powershell -ExecutionPolicy Unrestricted -File 'test.ps1'"
    }
    SETTINGS
}

当它执行时,我得到以下输出:

错误:应用计划时出错:

发生 1 个错误:

  • azurerm_virtual_machine_extension.vmex:发生 1 个错误:

  • azurerm_virtual_machine_extension.vmex:长时间运行的操作以状态“失败”终止:代码=“VMExtensionProvisioningError”消息=“VM 在处理扩展“myVM”时报告失败。错误消息:“完成执行命令”。”

Terraform 不会在遇到错误时自动回滚。相反,您的 Terraform 状态文件已使用成功完成的任何资源进行了部分更新。请解决上述错误并再次申请以逐步更改您的基础架构。

当我 RDP 进入 VM 时,我可以看到文件已正确下载到它应该在的位置,但是,似乎commandToExecute从未执行过。

如果我直接从下载文件夹运行脚本,它会成功完成。

任何人都可以就如何解决这个问题提供任何建议吗?

注意:我尝试了各种尝试引用文件的组合,但它们似乎都有相同的结果。

更新:按照评论中的建议检查日志后,尝试运行此代码段时的错误是:

"message": "处理 - 文件 ''test.ps1'' 失败,因为该文件没有 '.ps1' 扩展名。请指定有效的 Windows PowerShell 脚本文件名,然后重试。"

4

3 回答 3

5

我有这种问题,就我而言,与脚本和参数的内容有关。但是因为它可能是许多其他的东西,你需要检索一些额外的数据。

尝试找出扩展程序本身是否有更多信息。转到您的 Azure 帐户并按照以下路径操作:主页 > 虚拟机 > [your_virtual_machine]。在显示所有选项的刀片中,选择扩展以查看您的扩展及其状态(应该是“配置失败”。单击该扩展。您将看到有关它的一些信息。检查状态和详细状态。

详细状态是一个链接,它将向您显示一个 JSON,其中可以包含有关正在发生的事情的重要信息。可能它会包含来自您的 PS1 脚本的错误输出。

让我知道这是否有帮助,如果这些信息还不够,请在此处发布,以便我可以获得更多信息,我将能够检查并尝试提供帮助。

问候,劳尔。

编辑:因此,在检查了我们的代码示例之间的差异之后,单引号最终导致了您的问题。很高兴您发现了问题。

于 2018-03-06T14:23:51.650 回答
3

根本原因是commandToExecute你不能使用单引号。您可以删除单引号或使用双引号(但您需要使用\)。如下所示:

"commandToExecute": "powershell -ExecutionPolicy Unrestricted -File \"test.ps1\""
于 2018-03-07T04:16:56.347 回答
1

您应该连接到 VM(通过 RDP、Powershell 远程或其他方式)并查看C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension日志文件夹。

我假设您拥有适用于 Windows 的内容自定义脚本扩展

于 2018-03-06T16:16:45.797 回答