2015-11-29 4 views
10

Учитывая следующий ресурс в шаблоне AzureRM, как можно кодировать одиночную кавычку в части commandToExecute?Как избежать одиночной кавычки в шаблоне ARM

{ 
    "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 
    } 
    } 
}, 
+0

Вы пытались избежать с помощью \. т.е. «commandToExecute»: «[concat ('/ bin/bash -c \' echo \" export DOCKER_HOST =: 2375 \ ">>/home/\ ', параметры (\' adminUsername \ '), \' /. profile \ '')] " –

ответ

11

Я работал вокруг этого с переменной:

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

Это не элегантный, но это работает.

+0

Спасибо за это, спас мне кучу времени –

+0

как это ответ, когда '' '' есть? – 4c74356b41

-4

Не обязательно кодировать одиночную кавычку в части commandToExecute. сегмент ниже JSON был утвержден действительным в формате JSON http://jsonlint.com/

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

но недопустимый действительный шаблон руки –

+0

Какая ошибка вы получаете и каков ваш шаблон шаблона ARM json? – juvchan

+0

вот схема: http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#. Проблема в том, что рука признает единственную цитату как свою собственную директиву обработки ... – david

7

Вы избегаете функций Azure ARM так же, как со строками VB: вы просто дублируете символы одиночной кавычки.

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

выходы

This is a 'quoted' word. 

двойные кавычки все еще нужно экранировать от JSON.

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

выходы

'single' and "double" quotes. 
Смежные вопросы