IT

ARM 템플릿에서 단일 따옴표를 이스케이프하는 방법

itgroup 2023. 6. 7. 22:31
반응형

ARM 템플릿에서 단일 따옴표를 이스케이프하는 방법

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
    }
  }
},

VB 문자열과 동일한 방법으로 Azure ARM 기능을 이스케이프할 수 있습니다. 즉, 하나의 따옴표 문자를 두 배로 늘리면 됩니다.

[concat('This is a ''quoted'' word.')]

산출물

This is a 'quoted' word.

이중 따옴표는 여전히 JSON에서 이스케이프되어야 합니다.

 [concat('''single'' and \"double\" quotes.')]

산출물

'single' and "double" quotes.

저는 이 문제를 해결하기 위해 변수를 사용했습니다.

"variables": {
    "singleQuote": "'",
},
...
"settings": {
    "fileUris": [],
    "commandToExecute": "[concat('/bin/bash -c ', variables('singleQuote'), 'echo \"export DOCKER_HOST=:2375\" >> /home/', parameters('adminUsername') ,'/.profile', variables('singleQuote'))]",
}

우아하지는 않지만 효과가 있습니다.

DevOps 릴리스 파이프라인에서 APIM 정책의 경우 "을 사용하여 식 내에서 따옴표를 이스케이프합니다.

<when condition='@(context.Variables.GetValueOrDefault&lt;bool&gt;(&quot;isAuthOk&quot;))' />

명령 ToExecute 파트에서 단일 따옴표를 인코딩할 필요는 없습니다.아래 json 세그먼트는 http://jsonlint.com/ 에서 유효한 json으로 검증되었습니다.

{
    "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
        }
    }
}

언급URL : https://stackoverflow.com/questions/33986180/how-to-escape-single-quote-in-arm-template

반응형