我正在尝试在我的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;
答案 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
文件夹。