触发在Azure虚拟机上重新运行DSC检查

我正在通过简单的练习来学习Azure和Powershell DSC

此博客条目为DSC提供了完美的“Hello World”示例:

Configuration HelloWorldConfig { Node localhost { File TestFile { Ensure = "Present" DestinationPath = "c:\temp\HelloWorld.txt" Contents = "Hello World!" } } } 

我使用powershell创build了该软件包,并通过azure门户上的扩展刀片上传到我的Azure虚拟机

有效! 当我login到机器上时,我可以看到文件c:\temp\HelloWorld.txt

但是DSC应该保护你免于“configuration漂移”。 为了testing这个,我通过手动删除文件来漂移我的configuration。

我如何使文件再次出现? 即如何重新运行这个所需的状态configuration检查。

我假设我上传的DSC脚本驻留在虚拟机的某处。 (我可以在扩展刀片上看到一个条目)。

在这里输入图像说明

或者我必须重新加载包? 如果是这样的话,为什么刀片上的条目甚至可以看到?


我问,这个包甚至在哪里? 我使用powershellfind了答案:

 $extension = Get-AzureRmVMDscExtension -ResourceGroupName $vm.ResourceGroupName -VMName $vm.Name $extension.ModulesUrl 

这显示我的包现在驻留在https://iaasv2tempstoreseasia.blob.core.windows.net/vmextensionstemporary-000116674c9bb772-20160908062048340/sample-dsc-package.zip?sv=2015-04-05&sr=c&sig=YnGCCH%2Bvfv% 2FMPWexQWhGOw7H8d8EkGcN5Ufudyz1MIE%3D&SE = 2016-09-09T06%3A20%3A48Z& SP = RW

所以,我认为它是在名为vmextensionstemporary-000116674c9bb772-20160908062048340的blob容器中的一个名为iaasv2tempstoreseasia的存储帐户(不是我的)中。 只有temp这个词的存在表明它不是可以被导航的。

有趣的是,当我从扩展刀片删除DSC扩展时,我仍然可以使用这个URL下载软件包。 几个小时后,它消失了 – 我怀疑是由一些清理工作。

DSC使用DSC本地configurationpipe理器来处理DSCconfiguration并对其进行监控。 本地configurationpipe理器有一个名为CONFIGURATION MODE的设置,默认情况下它被设置为ApplyAndMonitor。 这意味着它将处理和应用你的DSC脚本,但如果有改变(在你的例子中删除文件),它不会自动重新应用设置。 你需要做的是将CONFIGURATION MODE设置为ApplyAndAutocorrect。 在此模式下,它将检测configuration漂移并重新应用您的DSC设置。

在这里输入图像说明

查看此url以获取有关此设置的更多信息:

https://msdn.microsoft.com/en-us/PowerShell/DSC/metaConfig

我得出的结论是,一旦将已发布的zipfile upload到Azure门户,它将运行一次。 如果您想手动触发第二次运行,则唯一的方法是重复文件上载。

如果您想上传一次,然后再手动触发一次,则必须通过Powershell而不是Azure门户进行上传。

这里是我最终使用的命令。

我目前只有一个存储帐户和一个虚拟机,所以我可以在不进行任何过滤的情况下获得对两者的引用:

  $sa = Get-AzureRmStorageAccount $vm = Get-AzureRmVM 

编译和发布'HelloWorld'脚本:

 Publish-AzureVMDscConfiguration -ConfigurationPath sample-dsc-script.ps1 -ResourceGroupName $sa.ResourceGroupName -StorageAccountName $sa.StorageAccountName -ContainerName dsc 

这将在我的存储帐户中创build一个名为sample-dsc-script.ps1.zip ,该块位于名为dsc的容器中。

要将此新上传的configuration应用于虚拟机,请执行以下操作:

 $params = [PSCustomObject]@{ ResourceGroupName = $sa.ResourceGroupName; Location = $sa.Location; ArchiveStorageAccountName = $sa.StorageAccountName; ArchiveContainerName = "dsc"; ArchiveBlobName = "sample-dsc-script.ps1.zip"; ConfigurationName = "HelloWorldConfig"; VMName = $vm.Name; Version = 2.4; AutoUpdate = $true; WmfVersion = "5.0"; }; $params | Set-AzureRmVMDscExtension 

然后我可以再次调用这个命令重新应用configuration。