在使用 Terraform provisioners 重复使用的情况下,可以考虑将 provisioners 分离到一个单独的模块中,并在需要的资源上使用该模块。
以下是一个示例,展示如何将 provisioners 分离到一个模块,并在多个资源上重复使用该模块。
首先,创建一个名为 provisioners
的目录,并在其中创建一个名为 main.tf
的文件,用于定义 provisioners 的模块。
$ mkdir provisioners
$ cd provisioners
$ touch main.tf
在 main.tf
文件中,定义 provisioners 的模块。以下示例展示了如何使用 remote-exec
provisioner 在资源创建后执行脚本。
# provisioners/main.tf
variable "script" {
description = "Path to script"
}
provider "null" {}
resource "null_resource" "provisioner" {
provisioner "remote-exec" {
inline = [
"chmod +x ${var.script}",
"${var.script}"
]
}
}
接下来,在需要使用 provisioners 的资源上引用该模块。以下示例展示了如何在两个 aws_instance
资源上使用 provisioners
模块。
# main.tf
module "provisioners" {
source = "./provisioners"
script = "./script.sh"
}
resource "aws_instance" "example1" {
# resource configurations
# ...
provisioner "local-exec" {
command = "echo ${module.provisioners.null_resource.provisioner.0.id} >> instances.txt"
}
}
resource "aws_instance" "example2" {
# resource configurations
# ...
provisioner "local-exec" {
command = "echo ${module.provisioners.null_resource.provisioner.0.id} >> instances.txt"
}
}
在上面的示例中,module "provisioners"
声明了一个引用 provisioners
模块的模块,并通过 script
变量传递要执行的脚本路径。
aws_instance
资源中的 provisioner
块定义了执行本地命令的 local-exec
provisioner,该命令将 module.provisioners.null_resource.provisioner.0.id
的值添加到 instances.txt
文件中。
通过上述配置,可以在 aws_instance
资源上重复使用 provisioners
模块,并在创建每个资源后执行相同的脚本。
请注意,这只是一个示例,实际中可能还需要根据实际需求进行调整和扩展。