如何打印 Terraform 变量的值?

21

我正在学习Terraform。我想在“计划”阶段打印变量的值。所以我找到了如何做到这一点。似乎我在这里做错了什么....

在variables.tf中:....

variable "VMCount" {
    description = "How many VMs do you want to start with (number)? default=1 max=5"
    type = number
}

在main.tf中。

output "VMCount" {
  value = "${var.VMCount > 2 && var.VMCount < 6 ? var.VMCount : 2}"
}

然后我运行了 terraform plan 命令,条件似乎工作正常(它创建了正确数量的虚拟机)。

但是,变量输出没有出现。为什么?

$ terraform output
VMC = 56

VMC可能来自之前的尝试(我尝试过几种东西)。

如何打印用户输入(变量)的值?

谢谢。


你的代码与所显示的输出不匹配。特别是如果您将“VMCount”设置为56,它当前将返回2。您能否编辑您的问题以展示您的实际代码(理想情况下是作为[mcve]),以及运行“terraform apply”和“terraform output”时获得的实际输出? - ydaetskcoR
简单情况下,您可以使用 terraform init,然后输入 terraform console。然后使用控制台表达式来运行和评估它们。 - Rajesh Swarnkar
3个回答

15

我用这个进行了测试:

variable "VMCount" {
    description = "How many VMs do you want to start with (number)? default=1 max=5"
    type = number
}

output "VMCount" {
  value = "${var.VMCount > 2 && var.VMCount < 6 ? var.VMCount : 2}"
}

它运行良好。

Terraform will perform the following actions:

Plan: 0 to add, 0 to change, 0 to destroy.

Changes to Outputs:
  + VMCount = 4

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes


Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

VMCount = 4
PS C:\d\m\terraform\output-and-variable> terraform output
VMCount = 4
PS C:\d\m\terraform\output-and-variable> terraform apply
var.VMCount
  How many VMs do you want to start with (number)? default=1 max=5

  Enter a value: 8


Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:

Terraform will perform the following actions:

Plan: 0 to add, 0 to change, 0 to destroy.

Changes to Outputs:
  ~ VMCount = 4 -> 2

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes


Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

VMCount = 2
PS C:\d\m\terraform\output-and-variable> terraform output
VMCount = 2
PS C:\d\m\terraform\output-and-variable>

你能检查一下状态中有哪些输出?是VMC还是VMCount?


我该如何检查? - rajeev
你有远程后端吗?或者你的状态存储在哪里?打开状态文件,你应该会在顶部附近找到输出。 - Krzysztof Madej
虽然与此有些相关,但我在查看模块变量时遇到了这个问题,我学会了可以使用Terraform控制台来实现。https://www.terraform.io/cli/commands/console - Tanya Branagan

5
正如 Terraform 文档 所述:

在应用计划时,Terraform 才会呈现输出。运行 terraform plan 不会呈现输出。


我不相信这是真的,我已经看到在运行terraform plan后输出呈现在终端上。 - Damo
@Damo 正确,terraform plan 至少在 v1.3.4 版本中会打印 Changes to Outputs:。我不知道当没有更改时它是否仍会打印输出。 - Dommondke

3

我用Terraform v1.3.4 进行了测试。当定义了outputs时,terraform plan 似乎会在资源变更之后将它们作为最终部分进行打印,以 Changes to Outputs: 开始。

如果outputs没有改变,我不知道它是否仍然适用。简单的解决方案是向它们添加一些虚拟字符串来人为地创建一个变化。

在你的问题中,值表达式相当复杂。可能存在导致该值未被打印的错误。我认为这是一个单独问题,因为很多人看到这个问题时都是寻找打印outputs的方法,而不会有同样复杂的表达式。当您使用以下内容时,应该可以看到输出:

output "example" {
  value = "this should show up in plan, at least until you apply it"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接