本文目录
在2015年10月25日PowerShell的团队博客宣布Azure DSC Extension 2.8发布。从此支持用户在映射Azure DSC Extension下载依赖项目时,可以指定自己的路径。假如你想配置一台虚拟机,但是这台虚拟机可能由于一一些原因不允许连接互联网,那么Azure DSC Extension 2.8可以派上用场了。
本文主要演示在Azure云服务管理器中如何使用这一功能。让我们假设您已经阅读过或者了解这些知识点 如何在Azure 资源管理器(ARM)中使用WMF 4配置Azure DSC扩展 和如何在Azure云服务管理器(ASM)中使用WMF 4配置Azure DSC扩展。
我们会直接将这一个功能添加进Azure PowerShell SDK DSC 命令扩展。当前的下载映射功能只能允许你自己构造Json数据,然后使用通用扩展命令(Set-AzureVMExtension)将它发给Azure DSC扩展。
下面的例子我们会演示:
- 怎样从之前的ASM例子中更新功能,来添加需要发送给Azure DSC扩展的下载映射的JSON数据。.
- 怎样从之前的ARM例子中更新功能,来添加需要发送给Azure DSC扩展的下载映射的JSON数据。
添加下载映射的Json数据
从之前ASM 博客中的New-XAzureVmDscExtensionJson
命令中, 使用一个哈希表来添加下载映射的参数。同时,同时我们会更新wmfVersion参数给它设置一个默认值,让它不是必选参数,这样会更方便用户使用。
[ValidateNotNullOrEmpty()] [ValidateSet('4.0','latest','5.0PP')] [string] $WmfVersion = 'latest', [AllowNull()] [hashtable] $DownloadMappings
下面来解释下载映射的参数值:
- 哈希表中的键:
- 下载使用的键对应格式:
<PKG>_<PKGVersion>-<Platform>_<PlatformVersion>-<Arch>
PKG
WMF
– 对应 WMF 包NET
– 对应 .NET 包
PKGVerion
- 包的版本。 当前WMF有两个有效的版本,
4.0
或者5.0PP
(latest
会被转换成to5.0PP
.) .NET 只能有一个有效的版本,当前是4.5
.
- 包的版本。 当前WMF有两个有效的版本,
Platform
- 预留参数,以后可能会用到, 现在的值都是 `Windows’
- `PlatformVersion’
- Windows Server 2008 R2 –
6.1
- Windows Server 2012 –
6.2
- Windows Server 2012 R2 –
6.3
- Windows Server 2016 技术预览版 –
10.0
- Windows Server 2008 R2 –
Arch
- AMD64/x64 –
x64
- x86 –
x86
- AMD64/x64 –
- 为Windows Server 2008 R2 X64把WMF 4.0映射下载改成你自己路径的的的例子。
WMF_4.0-Windows_6.1-x64
- 下载使用的键对应格式:
- table的值必须是一个 HTTPS 的地址,并且不需要用户输入用户凭据(可以允许使用查询字符串)。
函数应当生成像下面这样的JSON数据。
"Properties": { "DestinationPath": "C:\\test" }, "advancedOptions": { "DownloadMappings": { "WMF_4.0-Windows_6.1-x64": "https://mystorage.blob.core.windows.net/mypubliccontainer/Windows6.1-KB2819745-x64-MultiPkg.msu" } }, "WmfVersion": "latest", "ConfigurationFunction": "configuration.ps1\\ConfigurationName", "ModulesUrl": "https://storageaccountname.blob.core.windows.net/windows-powershell-dsc/configuration.ps1.zip?<sastoken>" }
将它们一起发送给虚拟机
我们和上一次一样把它们包在一起,包括映射下载的键和URL构造成一个哈希表,可以参考下面的例子。
$storageAccountName = 'storageaccountname' $publisher = 'Microsoft.Powershell' $dscVersion = '2.8' $serviceName = 'servicename' $vmName = 'vmName' $moduleName = 'configuration.ps1' $blobName = "$moduleName.zip" $configurationPath = "$PSScriptRoot\$moduleName" $ConfigurationName = 'ConfigurationName' $modulesUrl = Get-XAzureDscPublishedModulesUrl -blobName $blobName -configurationPath $configurationPath ` -storageAccountName $storageAccountName Write-Verbose -Message "ModulesUrl: $modulesUrl" -Verbose $PublicConfigurationJson = New-XAzureVmDscExtensionJson -moduleName $moduleName -modulesUrl $modulesUrl ` -properties @{DestinationPath = 'C:\test'} -configurationName $ConfigurationName -DownloadMappings @{'WMF_4.0-Windows_6.1-x64' = 'https://mystorage.blob.core.windows.net/mypubliccontainer/Windows6.1-KB2819745-x64-MultiPkg.msu'} Write-Verbose -Message "PublicConfigurationJson: $PublicConfigurationJson" -Verbose $vm = get-azurevm -ServiceName $serviceName -Name $vmName $vm = Set-AzureVMExtension ` -VM $vm ` -Publisher $publisher ` -ExtensionName 'DSC' ` -Version $dscVersion ` -PublicConfiguration $PublicConfigurationJson ` -ForceUpdate $vm | Update-AzureVM
我也在 GitHub 上分享了一些示例脚本。您可能只需要更新一下服务的名称等,就可以在自己的Azure PowerShell SDK中使用了。
为ARM添加下载映射的JSON数据
在之前的博客中 ARM blog, 我有描述过如何在visual studio中创建一个ARM模板,然后选择我们要使用的WMF扩展。 我会把上一篇博客中结尾的例子拿来在这里作为开始演示:
{ "name": "Microsoft.Powershell.DSC", "type": "extensions", "location": "[variables('location')]", "apiVersion": "2015-05-01-preview", "dependsOn": [ "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]" ], "tags": { "displayName": "Microsoft.Powershell.DSC" }, "properties": { "publisher": "Microsoft.Powershell", "type": "DSC", "typeHandlerVersion": "2.1", "autoUpgradeMinorVersion": true, "settings": { "modulesUrl": "[concat(parameters('_artifactsLocation'), '/', 'dsc.zip')]", "sasToken": "[parameters('_artifactsLocationSasToken')]", "configurationFunction": "[variables('Microsoft.Powershell.DSCConfigurationFunction')]", "wmfVersion": "4.0", "properties": { "nodeName": "[variables('vmName')]" } }, "protectedSettings": { } } }
在 modulesUrl后面添加下面的JSON
"advancedOptions": {
"DownloadMappings": {
"WMF_4.0-Windows_6.1-x64": "https://mystorage.blob.core.windows.net/mypubliccontainer/Windows6.1-KB2819745-x64-MultiPkg.msu"
}
},
{
"name": "Microsoft.Powershell.DSC",
"type": "extensions",
"location": "[variables('location')]",
"apiVersion": "2015-05-01-preview",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
],
"tags": {
"displayName": "Microsoft.Powershell.DSC"
},
"properties": {
"publisher": "Microsoft.Powershell",
"type": "DSC",
"typeHandlerVersion": "2.1",
"autoUpgradeMinorVersion": true,
"settings": {
"modulesUrl": "[concat(parameters('_artifactsLocation'), '/', 'dsc.zip')]",
"advancedOptions": {
"DownloadMappings": {
"WMF_4.0-Windows_6.1-x64": "https://mystorage.blob.core.windows.net/mypubliccontainer/Windows6.1-KB2819745-x64-MultiPkg.msu"
}
},
"sasToken": "[parameters('_artifactsLocationSasToken')]",
"configurationFunction": "[variables('Microsoft.Powershell.DSCConfigurationFunction')]",
"wmfVersion": "4.0",
"properties": {
"nodeName": "[variables('vmName')]"
}
},
"protectedSettings": { }
}
}
具体在部署的时候可以参考之前博客中的例子,我已经把它们更新在 GitHub 上面了.
反馈
欢迎大家在这里Connect进行反馈.
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!