3

我编写了一个用于创建 Azure Windows VM 的 Terraform 模板。我需要将 VM 配置为启用 PowerShell 远程处理,以便发布管道能够执行 Powershell 脚本。创建 VM 后,我可以 RDP 到 VM 并执行我需要做的所有事情来启用 Powershell 远程处理,但是,如果我可以编写所有这些脚本以便它可以在发布管道中执行,那将是理想的。有两件事可以防止这种情况发生。

第一个也是这个问题的主题是,我必须运行“WinRM quickconfig”。我的模板可以正常工作,这样当我在创建后对 VM 执行 RDP 时,当我运行“WinRM quickconfig”时,我会收到以下响应:

WinRM service is already running on this machine.
WinRM is not set up to allow remote access to this machine for management.
The following changes must be made:

Configure LocalAccountTokenFilterPolicy to grant administrative rights remotely to local users.

Make these changes [y/n]?

我想在 Terraform 中配置 VM,因此设置了 LocalAccountTokenFilterPolicy,并且不需要 RDP 到 VM 来运行“WinRM quickconfig”。经过一些研究,我似乎可以使用资源 azure_virtual_machine_extension 来做到这一点。我将此添加到我的模板中:

resource "azurerm_virtual_machine_extension" "vmx" {
  name                 = "hostname"
  location             = "${var.location}"
  resource_group_name  = "${var.vm-resource-group-name}"
  virtual_machine_name = "${azurerm_virtual_machine.vm.name}"
  publisher            = "Microsoft.Azure.Extensions"
  type                 = "CustomScript"
  type_handler_version = "2.0"

settings = <<SETTINGS
    {
          # "commandToExecute": "powershell Set-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System' -Name 'LocalAccountTokenFilterPolicy' -Value 1 -Force"
    }
SETTINGS
}

当我应用它时,我收到错误:

Error: compute.VirtualMachineExtensionsClient#CreateOrUpdate: Failure sending request: StatusCode=0 -- Original Error: autorest/azure: Service returned an error. Status=<nil> Code="OperationNotAllowed" Message="This operation cannot be performed when extension operations are disallowed. To allow, please ensure VM Agent is installed on the VM and the osProfile.allowExtensionOperations property is true."

我找不到任何关于如何将 allowExtensionOperations 属性设置为 true 的 Terraform 文档。一时兴起,我尝试将属性“allow_extension_operations”添加到 azurerm_virtual_machine 资源中的 os_profile 块,但它作为无效属性被拒绝。我还尝试将其添加到 os_profile_windows_config 块中,但在那里也无效。

我在 Microsoft 的文档中找到了关于 osProfile.allowExtensionOperations 属性的声明:

“只有在虚拟机上不存在扩展时,才可以将其设置为 False。”

https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.management.compute.models.osprofile.allowextensionoperations?view=azure-dotnet

这对我来说意味着该属性默认为 True,但它实际上并没有这么说,而且它肯定不会那样做。Terraform 中有没有办法将 osProfile.alowExtensionOperations 设置为 true?

4

2 回答 2

0

使用 Terraform 添加扩展时遇到相同的问题,我创建了一个 Windows 2016 自定义图像,

提供者“azurerm”版本="2.0.0" Terraform 0.12.24

Terraform apply error: 
compute.VirtualMachineExtensionsClient#CreateOrUpdate: Failure sending request: StatusCode=0 
-- Original Error: autorest/azure: Service returned an error. 
Status=<nil> 
Code="OperationNotAllowed" 
Message="This operation cannot be performed when extension operations are disallowed. To allow, please ensure VM Agent is installed on the VM and the osProfile.allowExtensionOperations property is true."
于 2020-04-10T00:35:56.260 回答
0

我遇到了同样的错误,可能的解决方案取决于这里的两件事。您必须传递提供者“azurerm”版本=“2.5.0”,并且还必须在虚拟机资源中传递 os_profile_windows_config(见下文)参数。因此,该 terraform 将考虑您正在传递的扩展名。这修复了我的错误。

 os_profile_windows_config {
provision_vm_agent = true
}
于 2020-11-03T21:13:53.457 回答