Lex
через zipmap думал сделать, два списка нужно, с ip и index
Lex
первый получить не проблема, а вот индекс не могу найти как
Dmitrii
Сформируй через format() + count.index
Dmitrii
Если совсем веру потеряешь, то открой вот эту ссылку: https://www.terraform.io/docs/providers/external/data_source.html#processing-json-in-shell-scripts
Dmitrii
(Disclaimer: Я Terraform только сам как 2ю неделю юзаю)
Lex
Сформируй через format() + count.index
count.index же вроде только в ресурсе доступен а не в output, не?
Dmitrii
Ну я ж хз где тебе это надо :)
Lex
Ну я ж хз где тебе это надо :)
в output в том то и дело :(
Dmitrii
Я пока решил для себя что забью на модули, аутпуты и прочее и ограничился одни файлом + data source юзаю иногда
Dmitrii
Вот как на TF все переведу начну рефакторить
Dmitrii
А то я с наскоку тоже сначала начал, свои модули вокруг модулей писать, аутпуты абстрактные делать и соснул хуйца нехерски.
Lex
Я тоже сначал забивал на модули, а сейчас тащусь
Lex
очень удобно, есть обобщенный код для инфраструктуры приложения, поднимать окружения с его помощью очень просто
Lex
и следить за консистентностью
Dmitrii
Проблемы белых людей
Dmitrii
Мне бы инфру на ТФ перетащить ))
Dmitrii
@zunkree нашел решение?
Lex
забил
Dmitrii
👍
Lex
есть импорты
Lex
есть даже приблуда на рубях которая и state сгенерит и tf код
Dmitrii
Ага, я в итоге tf код генерю terraforming'ом (руби) а импортирую оригинальным тераформом
Dmitrii
Так оно почему то работает корректнее. :)
Lex
ну Я руками tf код писал а для импорта использовал терраформ
Lex
у меня боль другая, как импортивать 5-к одинаковых инстансов в один ресурс с count
Lex
или импортировать как обычно но потом смержить в один ресурс
Dmitrii
Вот. Вот этим блять я и занимаюсь ))
Dmitrii
У меня тут только много одинаковых инстансов но ансибл их раскидал абы как по зонам
Dmitrii
Теперь я как дебил сижу и программирую на TF конфигах, чтобы описать "функцию" раскладки инстансов по зонам в зависимости от положения звезд на небе.
Dmitrii
Как я тебя понимаю 😐
G72K
{ "etcd.0" = "10.2.2.1", "etcd.1" = "10.2.2.2", "etcd.2" = "10.2.2.3" }
может что-то вроде такого: ${zipmap( formatlist("etcd.${index(aws_instance.etcd.*.id, %s)}",aws_instance.etcd.*.id), aws_instance.etcd.*.private_ip )}
G72K
но даже если оно заработает, как вы потом этот аутпут использовать будете? лучше список списком и возвращать
G72K
это еще лайтово :) у нас много многоэтажных zipmap(split(replace(join()), ....) и все это в null_resource в который потом такие же этажерки ходят
Dmitrii
Но зачем?
G72K
тераформ лучше обходить стороной по возможности
Dmitrii
Не пробовали понять потребность и заимплементить на Go функцию в core?
G72K
потому что глупые и не генерируем его.а язык куцый
Dmitrii
Не генерируешь что
G72K
патчить тераформ - почти не вариант для нас :( хайп же, как это патчить серебряную пулю ?? )
Dmitrii
Ну вот я с ним ковыряюсь вторую неделю и вот уже родил дата сорс. Не вижу причин извращаться и изобретать костыли.
Dmitrii
Так или иначе заадчи у всех одинаковые. А своим бездействием ты порождаешь костыли у других :)
G72K
resource aws_subnet subnet { .... tags = "${merge( map( "Name", "sn-${lookup(var.vpc-net[count.index],"name")}-${var.vpc-design["name"]}-${lookup(var.vpc-net[count.index],"azs")}", "Environment", "${var.hcom-env}", "LaunchedBy", "${var.provisioner}", "Team", "${var.tag_team}" ), zipmap( compact(split(",", replace(lookup(var.vpc-net[count.index],"extra-tags",""), "/,[^;,]*?;/", ","))), compact(split(";", replace(lookup(var.vpc-net[count.index],"extra-tags",""), "/[^;,]*?,/", ""))) ) )}" }
G72K
я прям смотрю и застрелиться хочется :)
Denis
И после этого они говорят что паппет и шеф гавно
Dmitrii
Но паппет реально та еще параша
Denis
Нет :)
Dmitrii
А здесь в примере выше... ну как говорится "С дуру можно и хуй сломать".
G72K
я б рад по-другому, готов услышать предложения :)
Dmitrii
Есть мнение что энвайроменты надо делить по aws аккаунтам
Dmitrii
Я так пока не пробовал, сказать не могу.
G72K
оно поделено, это не отменяет тэгов
G72K
т.е. задача. есть модуль (ибо все ж модульно и реюзабельно и вообще красота про которую на всех митапах вещают), в него спускается map() vpc-net с описанием сетей, которые надо создать. на сетях должны быть тэги. разные тэги на разных сетях. как? :)
G72K
у нас - адъ как выше привел. как сделать лучше?
Dmitrii
Как сделаешь — отпишись ))
Magistr
мне тут коллега поведал новости что хаши, под каждого клиента тераформ кастомизирует
Magistr
алсо от sadoperator I keep mistyping "terrorform"
Dmitrii
Интересно как
Magistr
Name = "pub-subnet.${element(split(",", var.availability_zones), count.index)}.${var.domain}"
Magistr
у меня вот так теги на сетях были
Magistr
availability_zone = "${element(split(",", var.availability_zones), count.index % length(split(",", var.availability_zones)))}"
Magistr
и вот так
G72K
Эм, почему?
из за адовых примеров выше. мое убеждение на сегодня: лучшее из возможного - генерировать терраформ из темплейтов и не использовать никаких фич языка (списков, мапов, count= , модулей и проч)
G72K
availability_zone = "${element(split(",", var.availability_zones), count.index % length(split(",", var.availability_zones)))}"
у вас var.availability_zones может быть списком, тогда не надо делать split(",", var.availability_zones)
Magistr
это под 0.6 или 0.7 версию тогда немогло
G72K
Насколько большая инфра в терраформе?
~3000 строк чтоб засетапить AWS account + vpc в нем.
G72K
а про что?
Magistr
хм у меня 2400 строк, правда инстансов штук 20
Magistr
ну да это 2400 потом можно переиспользовать
Lex
а про что?
мне просто интересно нафига такие извраты, для какого размера инфры
G72K
мне просто интересно нафига такие извраты, для какого размера инфры
это только описание аккаунта и vpc - подсети, пиринг, роутинг, секьюрити группы, nacls и т.д. без наполнения
Magistr
мне просто интересно нафига такие извраты, для какого размера инфры
это проще чем накликивать это все в морде амазона
Lex
режте стейт
G72K
всмысле резать?