Pull to refresh

Comments 10

модули это конечно прикольно, но дублирование переменных это просто кошмар.
Допустим, создаю внешний IP так:
module "address" {
source = "terraform-google-modules/address/google"
version = "2.0.0"
region = var.region
project_id = var.project_id
}

Как прицепить полученный айпишник на cloud_nat, если его конфиг такой:
module "cloud-nat" {
source = "terraform-google-modules/cloud-nat/google"
version = "~> 1.2"
router = var.router_name
project_id = var.project_id
region = var.region
name = "my-cloud-nat-${var.router_name}"

nat_ip_allocate_option = MANUAL_ONLY
nat_ips = ["https://www.googleapis.com/compute/v1/module.address.addresses"]
}

Как исправить последние две строки конфига ната? Терраформ на них ругается:
Error: Invalid reference

on main.tf line 62, in module "cloud-nat":
62: nat_ip_allocate_option = MANUAL_ONLY

A reference to a resource type must be followed by at least one attribute
access, specifying the resource name

Смотрим https://registry.terraform.io/modules/terraform-google-modules/cloud-nat/google/1.1.0?tab=inputs.
nat_ip_allocate_option — это строка, MANUAL_ONLY нужно заключить в кавычки, иначе terrаform думает, что это сслыка на какой-то ресурс.


Что касается nat_ips, то согласно линку выше, это массив аттрибутов self_link созданных адресов. Смотрим, что "экспортирует" модуль address в своих output: https://registry.terraform.io/modules/terraform-google-modules/address/google/latest?tab=outputs
Там как раз есть self_links — list of URIs of the created address resources.


То есть поседние две строки должны выглядеть так:


nat_ip_allocate_option = "MANUAL_ONLY"
nat_ips = module.address.self_links

Вставил предложенные две строки, теперь получаю такое:
Error: Unsupported attribute


on main.tf line 63, in module "cloud-nat":
63: nat_ips = module.address.self_links


This object does not have an attribute named "self_links".


Я понимаю, что здесь не место для решение подобных вопросов, но если все же будут идеи, буду благодареню

Не ожидал, что мою статью переведут и опубликуют здесь! Спасибо :)
Если вдруг будут какие-то вопросы — охотно отвечу!
На всякий случай уточню, что статья ориентирована на новичков в Terraform, её цель объяснить основы, а не рассказать про best practices.

Спасибо за оригинальный пост. Планируется ли создать пост по созданию модулей terraform, передачу параметров в модуль, примеры кода?

chemtech Вы имеете в виду некую расширенную версию этого поста? Я не думал, что буду писать расширенную версию, т.к. в руководстве от Hashicorp это рассказано/показано уже.
Но на freeCodeCamp у меня еще есть вот такая статья, если вам интересно — про практики работы с кодом Terraform.
Использую terraform для vsphere. Честно говоря язык и концепция у TF, как по мне, ужасно избыточные. Ресурсы требуют обязательного указания огромного числа ОБЯЗАТЕЛЬНЫХ параметров. Причем большинство из них задаются по принципу «сделать data по имени — получить id для этого параметра — вставить id в параметр ресурса». В результате код для создания одного вида виртуальных машин (например фронтендов) занимает 2-3 страницы (без учета еще data и provisioner). Также в TF для vSphere нет нативных реализаций для раскидывания ВМ по группе датасторов (если это не datastore cluster), кластеров хостов (и связанных с ними сетей) — таким образом количество ресурсов многократно увеличивается. Инфраструктура как код превращается в войну и мир. В этой ситуации использование модуля (например terraform-vsphere-vm) позволяет задать большинство параметров по умолчанию/передать от шаблона — это существенно уменьшает объем кода, хотя и не решает всех проблем (но велосипедить можно). Учитывая популярность TF для AWS видимо там всё не столь печально и избыточно…

Да, вы правы: иногда этот момент «доставляет» эмоций.
Однако, есть пара нюансов:


  • такая ситуация не обязательна для всех провайдеров
  • бывает и так, что скрупулёзное указание значений для атрибутов ресурса спасает от внезапностей, если какое-то умолчателное значение внезапно меняется.

Ну и да, модули в том числе решают и такую проблему :)

Sign up to leave a comment.

Articles

Change theme settings