Используйте шаблон ARM для создания базы данных путем копирования другой, только если целевая база данных еще не существует - PullRequest
0 голосов
/ 23 октября 2018

Я использую шаблон ARM для подготовки базы данных SQL Azure.Я хотел бы сказать, что , если эта база данных еще не существует, она должна быть создана путем копирования другой, фиксированной базы данных.Но , если моя желаемая база данных действительно уже существует, ее следует оставить в покое.

Функциональность «делать что-то, только если текущее состояние не является желаемым состоянием»стандартная функциональность развертываний в режиме Incremental.Но кажется, что это не очень хорошо с createMode из Copy.

У меня есть шаблон JSON, который выглядит следующим образом (не говоря уже об отсутствии параметризации, это пример):

{
  "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Sql/servers/databases",
      "name": "[myservername/mydatabasename]",
      "apiVersion": "2014-04-01-preview",
      "location": "[UK South]",
      "properties": {
        "createMode": "Copy",
        "sourceDatabaseId": "[redacted]/myservername/databases/mysourcedatabase",
      }
    }
  ]
}

Первое развертывание прошло успешно, как и ожидалось.Но если такое же развертывание повторяется, получается ошибка:

New-AzureRmResourceGroupDeployment : 11:51:49 - Resource Microsoft.Sql/servers/databases 'myservername/mydatabasename' failed with message '{
  "code": "BadRequest",
  "message": "The destination database name 'mydatabasename' already exists on the server 'myservername'.",
  "target": null,
  "details": [],
  "innererror": []
}'

Если я использую createMode Default, то я могу повторить развертывание, и оно идемпотентно, но я не могу указать, чтопервоначальное создание должно быть выполнено копированием mysourcedatabase.

Если не делать ужасных вещей с condition и resourceId, есть ли способ сказать «создать путем копирования или * 1028»* ничего не делать "?

1 Ответ

0 голосов
/ 23 октября 2018

Нет, вы не можете сделать это даже с conditions и resourceId(), по крайней мере, без некоторых хаков.Самый простой способ - использовать внешнюю сущность, чтобы решить, нужно ли это развертывание, и передать соответствующий параметр.

...