Ресурс плана terraform cloudflare_list всегда требует обновления на месте без изменений

Я использовал код terraform, как в примере ниже , чтобы успешно создать список IP-адресов:

      resource "cloudflare_list" "example" {
  account_id  = "f037e56e89293a057740de681ac9abbe"
  name        = "example_list"
  description = "example IPs for a list"
  kind        = "ip"

  item {
    value {
      ip = "192.0.2.0"
    }
    comment = "one"
  }

  item {
    value {
      ip = "192.0.2.1"
    }
    comment = "two"
  }
}

Однако всегда хочет поменять местами элементы, например:

        # cloudflare_list.example will be updated in-place
  ~ resource "cloudflare_list" "example" {
        id          = "xxxxxxxxxxxxxxxxxxxxxx"
        name        = "example_list"
        # (3 unchanged attributes hidden)

      ~ item {
          ~ comment = "one" -> "two"

          ~ value {
              ~ ip = "192.0.2.0" -> "192.0.2.1"
            }
        }
      ~ item {
          ~ comment = "two" -> "one"

          ~ value {
              ~ ip = "192.0.2.1" -> "192.0.2.0"
            }
        }
    }

Это список, так что меня не волнует, что он поменяется местами, поэтому я так и сделал.apply, надеясь, что это было одноразово. я получилApply complete! Resources: 0 added, 1 changed, 0 destroyed.

Но еще раз, следующийterraform planпоказывает то же самое. В пользовательском интерфейсе Cloudflare список не изменился. Как исправить этот цикл, чтобы получить желаемое «Ваша инфраструктура обновлена»? Спасибо.

Моя конфигурация:

      Terraform v1.3.3
on linux_amd64
+ provider registry.terraform.io/cloudflare/cloudflare v3.26.0

1 ответ

Это известная ошибка, проверьте https://github.com/cloudflare/terraform-provider-cloudflare/issues/1827 .

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

      resource "cloudflare_list" "example" {
  account_id  = "f037e56e89293a057740de681ac9abbe"
  name        = "example_list"
  description = "example IPs for a list"
  kind        = "ip"

  item {
    value {
      ip = "192.0.2.1"
    }
    comment = "two"
  }

  item {
    value {
      ip = "192.0.2.0"
    }
    comment = "one"
  }

}

Согласно этому комментарию

Небольшой обходной путь, по-видимому, заключается в том, что элементы списка в терраформе точно соответствуют порядку, в котором он был создан (поэтому вручную переупорядочивают список в терраформе после его применения). Кажется, что он тесно связан с буквенно-цифровой сортировкой, что позволяет последующему плану / применению не требовать изменений.

Редактировать: сортировка на самом деле буквенно-цифровая, но вам нужно удалить специальные символы, такие как /-_, а затем отсортировать список, поэтому следующий правильный порядок, как его видит Cloudflare:

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