Terraform vm_name_prefix автоинкрементная модификация - PullRequest
0 голосов
/ 04 апреля 2019

Я изо всех сил пытался найти что-нибудь полезное в Google, поэтому я здесь.

В настоящее время мы работаем над развертыванием 2 новых виртуальных машин.

Мы используем https://github.com/vancluever/terraform-vsphere-virtual-machine

В Terraform tfvars у нас есть эти два атрибута:

vm_count = "2"
vm_name_prefix = "something000"

Теперь после пробного запуска Terraform будет называть виртуальные машины

name:    something0000
name:    something0001

Но мы хотим, чтобы имя виртуальной машины начиналось с «1» и отсчитывалось оттуда.

name:    something0001
name:    something0002

Есть ли способ получить такое поведение от Terraform?

Кажется, я нашел код, который определяет это поведение: (Vsphere_virutal_machine_linux.tf)

resource "vsphere_virtual_machine" "virtual_machine_linux" {
  count            = "${var.template_os_family == "linux" ? var.vm_count : 0}"
  name             = "${var.vm_name_prefix}${count.index}"
  resource_pool_id = "${data.vsphere_resource_pool.pool.id}"
  datastore_id     = "${data.vsphere_datastore.ds.id}"

  num_cpus = "${var.num_cpus}"
  memory   = "${var.memory}"
  guest_id = "${data.vsphere_virtual_machine.template.guest_id}"

  wait_for_guest_net_timeout = "${var.wait_for_guest_net_timeout}"

  network_interface {
    network_id = "${data.vsphere_network.network.id}"
}

Можем ли мы переписать это определение, не загружая и не изменяя git repo?

Ответы [ 3 ]

2 голосов
/ 04 апреля 2019

Это , вероятно, то, что вы ищете. Все, что вам нужно, это просто + 1

name = "${var.vm_name_prefix}${count.index + 1}"
2 голосов
/ 04 апреля 2019

Хотя SteveGoob ответ решает тот факт, что Terraform (как и все хорошие языки программирования) использует 0 индексацию, в то время как люди являются большими поклонниками 1, индексация статического префикса с ведущими 0бессмысленно.

Если у вас 9 машин, вы будете иметь имена от something0001 до something0009.Но на 10-й машине вы получите something00010.Обратите внимание, что у вас по-прежнему одинаковое количество ведущих нулей.

Вместо этого вы можете использовать тот факт, что Terraform допускает форматирование в стиле printf:

name = "${var.vm_name_prefix}${format("%0000d", count.index + 1)}"

Это будет означать, что если у вас 9 машину вас будут имена от something0001 до something0009.Но на 10-й машине вы получите something0010, а на 9999-м - something9999.

0 голосов
/ 04 апреля 2019

Несмотря на то, что ваш общий код TF не выглядит как HCL, я думаю, что решение вашей проблемы состоит в том, чтобы иметь внешнюю переменную, которая имеет начальное значение 1, и вы увеличиваете ее на каждом шаге итерации.

name_index = [1, 2, 3, 4]

resource "example" "name" {
  count = 4
  name = "${var.name_index[count.index]}"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...