我正在尝试使用 Packer 创建 Windows 映像以供在 Azure 上使用。作为此过程的一部分,我需要将位于 Azure 中现有 VM 上的一些文件放入映像中。我的想法是将 VM 添加到域中,以便我可以直接复制文件。但是,到目前为止,我还无法将映像添加到域中。
我尝试运行 powershell 脚本,但是它给出了以下错误消息:
Error uploading ps script containing env vars: Error uploading file to $env:TEMP
接下来,我尝试直接从 powershell-provisioner 运行“Add-Computer”命令(常规用户和提升用户权限的用户均可),但两种方法均未成功。使用常规 shell,Packer 似乎卡住了。出现消息后没有任何反应。Provisioning with Powershell
提升权限的 shell 向我提供了一条错误消息:
(12,8):UserId:
==> azure-arm.xxxxx: At C:\Windows\Temp\packer-elevated-shell-617ab2e4-e084-8ef8-f9f6-0d66a82a0129.ps1:60 char:1
有人知道如何将图像添加到域吗?或者还有其他方法可以将文件从现有 VM 复制到图像中吗?或者最好在部署期间使用 Terraform 复制文件?
答案1
我无法通过 Packer 解决这个问题。但是,我找到了一个解决方案,azurerm_virtual_machine_extension
我使用执行 powershell 脚本来执行此操作以及其他一些任务:
resource "azurerm_virtual_machine_extension" "vm_extension_install_srv" {
count = var.app_count
name = "vm_extension_install_srv"
virtual_machine_id = azurerm_windows_virtual_machine.app[count.index].id
publisher = "Microsoft.Compute"
type = "CustomScriptExtension"
type_handler_version = "1.8"
auto_upgrade_minor_version = true
settings = <<SETTINGS
{
"commandToExecute": "powershell.exe -Command \"C:/setup/provision/first_boot.ps1 -index ${count.index + 1}; exit 0;\""
}
SETTINGS
}
答案2
我从未在这里发过帖子,但最近我遇到了类似的问题。我需要将我的打包器 VM 加入域以安装软件。我遇到了同样的问题;我认为这可能与 Winrm 加入域后有关,因为如果您来自现在默认不属于域的计算机,winrm 将不允许您连接。您可以设置此标志来覆盖它。
启用 PSRemoting -SkipNetworkProfileCheck -Force