在打包程序构建期间启动后在 Windows Azure VM 中运行脚本以配置 WinRM 和防火墙

在打包程序构建期间启动后在 Windows Azure VM 中运行脚本以配置 WinRM 和防火墙

背景:显然帕克主要问题在从发布者创建的 Azure VM 上配置 WinRM Microsoft Windows Server。这只是我发现的几个问题和线程之一,它可以追溯到几年前。因此,我无法使用 Packer 连接到实例,以便配置和准备我们自己的 Windows 映像以供公司内部使用。我尝试过更改超时,尝试过不同的 VM 大小,但都不起作用。Packer 的 ARM 模板在配置 WinRM 方面简直是垃圾。而且他们不愿意解决这个问题。建议提供一种方式以与 AWS 用户数据相同的方式在 Azure 上运行脚本,Hashicorp 的愚蠢“解决方案”是“准备一个自定义映像来处理自定义数据脚本,以便您可以使用打包程序准备自定义映像”。他们甚至建议他们的代码无法做到这一点,这是完全错误

我已经在 AWS 中自己完成了这项工作,通过配置要运行的用户数据脚本来配置 WinRM 和防火墙。我发现 Azure 有一个类似的功能,叫做自定义数据,虽然我可以使用azure-arm源代码进行设置,但出于一些“可爱”的原因Windows 没有办法运行它,只有 Linux 可以通过cloud-init。我可以使用我需要的东西来运行Invoke-AzVMRunCommand(无论它是否是自定义数据,都可以解决问题!太好了!除了 Packer 没有(我能找到的)提供从构建器运行“预连接”命令的方法,只有在您点击配置程序后才有此选项。我的配置程序代码在与 WinRM 建立连接之前不会运行。先有鸡,再有蛋(或者是反过来?)

因此,除非我遗漏了某些内容,否则我无法使用 Packer 的当前状态自动执行此操作。但是,由于内部政策和程序,我无法在此处使用其他工具进行图像构建。如果这个背景有点夸张,我深表歉意,我对这个问题感到非常疲倦和沮丧。


问题:有没有什么想法是否涉及通过其他一些过程创建中间自定义映像,以便我在配置时针对 Windows Azure VM 运行脚本?是否有可与 Packer 一起使用的替代 Azure 构建器可能会有所帮助?或者也许是 Azure 发布者发布的 Windows 映像已经具有在启动时运行自定义数据的能力?或者也许 Packer 有一个我尚未考虑过的技巧?如果我可以在创建 VM 后从构建器运行 Azure CLI 命令,我就可以快速解决这个问题。

我的其他想法是分叉azure-arm构建器并添加我自己需要的功能,或者完全编写我自己的提供程序。前一种解决方案可能是可行的,我可以将代码贡献回来(如果 Hashicorp 不会因为“这不是他们的方式”而拒绝它),但后者似乎对这种情况来说过于严厉。此外,我不了解 Go,所以我必须选择它,而且它与许多 Go 不同。无论如何,如果已经有针对这种情况的真正解决方案,我希望避免为解决方案开发自己的代码。

在此先非常感谢您对这个问题的考虑。

相关内容