我尝试在Azure上配置一些虚拟机,并在使用脚本对其进行自定义后立即进行配置。似乎最好的方法是使用自定义脚本扩展。
当我尝试在我创建的VM上执行az extension set
时,它就会轰炸并抱怨
参数发布者的值无效。
这可能是因为我将自己定位为出版商。而不是Microsoft.OSTCExtensions
或其他一些普遍接受的扩展发布者。
名称Custom Script Extension
向我暗示 CUSTOM 脚本可以通过此方法进行链式加载。如果没有首先成为扩展发布者,那是不可能的?
我执行的命令:
设置扩展程序:
az vm extension set --resource-group dev-eu2 --vm-name dev-eu2-dc --name deploy_ad_to_eu2.ps1 --publisher "zimmertr" --settings /home/tj/git/Dev.Builder/azure-cli/script_extensions/domain_controller/dc_eu2.json --version v0.1
所述扩展程序调用的JSON:
{
"fileUris": ["http://localhost:8000/powershell/domain_controllers/deploy_ad_to_eu2.ps1"],
"commandToExecute": "./deploy_ad_to_eu2.ps1"
}
然后,此JSON调用deploy_ad_to_eu2.ps1
,这是在我的计算机上的文件服务器上运行的Powershell脚本。我知道这个PowerShell脚本100%正常工作,因为我可以将它复制到PowerShell提示符中,没有任何问题。我只是厌倦了RDP到服务器并寻找一点点自动化。
我在这里做错了吗?
答案 0 :(得分:2)
正如约翰所说,我们应该使用Microsoft.compute
作为发布商,并使用CustomscriptExtension
作为扩展名。
顺便说一下,我们应该使用--version
到 1.9 ,json应该这样:
{
"fileUris": ["https://jasonvmdiag956.blob.core.windows.net/jasonvmtest/jason.ps1"],
"commandToExecute": "powershell.exe ./jason.ps1"
}
我们可以在Azure CLI 2.0中运行此脚本,如下所示:
az vm extension set --resource-group jasonvm --vm-name jasonvm --name CustomScriptExtension --publisher Microsoft.Compute --settings D:\cert\qq.json --version 1.9
输出如下:
C:\Users>az vm extension set --resource-group jasonvm --vm-name jasonvm --name CustomScriptExtension --publisher Microsoft.Compute --settings D:\cert\qq.json --version 1.9
{| Finished ..
"autoUpgradeMinorVersion": true,
"forceUpdateTag": null,
"id": "/subscriptions/5384xxxx-xxxx-xxxx-xxxx-xxxxe29axxxx/resourceGroups/jasonvm/providers/Microsoft.Compute/virtualMachines/jasonvm/extensions/CustomScriptExtension",
"instanceView": null,
"location": "eastus",
"name": "CustomScriptExtension",
"protectedSettings": null,
"provisioningState": "Succeeded",
"publisher": "Microsoft.Compute",
"resourceGroup": "jasonvm",
"settings": {
"commandToExecute": "powershell.exe ./jason.ps1",
"fileUris": [
"https://jasonvmdiag956.blob.core.windows.net/jasonvmtest/jason.ps1"
]
},
"tags": null,
"type": "Microsoft.Compute/virtualMachines/extensions",
"typeHandlerVersion": "1.9",
"virtualMachineExtensionType": "CustomScriptExtension"
}
<强>更新强>
我在我的实验室测试了这个PowerShell,它工作正常,这是我的步骤:
1. 将powershell脚本上传到Azure存储帐户容器(类型:容器):
{
"fileUris": ["https://jasonvmsdiag665.blob.core.windows.net/ps1/installad.ps1"],
"commandToExecute": "powershell.exe ./installad.ps1"
}
答案 1 :(得分:1)
发布者是指扩展程序本身的发布者,而不是要执行的脚本的发布者。发布者和名称的组合唯一标识要应用于虚拟机的扩展名。
Microsoft.Compute CustomScriptExtension
扩展名(其中Microsoft.Compute
是发布商,CustomScriptExtension
是扩展名称)是通用的,因为要执行的扩展程序的脚本是通过配置提供的。因此,不需要为每个脚本发布一个扩展。
换句话说,您不应将自己指定为发布者,应指定扩展的实际发布者,并使用配置指定要执行的脚本。