我有一个用于在Azure管道中部署Service Fabric群集的ARM模板:
- task: AzureResourceManagerTemplateDeployment@3
displayName: 'Deploy SF cluster'
inputs:
deploymentScope: 'Resource Group'
subscriptionId: '${{ parameters.SubscriptionId }}'
azureResourceManagerConnection: '${{ parameters.ArmConnection }}'
action: 'Create Or Update Resource Group'
resourceGroupName: '${{ parameters.ResourceGroupName }}'
location: 'West Europe'
templateLocation: 'Linked artifact'
csmFile: '$(Build.SourcesDirectory)/pipelines/templates/sfcluster.json'
csmParametersFile: '$(Build.SourcesDirectory)/pipelines/templates/sfcluster-params.json'
overrideParameters: '-certificateThumbprint $(Thumbprint) -sourceVaultResourceId $(KeyvaultId) -certificateUrlValue $(SecretId)'
deploymentMode: 'Incremental'
当我使用ARM模板时,效果很好(因为已经使用了很多天,并且使用了5条不同的管道:
"osProfile": {
"adminUsername": "RdpUsername",
"adminPassword": "RdpPassword",
"computernamePrefix": "[variables('vmNodeType0Name')]",
"secrets": [
{
"sourceVault": {
"id": "[parameters('sourceVaultResourceId')]"
},
"vaultCertificates": [
{
"certificateStore": "My",
"certificateUrl": "[parameters('certificateUrlValue')]"
}
]
}
]
},
但是具有硬编码的RDP凭据是一个安全问题,所以我想Use Azure Key Vault to pass secure parameter value during deployment
因此,我向Keyvault添加了2个随机秘密字符串,该字符串在管道中较早部署,然后尝试:
"osProfile": {
"adminUsername": {
"reference": {
"keyVault": {
"id": "[parameters('sourceVaultResourceId')]"
},
"secretName": "RdpUsername"
}
},
"adminPassword": {
"reference": {
"keyVault": {
"id": "[parameters('sourceVaultResourceId')]"
},
"secretName": "RdpPassword"
}
},
"computernamePrefix": "[variables('vmNodeType0Name')]",
"secrets": [
{
"sourceVault": {
"id": "[parameters('sourceVaultResourceId')]"
},
"vaultCertificates": [
{
"certificateStore": "My",
"certificateUrl": "[parameters('certificateUrlValue')]"
}
]
}
]
},
不幸的是,这会产生错误:
解析值时遇到意外字符:{。路径'properties.virtualMachineProfile.osProfile.adminUsername',第1行,位置3178。
我的问题是:为什么括号{
在那里意外?
我的ARM模板基于azure-quickstart-templates/service-fabric-secure-cluster-5-node-1-nodetype,并且如上所写,适用于硬编码值。
keyVault引用只能用作参数值-因此在param文件或部署的parameters属性中。您不能将其直接用作资源上的属性值。