AzureRMテンプレートに次のリソースがある場合、commandToExecute
部分の単一引用符をどのようにエンコードしますか?
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "[concat(variables('vmNameMaster'), copyIndex(), '/sethost')]",
"apiVersion": "2015-06-15",
"location": "[resourceGroup().location]",
"copy": {
"name": "extensionLoopNode",
"count": "[variables('masterCount')]"
},
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', variables('vmNameMaster'), copyIndex(),'/extensions/DockerExtension')]"
],
"properties": {
"publisher": "Microsoft.OSTCExtensions",
"type": "CustomScriptForLinux",
"typeHandlerVersion": "1.4",
"settings": {
"fileUris": [ ],
"commandToExecute": "[concat('/bin/bash -c \'echo \"export DOCKER_Host=:2375\" >> /home/', parameters('adminUsername') ,'/.profile\'')]",
"timestamp": 123456789
}
}
},
私はこれを変数で回避しました:
"variables": {
"singleQuote": "'",
},
...
"settings": {
"fileUris": [],
"commandToExecute": "[concat('/bin/bash -c ', variables('singleQuote'), 'echo \"export DOCKER_Host=:2375\" >> /home/', parameters('adminUsername') ,'/.profile', variables('singleQuote'))]",
}
エレガントではありませんが、機能します。
Azure ARM関数は、VB文字列と同じ方法でエスケープします。つまり、一重引用符を2倍にするだけです。
[concat('This is a ''quoted'' Word.')]
出力
This is a 'quoted' Word.
二重引用符はJSONからエスケープする必要があります。
[concat('''single'' and \"double\" quotes.')]
出力
'single' and "double" quotes.
DevOpsリリースパイプラインでは、APIMポリシーについて、使用して引用します。式内の引用符をエスケープするには、
<when condition='@(context.Variables.GetValueOrDefault<bool>("isAuthOk"))' />