Size: a a a

2020 January 31

N

Nikolai in terraform_ru
Andor
если у тебя 1-к-1 волюмы и инстансы, то может проще их одинаково итерировать?
можно с этого момента подробнее ?
источник

A

Andor in terraform_ru
я тут вчера делал странное: брал список инстансов и список волюмов на каждом инстансе, делал product() из этих двух списков, превращал это в мап и потом делал for_each по этой мапе в создании ресурсов
источник

N

Nikolai in terraform_ru
но у меня еще нету этих списков, все создается в процессе
источник

A

Andor in terraform_ru
ну какое-то понимание хотя бы количества есть же?
источник

AD

Aliaksandr Dounar in terraform_ru
Nikolai
но у меня еще нету этих списков, все создается в процессе
Null data source?
источник

N

Nikolai in terraform_ru
я пока для себя сделал такой мап

cluster = {
 etcd = {
   count = 3
   volume_size = 10
 }
 controlpanel = {
   count = 2
   volume_size = 10
 }
 workernodes = {
   count = 3
   volume_size = 10
 }
}
источник

A

Andor in terraform_ru
Nikolai
но у меня еще нету этих списков, все создается в процессе
"список" это не список ресурсов, а список имён
источник

A

Andor in terraform_ru
ну вот, ты можешь примерно так же сделать
источник

N

Nikolai in terraform_ru
пока не догоняю 🙁
источник

A

Andor in terraform_ru
это нормально ;)
источник

N

Nikolai in terraform_ru
ну так то да, но хочется все-таки понимать и уметь )
источник

A

Andor in terraform_ru
Nikolai
привет всем
resource "openstack_blockstorage_volume_v2" "rke_node_root_volume_workernode" {
 count = local.cluster.workernodes.count

 name        = "rke-node-volume-workernodes-${count.index}"
 size        = local.cluster.etcd.volume_size
 snapshot_id = data.openstack_blockstorage_snapshot_v2.rke_nodes_base-snap.id
}

resource "openstack_compute_instance_v2" "rke_node_etcd" {
 for_each = "${join(",", openstack_blockstorage_volume_v2.rke_node_root_volume_etcd.*.id)}"

 name        = "${local.rke_cluster_name}-etcd-${each.key}"
....


ну и получаю вот такое:
Error: Invalid for_each argument
 on main.tf line 34, in resource "openstack_compute_instance_v2" "rke_node_etcd":
 34:   for_each = "${join(",", openstack_blockstorage_volume_v2.rke_node_root_volume_etcd.*.id)}"
The "for_each" value depends on resource attributes that cannot be determined
until apply, so Terraform cannot predict how many instances will be created.
To work around this, use the -target argument to first apply only the
resources that the for_each depends on.

может знает как такое обойти?
мне кажется тебе надо просто в обоих ресурсах использовать один и тот же count и всё
источник

A

Andor in terraform_ru
правда у тебя там rke_node_root_volume_workernode. и rke_node_volume_etcd
источник

N

Nikolai in terraform_ru
возможно, но как тогда мне ссылаться на id volume ?
источник

A

Andor in terraform_ru
по индексу в данном случае
источник

N

Nikolai in terraform_ru
типа ${count.index-1} ?
источник

A

Andor in terraform_ru
почему?
источник

A

Andor in terraform_ru
тебе надо сделать (если я правильно понимаю):
1) рутовые волюмы
2) волюмы етцд
3) инстансы с обоими этими волюмами
источник

A

Andor in terraform_ru
нет?
источник

N

Nikolai in terraform_ru
источник