我有一个 terraform 脚本,用于创建一个 aws 安全组、一些服务器和一些 dns 记录。这些服务器是 RHEL 7,我将它们注册到 Red Hat 网络。在销毁我的资源之前,我想自动取消注册这些服务器,因为如果我不这样做,下次我想注册它们时就会失败,因为所有订阅都已使用。
所以我创建了一个 ansible 角色来帮我做这件事,然后我把
provisioner "local-exec" {
when = "destroy"
command = "ansible-playbook playbooks/unregister_rhsm.yml"
}
进入其中一个resource
s 并希望这样做能成功。不知怎的,它确实成功了,但并非所有服务器都已注销。这让我认为我没有选择正确的地方。
我如何知道将 放在哪里,provisioner
以便在所有销毁操作发生之前可靠地运行 ansible 剧本?或者是否有更好的机制来实现销毁前的自动注销?(除了创建一个在 terraform 之前调用 ansible 的 shell 脚本并使用该脚本代替terraform destroy
)
答案1
provisioner
理想情况下,您应该在每个 Red Hat资源中放置一个 destroy aws_instance
,这样当它运行时,它只会取消注册该服务器,而不是一个试图取消注册所有服务器的脚本。这样,如果/当 Terraform 决定需要重新创建一台服务器时,它不会从 Red Hat 网络中删除您的所有服务器。
除此之外,我看不出您所做的事情有什么问题,您可能需要调试脚本来了解它为什么不起作用。