应用后已知的TerraForm计划(&Q)-如何知道我的插值是否成功? [英] Terraform Plan "Known after Apply" - How to know if my interpolation has succeeded?

查看:11
本文介绍了应用后已知的TerraForm计划(&Q)-如何知道我的插值是否成功?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下是我成功的terraform plan

的摘录
 ~ primary_network_interface_id = "eni-XXXXXXXXXXXXX -> (known after apply)
   ~ private_dns                  = "shshshshshshshshhs" -> (known after apply)
   ~ private_ip                   = "XXXXXXXXXXXXXXXXXX" -> (known after apply)
   + public_dns                   = (known after apply)
   + public_ip                    = (known after apply)
   ~ secondary_private_ips        = [] -> (known after apply)
   ~ security_groups              = [] -> (known after apply)
以上是作为内部模块导入的aws_instance资源的一部分。我打算通过变量security_groups传递安全组ID列表,以便在创建资源时将其映射到vpc_security_group_ids。但是,使用上面的计划,我看不出它是如何成功映射的。

我的问题是-我如何知道apply是否有效?在这种情况下是50对50吗?另外,我没有设法在TF文档中发现任何东西,所以如果有什么东西,如果有人能给我指明方向,我将不胜感激。

谢谢,

推荐答案

在Terraform语言中,有一种感觉是&q;未知&q;,平面呈现器将其显示为(known after apply),如我们在此处所见。

未知值源自提供程序,提供程序应响应计划请求,根据已有信息返回其能够预测的尽可能多的结果,但将没有更多信息而无法知道的任何内容标记为";未知&q;。

然后,在Terraform语言中,在结果要求知道标记为未知的值的表达式中执行的任何操作都将导致该结果也是未知的。

在您的示例中,似乎是以列表整体最终未知的方式构建了这个security_groups值。整个列表未知通常表示我们不知道该列表的长度,因为如果我们知道该列表的长度,那么它将是一个包含未知值的已知列表,可能如下所示:

 ~ security_groups = [
     + (known after apply),
     + "sg-abc123",
     + (known after apply),
   ]
因此,对您的问题的非常一般的回答是,如果您需要或希望在计划时知道某件事,那么您需要仔细决定如何计算结果,以便您理解计划所需的信息可以在您需要的地方可见。有时可以做到这一点,尽管您需要仔细考虑如何确定某些值,例如根据配置中已知的内容决定列表的长度,即使列表中的某些项可能是未知的。

例如,如果您使用设置了count的单个资源创建一组对象,则该资源的length(...)结果(如length(aws_instance.example))将始终是一个已知值,因为count在规划期间必须始终是已知的。因此,其他派生操作(如aws_instance.example[*].id)可以生成包含未知值的已知列表,因此即使值本身尚不可知,您仍然可以验证您是否拥有预期的元素数量。

有些情况下,只要您想一步应用所有更改,没有答案:TerraForm无法向您显示它不知道的内容。在这种情况下,如果了解特定值的结果是流程的重要部分,那么您可以决定将配置拆分成两个单独的配置,然后按顺序分别应用这两个配置。然后,您可以使用data sources允许第二个配置查找第一个配置创建的任何必要对象。

这篇关于应用后已知的TerraForm计划(&Q)-如何知道我的插值是否成功?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆