Как создать уникальный Guid при каждом развертывании или скрыть параметр newGuid () function от пользователя в шаблоне ARM? - PullRequest
1 голос
/ 02 августа 2020

Мне нужен уникальный идентификатор при каждом настраиваемом развертывании с использованием шаблона ARM для назначения имени ресурса (uniqueName), которое должно быть глобально уникальным. Согласно документации newGuid () возвращает значение в формате глобального уникального идентификатора. Эта функция может использоваться только в значении по умолчанию для параметра. Поскольку функция newGuid () может быть вызвана только в разделе параметров, но я не хочу передавать блок ввода пользователю, потому что пользователь может редактировать поле при развертывании этого, так как я могу скрыть это от пользователя или есть ли другие способ создания одного и того же уникального guid глобально при каждом развертывании?

Я пробовал создать такой же уникальный идентификатор, используя это в разделе переменных, но он работает только несколько раз развертывания. Я не уверен, что проблема с развертыванием, но это возможно, потому что функция guid не всегда создает уникальное поле.

"variables": {
        "uniqueName":"[guid(resourceGroup().id, deployment().name)]"
}

У меня есть этот шаблон.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "appname": {
            "defaultValue": "xyz",
            "type": "String"
        },
        "uniqueName": {
            "defaultValue": "[newGuid()]",
            "type": "String"
        },
        "myIdentity": {
            "type": "String"
        }
    },
    "variables": {
        "location": "[resourceGroup().location]",
        "ResourceGroupName": "[resourceGroup().name]"
    },
    "resources": [
        {
            "type": "Microsoft.Resources/deploymentScripts",
            "apiVersion": "2019-10-01-preview",
            "name": "[parameters('uniqueName')]",
            "location": "[variables('location')]",
            "kind": "AzureCLI",
            "identity": {
                "type": "UserAssigned",
                "userAssignedIdentities": {
                    "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('myIdentity'))]": {}
                }
            },
            "properties": {
                "AzCliVersion": "2.0.80",
                "timeout": "PT10M",
                "arguments": "[parameters('appname')]",
                "cleanupPreference": "OnSuccess",
                "retentionInterval": "P1D",
                "supportingScriptUris": [
                    "https://some-uri/test.sh"
                ],
                "scriptContent": "[concat('./test.sh ', string(parameters('appname')), ' > $AZ_SCRIPTS_OUTPUT_PATH')]"
            }
        }
    ],
    "outputs": {
        "result": {
            "type": "String",
            "value": "[base64(string(reference(parameters('resourceName')).outputs))]"
        }
    }
}

Ошибка развертывания после некоторого успешное развертывание - это.

{"code":"DeploymentFailed","message":"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details.","details":[{"code":"Conflict","message":"{\r\n \"status\": \"canceled\",\r\n \"error\": {\r\n \"code\": \"ResourceDeploymentFailure\",\r\n \"message\": \"The resource operation completed with terminal provisioning state 'canceled'.\",\r\n \"details\": [\r\n {\r\n \"code\": \"DeploymentScriptExceededMaxAllowedTime\"\r\n }\r\n ]\r\n }\r\n}"}]}

1 Ответ

0 голосов
/ 06 августа 2020

Пункт 1: Эта проблема решена после добавления этого свойства в ресурсы. После добавления этого свойства убедитесь, что некоторые контейнеры не работают. Удалите вручную учетные записи хранения и контейнеры, созданные в результате предыдущих неудачных развертываний.

"cleanupPreference": "Always"

Всегда : Удалите автоматически созданные ресурсы, когда выполнение сценария перейдет в состояние терминала. Если используется существующая учетная запись хранения, служба сценариев удаляет общую папку, созданную в учетной записи хранения. Поскольку ресурс deploymentScripts может все еще присутствовать после очистки ресурсов, служба сценария сохраняет результаты выполнения сценария, например stdout, output, return value, et c. перед удалением ресурсов.

Первоначально свойство было установлено на "cleanupPreference": "OnSuccess", что не удаляло созданную учетную запись хранения и контейнеры в неудачных развертываниях и не создавало проблем при следующем развертывании.

для получения дополнительных сведений проверьте это azure документ

Пункт 2. Создание уникального идентификатора может быть выполнено с помощью функции newGuid () , но только в разделе параметров шаблонов.

Что создает уникальный идентификатор глобально, но если вы не хотите отображать поле ввода пользователя, то guid () также работает.

"variables": {
        "uniqueName":"[guid(resourceGroup().id, deployment().name)]"
}

см. guid для более подробной информации.

...