跳至主要内容

命令:output

tofu output 命令用于从状态文件提取输出变量的值。

用法

用法:tofu output [options] [NAME]

如果没有其他参数,output 将显示根模块的所有输出。如果指定了输出 NAME,则仅打印该输出的值。

命令行标志都是可选的。以下标志可用

  • -json - 如果指定,输出将格式化为 JSON 对象,每个输出对应一个键。如果指定了 NAME,则仅返回指定的输出。这可以被管道传输到诸如 jq 之类的工具以进行进一步处理。

  • -raw - 如果指定,OpenTofu 将将指定的输出值转换为字符串,并将该字符串直接打印到输出,没有任何特殊格式。这在使用 shell 脚本时可能很方便,但它只支持字符串、数字和布尔值。对于处理复杂数据类型,请使用 -json

  • -no-color - 如果指定,输出将不包含任何颜色。

  • -state=path - 状态文件的路径。默认为“terraform.tfstate”。当使用 远程状态 时,将被忽略。

  • -var 'NAME=VALUE' - 为配置根模块中声明的单个 输入变量 设置值。多次使用此选项以设置多个变量。有关更多信息,请参阅 命令行上的输入变量

  • -var-file=FILENAME - 使用 "tfvars" 文件 中的定义,为配置根模块中声明的可能多个 输入变量 设置值。多次使用此选项以包含多个文件中的值。

除了 -var-var-file 选项外,还有几种其他方法可以为根模块中的输入变量设置值。有关更多信息,请参阅 为根模块变量分配值

示例

这些示例假定以下 OpenTofu 输出片段。

代码块
output "instance_ips" {
value = aws_instance.web.*.public_ip
}

output "lb_address" {
value = aws_alb.web.public_dns
}

output "password" {
sensitive = true
value = var.secret_password
}

列出所有输出

代码块
$ tofu output
instance_ips = [
"54.43.114.12",
"52.122.13.4",
"52.4.116.53"
]
lb_address = "my-app-alb-1657023003.us-east-1.elb.amazonaws.com"
password = <sensitive>

请注意,具有 sensitive 属性的输出将被隐藏

代码块
$ tofu output password
password = <sensitive>

查询负载均衡器的 DNS 地址

代码块
$ tofu output lb_address
"my-app-alb-1657023003.us-east-1.elb.amazonaws.com"

查询所有实例 IP 地址

代码块
$ tofu output instance_ips
instance_ips = [
"54.43.114.12",
"52.122.13.4",
"52.4.116.53"
]

在自动化中使用

tofu output 命令默认以人类可读的格式显示,这种格式可能会随着时间的推移而改变以提高清晰度。

对于脚本和自动化,请使用 -json 来生成稳定的 JSON 格式。您可以使用 JSON 命令行解析器(例如 jq)解析输出。

代码块
$ tofu output -json instance_ips | jq -r '.[0]'
54.43.114.12

对于直接在 shell 脚本中使用字符串值的常见情况,您可以使用 -raw,它将直接打印字符串,没有额外的转义或空格。

代码块
$ tofu output -raw lb_address
my-app-alb-1657023003.us-east-1.elb.amazonaws.com

-raw 选项仅适用于 OpenTofu 可以自动转换为字符串的值。对于处理复杂类型的值(例如对象),请使用 -json,可能与 jq 结合使用。

OpenTofu 字符串是 Unicode 字符序列,而不是原始字节,因此当 -raw 输出包含非 ASCII 字符时,它将使用 UTF-8 编码。如果您需要其他字符编码,请使用单独的命令(例如 iconv)来对 OpenTofu 的原始输出进行转码。