ARM Template API Management Развертывание PolicyContent

Я пытаюсь использовать шаблоны ARM для развертывания моей службы управления API и заставить все работать, кроме policyContent. По сути, он хочет использовать policyContent как "Json избежал Xml Encoded содержимого Политики". Это очень сложно поддерживать, и я пытался найти способ взять файл XML и вставить содержимое в эту строку, или каким-то другим способом. Я бы не хотел писать программу для поддержки этих строк, потому что это похоже на то, что не должно быть таким сложным.

Ссылка на политику

Пример со строкой

{ "name": "policy", "type": "Microsoft.ApiManagement/service/apis/policies", "apiVersion": "2017-03-01", "properties": { "policyContent": "string" } }

2 ответа

Решение

Вы можете сохранить ваши политики в файле XML и ссылаться на него следующим образом:

{
    "apiVersion": "2018-01-01",
    "name": "policy",
    "type": "Microsoft.ApiManagement/service/policies",
    "properties": {
        "policyContent": "[concat(parameters('repoBaseUrl'), '/policy.xml')]",
        "contentFormat": "rawxml-link"
    },
    "dependsOn": [
        "[resourceId('Microsoft.ApiManagement/service/', parameters('ApimServiceName'))]"
    ]
}

Ваш policy.xml Файл должен быть доступен онлайн и будет выглядеть так:

<policies>
    <inbound>
        <rate-limit calls="3" renewal-period="10" />
        <base />
    </inbound>
    <outbound>
        <base />
    </outbound>
    <backend>
        <base />
    </backend>
    <on-error>
        <base />
    </on-error>
</policies>

Ну, единственное, о чем я могу подумать (потому что ничто из родного в шаблонах arm не поможет вам), это прочитать входные данные из файла и преобразовать их в JSON:

$xml = (Get-Content file -Raw).ToString()
($xml | ConvertTo-Json -Compress) -replace '\\u003c','<' ) -replace '\\u003e','>'

Это может работать без замены этих юникодов обратно на <>, без понятия.

Другие вопросы по тегам