【发布时间】:2020-03-05 19:07:22
【问题描述】:
我是 terraform 新手,使用的是 v0.12.20 版本。我注意到,一旦我重新运行它以创建新资源,它就会删除现有资源。例如,如果我在某个 env 中创建 10 个 vm 并想创建 5 个新的,它应该简单地创建新的来检测变化,而不是删除以前的并创建新的。
resource "vsphere_virtual_machine" "test_vms" {
name = "${var.environment_test}${count.index + 1}"
resource_pool_id = data.vsphere_compute_cluster.cluster.resource_pool_id
datastore_id = "${element(data.vsphere_datastore.datastore.*.id, count.index)}"
num_cpus = var.cpu
count = var.count
memory = var.memory
guest_id = "ubuntu64Guest"
folder = var.vmfolder
cpu_hot_add_enabled = var.cpu_hot_add_enabled
memory_hot_add_enabled = var.memory_hot_add_enabled
scsi_type = data.vsphere_virtual_machine.template.scsi_type
wait_for_guest_net_timeout = -1
network_interface {
network_id = data.vsphere_network.network[1].id
adapter_type = data.vsphere_virtual_machine.template.network_interface_types[0]
}
disk {
label = "disk0"
size = "${var.disk_size}"
thin_provisioned = data.vsphere_virtual_machine.template.disks.0.thin_provisioned
}
clone {
template_uuid = data.vsphere_virtual_machine.template.id
customize {
linux_options {
host_name = "${var.environment_test}${count.index + 1}"
domain = var.vmdomain
}
network_interface {
ipv4_address = "${var.ips_test}${var.test_index + count.index}"
ipv4_netmask = "${var.netmask_app}"
}
dns_server_list = "${var.dns_server_list}"
dns_suffix_list = "${var.dns_suffix_list}"
ipv4_gateway = "${var.gateway_app}"
}
}
}
terraform 计划的输出 -
Terraform will perform the following actions:
# vsphere_virtual_machine.small_vm[0] must be replaced
-/+ resource "vsphere_virtual_machine" "test_vm" {
~ memory_share_count = 81920 -> (known after apply)
memory_share_level = "normal"
migrate_wait_timeout = 30
~ name = "tests01" -> "testm01
~ clone {
~ linux_options {
domain = "X.X.X.X."
~ host_name = "tests01" -> "testm01" # forces replacement
hw_clock_utc = true
}
~ network_interface {
- dns_server_list = [] -> null
~ ipv4_address = "X.X.X.X" -> "X.X.X.X" # forces replacement
ipv4_netmask = 24
- ipv6_netmask = 0 -> null
【问题讨论】:
-
您好!您能否编辑您的问题以包含来自
terraform plan的输出,您在其中看到了意外的计划更改?希望通过看到我或其他人可以解释 Terraform 正在做什么的原因以及您可能会如何影响 Terraform 制定不同的计划。 -
@MartinAtkins 非常感谢您的回复。
-
我在上面添加了 terraform plan 的输出。我创建了一个名为 test01 的虚拟机并重新运行脚本以创建一个名为 testm01 的新虚拟机,但正如您所见,该脚本替换了旧的虚拟机并为其分配了新的 IP 地址。我宁愿期望它用新的 IP 地址创建一个新的虚拟机。如何实现?
-
不幸的是,这里的问题似乎并非所有信息。我不确定
tests和testm来自哪里。你在改变var.environment_test的值吗?您能否在问题中包含更多配置,以便我可以看到使tests变为testm的更改? -
我正在更改 var.environment_test 的值。最初我使用 environment_test 值作为测试运行脚本,后来我将 environment_test 的值修改为 testm。我原以为会创建一个新的 vm testm01 而不会删除前一个,但实际上前一个被删除并形成了新的。我们用少量虚拟机构建了一个环境,并在需要时不断创建新的虚拟机。例如,如果我在一个 env 中创建 50 个 vm,几天后我想再创建几个,我应该用新的 vm 名称和 IP 修改 var,它不应该删除以前的,而只是创建新的。