Какова правильная конфигурация поставщика Terraform для ресурсов Google Cloud Platform с аргументами бета-версии?
Для терраформирования любого ресурса Google Cloud Platform (GCP), определенного любыми аргументами бета-версии, требуется поставщик. Если провайдер будет использоваться вместо или в тандеме с
google
провайдер?
Другими словами, предположим, что в проекте GCP существует определенный кластер Google Kubernetes Engine (GKE).
$GCP_PROJECT_NAME
:
gcloud container clusters list \
--format="value(name)" \
--project=$GCP_PROJECT_NAME
#=>
. . .
$GKE_CLUSTER_NAME
. . .
с включенным Config Connector:
gcloud container clusters describe $GKE_CLUSTER_NAME \
--format=“value(addonsConfig.configConnectorConfig.enabled)” \
--zone=$GKE_CLUSTER_ZONE
#=>
True
Терраформирование
$GKE_CLUSTER_NAME
требует
google_container_cluster
определение ресурса в
container_cluster.tf
это включает в себя как
config_connector_config
аргумент (в пределах
addons_config
блокировать; подробнее здесь ) и аргумент (отсутствует в официальной справочной документации):
resource "google_container_cluster" "test" {
addons_config {
config_connector_config {
enabled = true
}
. . .
}
. . .
provider = google-beta
. . .
}
но не требует
google-beta
определение в:
provider "google" {
project = ". . ."
}
terraform {
required_providers {
google = {
version = "~> 3.83.0"
}
}
}
Это и отсутствие
provider
аргумент из других определений ресурсов, таких как
google_container_node_pool
найти в
container_node_pool.tf
, приводит к следующему результату команды:
terraform providers
Providers required by configuration:
.
├── provider[registry.terraform.io/hashicorp/google] ~> 3.83.0
└── provider[registry.terraform.io/hashicorp/google-beta]
Providers required by state:
provider[registry.terraform.io/hashicorp/google]
provider[registry.terraform.io/hashicorp/google-beta]
после того, как команда обновила
terraform.tfstate
государственный файл.
Является ли более правильным и менее подверженным ошибкам методом терраформирования ресурсов GCP с бета-аргументами? Или я должен запустить
replace-provider
подкоманда вместо этого:
terraform state replace-provider \
-auto-approve \
"hashicorp/google" \
"hashicorp/google-beta"
#=>
Terraform will perform the following actions:
~ Updating provider:
- registry.terraform.io/hashicorp/google
+ registry.terraform.io/hashicorp/google-beta
Changing 2 resources:
google_container_node_pool.$GKE_NODE_POOL_NAME
Successfully replaced provider for 1 resources.
и изменить
providers.tf
:
provider "google-beta" {
project = ". . ."
}
terraform {
required_providers {
google-beta = {
version = "~> 3.83.0"
}
}
}
так что выход
providers
команда:
terraform providers
#=>
Providers required by configuration:
.
└── provider[registry.terraform.io/hashicorp/google-beta] ~> 3.83.0
Providers required by state:
provider[registry.terraform.io/hashicorp/google-beta]
после
apply
команда обновляет состояние в
terraform.state
?
1 ответ
Вы должны использовать оба и провайдеров.
Это безопасно использовать оба и поставщик в том же самом. Terraform отправляет запросы на любой ресурс, требующий поставщика, в конечную точку Beta:
https://. . .googleapis.com/v1beta1/. . .
; Т.е. использование провайдера аналогично использованию
beta
gcloud
группа.
Вам следует :
включить в
providers.tf
:provider "google" { project = ". . ." } provider "google-beta" { project = ". . ." } terraform { required_providers { google = { version = "~> 3.83.0" } google-beta = { version = "~> 3.83.0" } } }
использовать
provider
аргумент для каждого ресурса GCP:google-beta
для любого ресурса, у которого есть хотя бы одна включенная бета-функция:resource "google_container_cluster" "beta_cluster" { . . . provider = google-beta . . . }
а также
google
для всех остальных ресурсов:resource "google_container_node_pool" "general_availability_node_pool" { . . . provider = google . . . }
После внесения обоих предложенных выше изменений и последующего запуска
refresh
, выход
providers
команда теперь должна выглядеть так:
terraform providers
#=>
Providers required by configuration:
.
├── provider[registry.terraform.io/hashicorp/google] ~> 3.83.0
└── provider[registry.terraform.io/hashicorp/google-beta] ~> 3.83.0
Providers required by state:
provider[registry.terraform.io/hashicorp/google]
provider[registry.terraform.io/hashicorp/google-beta]
Вам следует прочитать официальный документ. для версий провайдера здесь.