Так что теперь вы рады всего, что вы учитесь в этих первых главах. Но их хороший шанс в том, что если попытайтесь выполнить команду PowerShell или Bash на вашей стороне, вы получите:
____ с указанным именем ____ уже существует.
Сообщение об ошибке, утверждающее, что это имя уже занято, потому что некоторые имена должны быть уникальными. В этой главе вы узнаете, как решить эту проблему и намного больше, используя Функции шаблонов руки Отказ
Azure DEVOPS — DEVOPS LAB — Видео
Познакомьтесь с функциями для шаблонов руки
Язык ARM очень близко к JSON, но именно здесь существует главный язык различия руки, содержащий тонны функций для работы с массивом, строкой, датой, развертыванием, номером, объектом, ресурсом и многом. Вот просто несколько из них, которые мы будем скрывать в этой главе (отметьте полный список здесь )
- ссылка
- ResourceGroup
- recreendiD
- параметры
- переменные
- впадинат
- uncnow
Потому что один из лучших способов учиться, давайте применяем некоторые из этих функций в разных сценариях.
Функция: concat и uncnow
Давайте начнем с этой проблемы, где нам нужно уникальное глобальное имя для наших ресурсов. Мы могли бы добавить некоторую динамическую строку, как текущее время, на имя ресурса.
Функция Utcnow (формат)
Может использоваться в качестве значения по умолчанию для параметра, мы могли бы добавить параметр и использовать функцию CONCAT ()
Чтобы добавить это значение названию нашего ресурса.
"parameters": { "mydate": { "type": "string", "defaultValue": "[utcNow('yyyyMMddTHHmm')]", "metadata": { "description": "description" } } }, "resources": [ { "name": "[concat(parameters('storageName'), parameters('mydate'))]", "type": "Microsoft.Storage/storageAccounts", } ]
Это сделает имя более уникальным, но есть еще шанс, что кто-то другой развертывает одновременно. И если бы я хотел повторно депону, я потеряю свое мнение, потому что новые ресурсы будут созданы каждый раз. Давайте посмотрим, как мы могли бы улучшить эту ситуацию.
Функция: ResourceGroup и Uniquestring
Функция Uniquestring
является одним из тех функций, которые очень просты и чрезвычайно полезны. Поскольку имя предполагает, что эта функция создаст детерминированную строку хэш на основе значений, представленных в качестве параметров. Это означает то же самое хэш каждый раз … Замечательный! Теперь, что нам нужно, это уникальное значение, которое не изменится и что мы могли бы использовать, чтобы получить уникальную строку.
При развертывании в группе ресурсов вещь, которая не изменяется, — это ресурсная группа. И используя функцию ResourceGroup ()
Мы можем получить свойства объекта.
{ "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}", "name": "{resourceGroupName}", "type":"Microsoft.Resources/resourceGroups", "location": "{resourceGroupLocation}", "managedBy": "{identifier-of-managing-resource}", "tags": { }, "properties": { "provisioningState": "{status}" } }
Вы доступаете в те свойства, добавив «». и название собственности. Итак, ResourceGroup (). ID
будет ли удостоверение личности и ResourceGroup (). Расположение
Местоположение.
Таким образом, лучший способ создать уникальный суффикс для нашего имени ресурса, будет использовать ResourceGroupID в качестве параметра для UNIQUESTRING и CONCATENATE для нашего параметра.
"resources": [ { "name": "[concat(parameters('storageName'), uniqueString(resourceGroup().id))]", "type": "Microsoft.Storage/storageAccounts", } ]
Вы можете при развертывании одного и того же решения двух разных мест включают место в уникальной генерации строки. UniqueString (ResourceGroup (). ID, ResourceGroup (). Расположение)
, это убедится, что каждое расположение имеет соответствующее уникальное имя.
использованная литература
Оригинал: «https://dev.to/azure/demystifying-arm-templates-template-functions-2fn4»