#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
поставщик описывает только основы.