作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Terraform archive_file provider将多个文件打包成一个 zip 文件。当我像这样定义存档时,它工作正常:
data "archive_file" "archive" {
type = "zip"
output_path = "./${var.name}.zip"
source_dir = "${var.source_dir}"
}
var.source_dir
中的所有文件,我只想要其中的一个子集。我注意到 archive_file 提供程序有一个
source_file
属性,所以我希望我可以提供这些文件的列表并将它们打包到存档中,如下所示:
locals {
source_files = ["${var.source_dir}/foo.txt", "${var.source_dir}/bar.txt"]
}
data "archive_file" "archive" {
type = "zip"
output_path = "./${var.name}.zip"
count = "2"
source_file = "${local.source_files[count.index]}"
}
local.source-files
中定义的每个文件构建的。因此,我有一个“最后一个获胜”的场景,其中构建的存档文件仅包含 bar.txt。
locals {
source_files = ["${var.source_dir}/main.py", "${var.source_dir}/requirements.txt"]
}
data "archive_file" "archive" {
type = "zip"
output_path = "./${var.name}.zip"
source_file = "${local.source_files}"
}
data.archive_file.archive: source_file must be a single value, not a list
最佳答案
----谢谢jamiet,我修改为你的评论----
locals {
source_files = ["${var.source_dir}/main.py", "${var.source_dir}/requirements.txt"]
}
data "template_file" "t_file" {
count = "${length(local.source_files)}"
template = "${file(element(local.source_files, count.index))}"
}
resource "local_file" "to_temp_dir" {
count = "${length(local.source_files)}"
filename = "${path.module}/temp/${basename(element(local.source_files, count.index))}"
content = "${element(data.template_file.t_file.*.rendered, count.index)}"
}
data "archive_file" "archive" {
type = "zip"
output_path = "${path.module}/${var.name}.zip"
source_dir = "${path.module}/temp"
depends_on = [
"local_file.to_temp_dir",
]
}
locals {
source_files = ["${var.source_dir}/main.py", "${var.source_dir}/requirements.txt"]
}
data "template_file" "t_file" {
count = "${length(local.source_files)}"
template = "${file(element(local.source_files, count.index))}"
}
data "archive_file" "archive" {
type = "zip"
output_path = "./${var.name}.zip"
source {
filename = "${basename(local.source_files[0])}"
content = "${data.template_file.t_file.0.rendered}"
}
source {
filename = "${basename(local.source_files[1])}"
content = "${data.template_file.t_file.1.rendered}"
}
}
locals {
source_files = ["${var.source_dir}/main.py", "${var.source_dir}/requirements.txt"]
}
data "template_file" "zip_sh" {
template = <<EOF
#!/bin/bash
zip $* %1>/dev/null %2>/dev/null
echo '{"result":"success"}'
EOF
}
resource "local_file" "zip_sh" {
filename = "${path.module}/zip.sh"
content = "${data.template_file.zip_sh.rendered}"
}
data "external" "zip_sh" {
program = ["${local_file.zip_sh.filename}", "${var.name}", "${join(" ", local.source_files)}"]
depends_on = [
"data.template_file.zip_sh",
]
}
关于terraform - 有没有办法为 Terraform 存档提供程序定义多个 source_file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56916719/
我是一名优秀的程序员,十分优秀!