【问题标题】:Issues deploying dscExtension to Azure VMSS将 dscExtension 部署到 Azure VMSS 的问题
【发布时间】:2016-04-27 21:51:49
【问题描述】:

我在使用部署模板将 dscExtension 部署到 Azure 虚拟机规模集 (VMSS) 时遇到了一些问题。

这是我将其添加到模板中的方式:

{
  "name": "dscExtension",
  "properties": {
    "publisher": "Microsoft.Powershell",
    "type": "DSC",
    "typeHandlerVersion": "2.9",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "ModulesUrl": "[concat(parameters('_artifactsLocation'), '/', 'MyDscPackage.zip', parameters('_artifactsLocationSasToken'))]",
      "ConfigurationFunction": "CmvmProcessor.ps1\\CmvmProcessor",
      "Properties": [
        {
          "Name": "ServiceCredentials",
          "Value": {
            "UserName": "parameters('administratorLogin')",
            "Password": "parameters('administratorLoginPassword')"
          },
          "TypeName": "System.Management.Automation.PSCredential"
        }
      ]
    }
  }
}

VMSS 本身已成功部署,但是当我浏览各个 VM 的 InstanceView 时,dscExtension 显示失败状态并显示错误消息。

我遇到的问题如下:

ARM 部署不会在重新部署时尝试更新 dscExtension。我习惯于 MSDeploy Web 应用程序扩展,其中更新工件并在每个新部署上重新部署代码。我不知道如何强制它用新的二进制文件更新 dscExtension。事实上,它似乎只是在第一次部署 VMSS 时出错,然后它甚至不会再试一次。

我得到的错误是旧代码不再存在。

我之前在自定义 DSC Powershell 脚本中有一个错误,我尝试使用 -replace 运算符,该运算符应该创建一个 $Matches 变量,但它说$Matches 不存在。

无论如何,我已经重构了代码并删除了整个资源组,然后重新部署。 dscExtension 仍然给出相同的错误。我已验证我的 DSC .zip 所在的 blob 存储帐户不再具有能够生成此错误消息的代码。 Azure 必须在某处缓存 dscExtension。我无法让它使用我在每次部署之前上传的新 blob .zip。

对 DSC 扩展以及如何强制其在部署时进行更新有任何见解吗?

【问题讨论】:

    标签: azure azure-virtual-machine azure-resource-manager


    【解决方案1】:

    听起来您可能在这里遇到了很多事情,所以先尝试简单的事情。为了让 VM 扩展在后续部署中运行,您必须“播种”它。 (你说得对,这与 AzureRM 的其余部分不同)看看这个模板:

    https://github.com/bmoore-msft/AzureRM-Samples/blob/master/VMDSCInstallFile/azuredeploy.json

    DSC 扩展上有一个属性叫做:

                  "forceUpdateTag" : "changeThisToEnsureScriptRuns-maxlength=50",
    

    如果您希望扩展再次运行,则属性值必须不同。例如,如果您希望它在每次使用随机数或 guid 播种时运行。如果您想以某种方式对其进行版本控制,也可以使用版本号。关键是,如果模板中的值与您传入的值相同,则扩展将不会再次运行。

    该示例使用 VM,但 VMSS 语法应该相同。该属性也适用于其他扩展(例如自定义脚本)。

    看起来很奇怪的部分是你说你删除了整个 RG 并且无法让它接受新包......这听起来很糟糕(即像一个错误)。如果上面没有解决它,我们可能需要更深入地挖掘模板和脚本。 LMK...

    【讨论】:

    • 谢谢。实际上,通过更改为 TypeHandlerVersion 2.17 并使用我只能在 blogs.msdn.microsoft.com/powershell/2016/02/26/… 找到的 JSON 语法,我实际上能够使 DSC 扩展正常工作
    • 但我当然仍然需要强制它更新,所以这个答案很棒。
    • 另一个调试技巧是,如果您在重新运行它时遇到问题,您可以删除扩展并保持 VM 和 RG 的其余部分完好无损——调试速度要快得多。我使用 PowerShell 的“Remove-AzureRmVMExtension”。
    • 啊,我不知道它已更新为也适用于 scaleset。很有用!
    • 此答案适用于单个 VM,但我无法在部署为 JSON 模板的 VM ScaleSet 上进行 DSC 更新。
    猜你喜欢
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2020-03-02
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多