我正在尝试通过terraform部署一些基础架构。我第一次运行Apply时,它不会部署vm,但是即使我对配置没有任何更改,如果我再次运行Apply时,它也想运行destroy并重新部署vm。我从输出中看到的这是由于id和network.o.name而引起的,我不确定为什么这会导致问题
resource "openstack_compute_instance_v2" "test" {
name = "test_server"
image_id = "image_id"
flavor_id = "flavour_id"
key_pair = "test"
security_groups = ["default"]
network {
name = "Default Network"
}
}
id:“ 16342cd6-7f26-4a77-9c3f-11c626400f4f” =>(强制使用新资源)
network.0.name:“默认网络” =>“默认网络”(强制使用新资源)
答案 0 :(得分:0)
我已经很长时间没有使用过OpenStack了,但看起来网络名称在OpenStack中不区分大小写,因此尽管实例中指定了不同的大小写网络名称,但您的实例仍被放置在Default network
网络中配置(Default Network
)。
由于network.name
attribute is set as ForceNew
,Terraform检测到配置和提供程序之间的偏移,并说需要创建新资源。在这种情况下,只需更新您的配置以匹配提供商使用的内容就可以了。
在提供程序中正确解决此问题的通常方法是使用DiffSuppresFunc
,这会使Terraform忽略配置和提供程序之间的差异。 openstack_compute_instance_v2
资源已经使用它来suppress differences in availability zones。