Какова правильная конфигурация поставщика 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]

Вам следует прочитать официальный документ. для версий провайдера здесь.