Почему terraform в некоторых случаях решает дрейф значений необязательных атрибутов, а в других нет?
Возьми 2 кейса.
Поставщик терраформ AWS
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "4.14.0"
}
}
}
provider "aws"{
region = "us-east-1"
access_key = "<insert here>"
secret_key = "<insert here>"
}
resource "aws_instance" "my_ec2" {
ami = "ami-0022f774911c1d690"
instance_type = "t2.micro"
}
После выполнения вышеописанного, если кто-то вручную создаст пользовательскую группу безопасности и назначит ее экземпляру EC2, созданному выше, после этого a обновит файл, чтобы он содержал пользовательскую группу безопасности в своем разделе группы безопасности. Однако это НЕ вернет предыдущую группу безопасности «по умолчанию».
Этого я и ожидал, поскольку мой tf-код явно не хотел привязывать определенную группу безопасности.
Поставщик github terraform
terraform {
required_providers {
github = {
source = "integrations/github"
version = "~> 4.0"
}
}
}
# Configure the GitHub Provider
provider "github" {
token = var.github-token
}
resource "github_repository" "example" {
name = "tfstate-demo-1"
//description = "My awesome codebase" <------ NOTE THAT WE DO NOT SPECIFY A DESCRIPTION
auto_init = true
visibility = "public"
}
В этом случае репо создается без описания. После этого, если обновить описание через github.com и повторно запустить
Сообщение в командной строке terraform намекает на это запутанное поведение:
Если вы не внесли эквивалентные изменения в свою конфигурацию, . или игнорировал соответствующие атрибуты, используя
, следующий план может включать действия по отмене или реагированию на эти изменения.
Может включать? Почему двусмысленность?
И почему tf применяет пустое описание в этом случае, когда я ничего не указал в необязательном поле описания в моем коде tf? И почему это поведение различается у разных провайдеров? Не следует ли оставлять необязательные аргументы в покое, как поставщик AWS не отменяет пользовательскую группу безопасности, прикрепленную к экземпляру EC2 за пределами terraform? Что за дизайнерское мышление стоит за этим?