Я использую шаблон 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»* ничего не делать "?