【问题标题】:Terraform on Azure: executing powershell script for Windows VM from local file with variables as argumentsAzure 上的 Terraform:使用变量作为参数从本地文件执行 Windows VM 的 powershell 脚本
【发布时间】:2021-05-15 14:45:04
【问题描述】:

背景

我使用 Azure Cloud Shell 中的 Terraform 部署了一个 Windows Server VM。我有一个 tf 文件可以成功部署 VM,但我无法运行 PowerShell 脚本。

要求

  1. 我需要 VM 运行部署后 PowerShell 脚本,将其提升为域控制器。
  2. PS 脚本需要位于运行 Terraform 的 Azure Cloud Shell 的本地,以避免使用存储帐户。
  3. 我需要能够为从资源/数据派生的 PS 脚本指定参数(例如,之前在 tf 文件中定义的密码)

这是我尝试做的:

resource "azurerm_virtual_machine_extension" "dcpromo_script" {
  name                 = "dcpromo_script"
  virtual_machine_id   = azurerm_windows_virtual_machine.vm.id
  publisher            = "Microsoft.Azure.Extensions"
  type                 = "CustomScript"
  type_handler_version = "2.0"

 protected_settings = <<PROT
    {
        "script": "${base64encode(file("dcpromo.ps1"))}"
    }
    PROT

}

dcpromo.ps1 故障排除简化内容:

"hello"

但是我收到以下错误消息:

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

azurerm_virtual_machine_extension.dcpromo_script: Creating...
azurerm_virtual_machine_extension.dcpromo_script: Still creating... [10s elapsed]
azurerm_virtual_machine_extension.dcpromo_script: Still creating... [20s elapsed]
azurerm_virtual_machine_extension.dcpromo_script: Still creating... [30s elapsed]
azurerm_virtual_machine_extension.dcpromo_script: Still creating... [40s elapsed]
azurerm_virtual_machine_extension.dcpromo_script: Still creating... [50s elapsed]
azurerm_virtual_machine_extension.dcpromo_script: Still creating... [1m0s elapsed]

Error: Code="VMExtensionProvisioningError" Message="VM has reported a failure when processing extension 'dcpromo_script'. Error message: \"Extension '' of Handler 'Microsoft.Azure.Extensions.CustomScript' version '1.0' faulted due to exception during extension processing\"\r\n\r\nMore information on troubleshooting is available at https://aka.ms/VMExtensionCSELinuxTroubleshoot "

  on windows_server.tf line 77, in resource "azurerm_virtual_machine_extension" "dcpromo_script":
  77: resource "azurerm_virtual_machine_extension" "dcpromo_script" {

谁能帮助解释我做错了什么?提前致谢

【问题讨论】:

    标签: terraform


    【解决方案1】:

    这解决了我的问题:https://stackoverflow.com/a/60276573/1630260

    这就是我使用变量作为参数的方式:

    ${azurerm_windows_virtual_machine.vm.admin_password}
    

    整行:

    "commandToExecute": "powershell -command \"[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('${base64encode(data.template_file.tf.rendered)}')) | Out-File -filepath dcpromo.ps1\" && powershell -ExecutionPolicy Unrestricted -File dcpromo.ps1 ${azurerm_windows_virtual_machine.vm.admin_password} domain.com" 
    

    【讨论】:

      猜你喜欢
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      相关资源
      最近更新 更多