使用azurerm_virtual_machine_extension

时间:2018-03-06 12:53:19

标签: azure terraform terraform-provider-azure

我正在尝试在我的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:长时间运行操作终止,状态为“失败&#39;:Code =&#34; VMExtensionProvisioningError&#34;消息=&#34; VM在处理扩展&#39; myVM&#39;时报告了失败。错误信息:\&#34;完成执行命令\&#34;。&#34;

  •   
     

Terraform在面对错误时不会自动回滚。   相反,您的Terraform状态文件已部分更新   任何成功完成的资源。请解决错误   以上并再次申请逐步改变您的基础设施。

当我进入虚拟机时,我可以看到该文件已正确下载到它所要求的位置,但似乎永远不会执行commandToExecute

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

有人可以提出任何建议来解决这个问题吗?

注意:我尝试过尝试引用该文件的各种组合,但所有这些组合似乎都有相同的结果。

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

  

&#34; message&#34;:&#34; Processing -File&#39; test.ps1&#39;&#39;失败,因为该文件没有&#39; .ps1&#39;延期。指定有效的Windows PowerShell脚本文件名,然后重试。&#34;

3 个答案:

答案 0 :(得分:3)

我有这样的问题,在我的情况下是与脚本和参数的内容有关的东西。但是因为它可能需要许多其他东西来检索一些额外的数据。

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

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

请告诉我这是否有帮助,如果该信息不够,请在此发布,以便我可以获得更多信息,我可以检查并尝试提供帮助。

此致 劳尔。

编辑:所以在检查了我们的代码示例之间的差异后,最终单引号是您的问题的原因。很高兴你发现了这个问题。

答案 1 :(得分:2)

根本原因在于commandToExecute您无法使用单引号。您可以删除单引号或使用双引号(但您需要使用\)。如下所示:

"commandToExecute": "powershell -ExecutionPolicy Unrestricted -File \"test.ps1\""

答案 2 :(得分:1)

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

我假设你有内容Custom Script Extension for Windows