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