Правила страницы Cloudflare с использованием провайдера terraform-cloudflare не обновляют правила страницы
Я использую провайдера Terraform + Cloudflare.
Я создал правило страницы при первом запуске terraform plan + terraform apply.
Выполнение той же команды второй раз возвращает ошибку:
Ошибка: не удалось создать правило страницы: ошибка makeRequest: HTTP-статус 400: content "{"success":false,"errors":[{"code":1004,"message":" Ошибка проверки правила страницы: см. Сообщения для details."}],"messages":[{"code":1,"message":". independentTargetUrl: в вашей зоне уже есть существующее правило страницы с этим URL. Если вы изменяете только настройки правила страницы, используйте вместо этого параметр "Изменить правило страницы", "type":null}], "result":null} "
TL; DR: как я могу заставить Terraform обновлять существующее правило страницы только путем изменения определения в этом файле? Разве это не должно было работать?
Это файл terraform.tf:
provider "cloudflare" {
email = "__EMAIL__"
api_key = "__GLOBAL_API_KEY__"
}
resource "cloudflare_zone_settings_override" "default_cloudflare_config" {
zone_id = "__ZONE_ID__"
settings {
always_online = "on"
always_use_https = "off"
min_tls_version = "1.0"
opportunistic_encryption = "on"
tls_1_3 = "zrt"
automatic_https_rewrites = "on"
ssl = "strict"
# 8 days
browser_cache_ttl = "691200"
}
}
resource "cloudflare_page_rule" "rule_bypass_wp_admin" {
target = "*.__DOMAIN__/*wp-admin*"
zone_id = "__ZONE_ID__"
priority = 2
status = "active"
actions {
always_use_https = true
always_online = "off"
cache_level = "bypass"
disable_apps = "true"
disable_performance = true
disable_security = true
}
}
3 ответа
Добавьте следующую строку в определение правила страницы:
`lifecycle {
ignore_changes = [priority]
}`
Это заставит Terraform игнорировать любые изменения в этом поле. Таким образом, когда вы запускаете
terraform apply
Terraform воспринимает изменения как обновление существующих ресурсов, а не как создание новых ресурсов.
В этом случае Terraform пытается создать новое правило страницы, которое конфликтует с ограничением Cloudflare, что у вас не может быть нескольких правил страницы, действующих на одном и том же пути к ресурсу.
СОВЕТ: беги
terraform plan -out=tfplan
это распечатает план, который будет применен на экране и в файле. Затем вы получите некоторое представление об изменениях, которые внесет Terraform, и шанс обнаружить некоторые непреднамеренные изменения.
Я все еще не могу обновить через Terraform, поэтому я использовал Python, чтобы удалить его перед воссозданием.
# Delete existing page rules using API before readding with Terraform
# For some reason, it I could not update then with Terraform without deleting first
# https://stackru.com/questions/63942345/cloudflare-page-rules-using-terraform-cloudflare-provider-does-not-update-page-r
page_rules = cf.zones.pagerules.get(zone_id)
print(page_rules)
for pr in page_rules:
cf.zones.pagerules.delete(zone_id, pr.get('id'))
page_rules = cf.zones.pagerules.get(zone_id)
if page_rules:
exit('Failed to delete existing page rules for site')
Попробуйте удалить
always_use_https
аргумент так ваш
actions
блок выглядит так:
actions {
always_online = "off"
cache_level = "bypass"
disable_apps = "true"
disable_performance = true
disable_security = true
}
Сегодня я обнаружил, что с этим аргументом есть проблема, похоже на ошибку.