这是我成功的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
会起作用?Known after apply
在这种情况下是五五开吗?此外,我没能在TF文档中发现任何东西,所以如果有什么,如果有人能为我指明方向,我将不胜感激。
谢谢,
在Terraform语言中,有一种值为"的感觉;"未知";,计划渲染器显示为CCD_ 7。
未知值源于提供者,期望提供者通过返回他们能够根据现有信息预测的尽可能多的结果来响应规划请求,但将没有更多信息他们无法知道的任何事情标记为"未知";未知";。
然后在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不能向你展示它不知道的东西。在这种情况下,如果知道特定值的这些结果是流程的重要组成部分,那么您可能会决定将配置拆分为两个单独的配置,然后依次单独应用。然后,您可以使用数据源来允许第二个配置查找由第一个配置创建的任何必要对象。