命令: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
选项外,还有几种其他方法可以为根模块中的输入变量设置值。有关更多信息,请参阅 为根模块变量分配值。
在使用 -json
或 -raw
命令行标志时,OpenTofu 状态中的任何敏感值都将以纯文本形式显示。有关更多信息,请参见 状态中的敏感数据。
示例
这些示例假定以下 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 的原始输出进行转码。