Frederick Ollinger Asked: 2022-02-25 10:47:13 +0800 CST2022-02-25 10:47:13 +0800 CST 2022-02-25 10:47:13 +0800 CST Terraform:如何在操作系统上检测和分支? 772 鉴于 Terraform 的这段伪代码: resource "null_resource" { provisioner "local-exec" { command = "echo hello" interpreter = local.os == "Windows" ? ["PowerShell", "-Command"] : ["bash"] } 我如何让它在 Windows 上的 Powershell 和 Linux 上的 bash 中运行? windows linux terraform devops 2 个回答 Voted Best Answer DictatorForLife 2022-08-19T13:03:10+08:002022-08-19T13:03:10+08:00 您可以检查 terraform 项目运行的路径。在 Windows 上,它类似于C:/Users/在 linux 上,标准路径是/home/xxx. locals { is_linux = length(regexall("/home/", lower(abspath(path.root)))) > 0 } resource "local_file" "connect_sh" { count = local.is_linux ? 1 : 0 filename = "connect.sh" file_permission = "0744" content = <<-EOF #!/bin/bash ssh -i ${local.vars["key_file"]} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ServerAliveInterval=120 -o ServerAliveCountMax=2 ec2-user@${data.aws_eip.this.public_ip} EOF } resource "local_file" "connect_bat" { count = local.is_linux ? 0 : 1 filename = "connect.bat" #file_permission = "0744" content = <<-EOF @ssh -i ${local.vars["key_file"]} -o StrictHostKeyChecking=no -o UserKnownHostsFile=NUL -o ServerAliveInterval=120 -o ServerAliveCountMax=2 ec2-user@${data.aws_eip.this.public_ip} EOF } Martin Atkins 2022-03-01T10:18:39+08:002022-03-01T10:18:39+08:00 local-exec使用本质上会吸引您运行 Terraform 的平台的详细信息,这就是为什么它应该被视为最后手段的原因之一。 Terraform 不包含任何用于模块检测主机操作系统的内置方法。自定义 Terraform 提供程序可能会提供一个返回该信息的数据源,尽管如果有人正在编写 Terraform 提供程序,那么编写一个来执行该提供程序将直接运行的任何操作可能更合适,从而避免需要用于 Terraform 配置以基于操作系统进行分支。
您可以检查 terraform 项目运行的路径。在 Windows 上,它类似于
C:/Users/
在 linux 上,标准路径是/home/xxx
.local-exec
使用本质上会吸引您运行 Terraform 的平台的详细信息,这就是为什么它应该被视为最后手段的原因之一。Terraform 不包含任何用于模块检测主机操作系统的内置方法。自定义 Terraform 提供程序可能会提供一个返回该信息的数据源,尽管如果有人正在编写 Terraform 提供程序,那么编写一个来执行该提供程序将直接运行的任何操作可能更合适,从而避免需要用于 Terraform 配置以基于操作系统进行分支。