将dscExtension部署到Azure VMSS的问题

时间:2016-04-25 15:34:20

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

我在使用部署模板将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扩展的任何见解以及如何强制它在部署时更新?

1 个答案:

答案 0 :(得分:2)

听起来你可能在这里碰到了很多东西,所以先试试这个简单的东西。为了使VM扩展能够在后续部署中运行,您必须" seed"它。 (而且你是对的,这与AzureRM的其他部分不同)看一下这个模板:

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

DSC扩展名上有一个名为:

的属性
              "forceUpdateTag" : "changeThisToEnsureScriptRuns-maxlength=50",

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

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

看起来很奇怪的部分是你说你删除了整个RG并且无法接受新包...这听起来很糟糕(就像一个bug)。如果上述内容无法修复,我们可能需要深入研究模板和脚本。 LMK ...