Как импортировать random_id с помощью keepers

#terraform #infrastructure

#terraform #инфраструктура

Вопрос:

У меня текущая конфигурация применяется в другом месте:

 resource "random_id" "certificate" {
  byte_length = 3
  prefix      = "my-cert-prefix-"

  keepers = {
    "domains": "api.domain.com"
  }
}
  

.. и теперь мне нужно импортировать в текущее состояние.

Запустив «show» cmd, мы можем увидеть что-то вроде:

 resource "random_id" "certificate" {
    b64         = "my-cert-prefix-3YvH"
    b64_std     = "my-cert-prefix-3YvH"
    b64_url     = "my-cert-prefix-3YvH"
    byte_length = 3
    dec         = "my-cert-prefix-14519239"
    hex         = "my-cert-prefix-dd8bc7"
    id          = "3YvH"
    keepers     = {
        "domains" = "api.domain.com"
    }
    prefix      = "my-cert-prefix-"
}
  

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

terraform import module.XXX.random_id.certificate "my-cert-prefix-,3YvH"

как я могу добавить атрибут «keepers» к текущему состоянию?

(редактировать: добавление текущего плана после импорта)

 # module.XXXX.google_compute_managed_ssl_certificate.service must be replaced
 /- resource "google_compute_managed_ssl_certificate" "service" {
      ~ certificate_id            = 5697321803048287000 -> (known after apply)
      ~ creation_timestamp        = "2020-09-22T11:35:18.396-07:00" -> (known after apply)
      ~ expire_time               = "2020-12-21T09:42:04.000-08:00" -> (known after apply)
      ~ id                        = "projects/XX/global/sslCertificates/XXXX-dd8bc7" -> (known after apply)
      ~ name                      = "my-cert-prefix-dd8bc7" -> (known after apply) # forces replacement
        project                   = "XXXX"
      ~ self_link                 = "https://www.googleapis.com/compute/v1/projects/XXX/global/sslCertificates/my-cert-prefix-dd8bc7" -> (known after apply)
      ~ subject_alternative_names = [
          - "api.domain.com",
          - "europe-west1-api.domain.com",
          - "us-east1-api.domain.com",
          - "us-west1-api.domain.com",
        ] -> (known after apply)
        type                      = "MANAGED"

        managed {
            domains = [
                "api.domain.com",
                "europe-west1-api.domain.com",
                "us-east1-api.domain.com",
                "us-west1-api.domain.com",
            ]
        }

      - timeouts {}
    }

# module.XXXX.random_id.certificate must be replaced
 /- resource "random_id" "certificate" {
      ~ b64         = "my-cert-prefix-3YvH" -> (known after apply)
      ~ b64_std     = "my-cert-prefix-3YvH" -> (known after apply)
      ~ b64_url     = "my-cert-prefix-3YvH" -> (known after apply)
        byte_length = 3
      ~ dec         = "my-cert-prefix-14519239" -> (known after apply)
      ~ hex         = "my-cert-prefix-dd8bc7" -> (known after apply)
      ~ id          = "3YvH" -> (known after apply)
        keepers     = {
            "domains" = "api.domain.com"
        } # forces replacement
        prefix      = "my-cert-prefix-"
    }
  

Комментарии:

1. Вам не нужно указывать что-либо о хранителях при импорте состояния, это просто конфигурация, которая сообщает Terraform, когда поворачивать случайность, а не сохранять ее неизменной. Если вы импортируете его, как показано в вашем вопросе, а затем запускаете план, видите ли вы разницу? Если да, можете ли вы отредактировать это в своем вопросе, пожалуйста?

2. Спасибо за ответ, я добавил план выполнения в исходный вопрос

3. Тем временем я вручную обновил новый файл состояния json; на данный момент это можно рассматривать как «промежуточное решение», просто добавляет недостающий атрибут: "keepers": { "domains": "api.domain.com" }

4. Глядя на то, как реализован импорт для этого типа ресурса, кажется, что ручное редактирование состояния — единственный способ в этом случае. terraform import на самом деле не предназначен для работы с этими объектами только в состоянии, поэтому random поставщик описывает только основы.