尝试验证任何 ARM 模板但得到:'Error converting value <...MyTemplate...> to type '.....Templates.Schema.Template'

Trying to validate any ARM Template but getting: 'Error converting value <...MyTemplate...> to type '....Templates.Schema.Template'

我正在尝试验证一个 arm 模板——任何 arm 模板——但我总是得到同样的错误:

The request content was invalid and could not be deserialized: 'Error converting value "
{
...
}" to type 'Microsoft.WindowsAzure.ResourceStack.Frontdoor.Templates.Schema.Template'. Path 'properties.template', line 1, position 1202.'.

我在 Azure 门户上创建了 ARM 模板并将其插入:

#!/usr/bin/env python3                                                                                                                                                                   

# https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authoring-templates                                                                                       
t='''                                                                                                                                                                                    
{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1",
    "apiProfile": "",
    "parameters": {
        "testType": {
            "type": "string",
            "defaultValue": "Standard_LRS",
            "allowedValues": [
                "Standard_LRS",
                "Standard_ZRS",
                "Standard_GRS",
                "Standard_RAGRS",
                "Premium_LRS"
            ]
        }
    },
    "variables": {
        "testName": "[concat('test', uniqueString(resourceGroup().id))]"
    },
    "functions": [],
    "resources": [
        {
            "name": "[variables('testName')]",
            "type": "Microsoft.Storage/storageAccounts",
            "location": "[resourceGroup().location]",
            "apiVersion": "2015-06-15",
            "dependsOn": [],
            "tags": {
                "displayName": "test"
            },
            "properties": {
                "accountType": "[parameters('testType')]"
            }
        }
    ],
    "outputs": {}
}    

'''
from azure.common.client_factory import get_client_from_cli_profile
from azure.mgmt.resource import ResourceManagementClient
c = get_client_from_cli_profile(ResourceManagementClient)

print(c.deployments.validate('PAWS_Resources', 'food', c.models().DeploymentProperties(mode='incremental', template=t)).error.message)

根据文档:

template object The template content. You use this element when you want to pass the template syntax directly in the request rather than link to an existing template. It can be a JObject or well-formed JSON string. Use either the templateLink property or the template property, but not both.

但是,它需要一个 python 对象,而不是 "well-formed JSON string"。

删除模板数据周围的引号使其工作。