如何从外部获取 terraform 数据以在计划和应用阶段运行脚本

问题描述 投票:0回答:1

尝试做这样的事情https://github.com/littlejo/terraform-ssm-tunnel。因此 terraform 将在运行计划和应用中创建隧道。 问题是,当运行 terraform plan -out tf.plan 时,它按预期工作,但是当运行 terraform apply tf.plan 时,它不会创建隧道。如果您只是执行 terraform apply,它也可以正常工作,但是当您使用计划输出运行 terraform apply 时,它就不行了。

我希望 terraform 在尝试更改 postgresql 和 kubernetes_secret 等使用提供程序之前在两个阶段都运行脚本。我在提供程序中添加了一些内容,因此它取决于该模块的输出,就像示例中的那样,但运气不佳。

一种选择是这样的:

在 my_script 目录中创建 main.tf 和 my_script.sh

data "external" "my_script" {
  program = ["bash", "${path.module}/my_script.sh"]

  # Optional: Arguments to pass to the script
  query = {
    environment = var.environment
  }
}

output "result" {
  value = data.external.my_script.result.environment
}

resource "null_resource" "example" {
  provisioner "local-exec" {
    command = "bash ${path.module}/my_script.sh ${data.external.my_script.result.environment}"
  }
}

variable "environment" {
  description = "Environment for the script"
  type        = string
}

还有脚本

environment="$1"
echo "{\"environment\": \"$environment\"}"
my_variable=$((RANDOM))
mkdir /tmp/test_$my_variable

然后在另一个目录中执行main.tf

module "my_script_module" {
  source      = "../my_script"
  environment = "production"
}

这似乎有效,但不是很好

bash amazon-web-services terraform
1个回答
0
投票

向“null_resource”添加基于时间的触发器,例如

triggers = { always_run = timestamp() }

每次脚本运行并触发资源时时间戳都会改变

© www.soinside.com 2019 - 2024. All rights reserved.