Почему 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 на этапе обновления и б) удалит описание из файл, а также репозиторий на github.com.

Сообщение в командной строке terraform намекает на это запутанное поведение:

Если вы не внесли эквивалентные изменения в свою конфигурацию, . или игнорировал соответствующие атрибуты, используя , следующий план может включать действия по отмене или реагированию на эти изменения.

Может включать? Почему двусмысленность?

И почему tf применяет пустое описание в этом случае, когда я ничего не указал в необязательном поле описания в моем коде tf? И почему это поведение различается у разных провайдеров? Не следует ли оставлять необязательные аргументы в покое, как поставщик AWS не отменяет пользовательскую группу безопасности, прикрепленную к экземпляру EC2 за пределами terraform? Что за дизайнерское мышление стоит за этим?

0 ответов

Другие вопросы по тегам