Jinja 变量数组动力学

Jinja Variable Array Dynamics

我最近开始使用 Google Cloud Deployment,来自 AWS CloudFormation(和 Terraform 一起),我真的很难以动态方式使用 Jinja,而我在其他方式中这样做很简单。

我当前的问题是,我的部署完全是基于某些用户输入的动态部署,因此在 AWS CF 和 Terraform(同时指向 AWS 和 GCP)中,我使用地图来获取由先前选择确定的设置。以下是来自 Terraform 的示例:

variable "Cluster_Instance_Map" {
  type = map
  default = {
    "C1" = "Single-Node : 0 : A : B"
    "C2" = "Multi-Node : 2 : Q : R"
    "C3" = "Multi-Node : 4 : X : Y"
    "C4" = "Multi-Node : 8 : S : T"
    ...
  }
}

然后,例如,我会使用用户先前从 'C1, C2, C3, C4' 中选择的 Cluster_Config_Choice 变量获取相应行的第一个值,如下所示:

split ( " : ", var.Cluster_Instance_Map[ var.Cluster_Config_Choice ] ) [0]

到目前为止,我真的很难在 Jinja 中为 GCP 重新创建这种类型的变量。总的来说,我是 GCP 的新手,也是 Jinja 的新手,我在网上找到的大部分内容让我感到困惑,因此非常感谢任何帮助!

--- 编辑 ---

根据要求,我将详细介绍到目前为止我对 Jinja 所做的工作,但遗憾的是并不算太多。我最初的想法是通过使用 LIST 和 SPLIT。我想我可以做如下的事情:

{% set list_example = ({ "A" : "1 ; 2 ; 3", "B" : "4 ; 5 ; 6" }) %}
{{ list_example [ user_input_variable ].split(';')[1] }}

然后第二行会 return,例如,如果用户选择 B,则为“5”。不过,我确实编写了该代码(第二行),因此它不适用于语法错误(预期 100%),但我不知道它是否接近。

LIST 和 SPLIT 是可行的方法吗?或者有没有我错过的类似 MAP 的功能..

我也不知道如何将我的 SET 函数跨多行放置而不会出错,对于上面的混乱,我们深表歉意。虽然我假设 Google 可以在我不忙的时候告诉我! >.>

希望这有助于澄清事情。

兜兜转转,在这个过程中学到的东西很少,我实际上意识到我的答案是我已经尝试过的...我上面发布的代码说不起作用,但有效 - 虽然事实证明还有很多其他原因它没有,但与它本身没有直接关系。

因此,我在 Terraform/AWS CF 中重新创建 'map' 的答案如下:

{% set Cluster_Instance_Map = ({
    "C1" : "Single-Node : 0 : A : B",
    "C2" : "Multi-Node : 2 : Q : R",
    "C3" : "Multi-Node : 4 : X : Y",
    "C4" : "Multi-Node : 8 : S : T",
    ...
}) %}

{% set user_input_variable = "C3" %}

{{ Cluster_Instance_Map [ user_input_variable ].split(':')[1] }}

在这种情况下,最后一块 return 是数字 4。我的代码也跨多行,所以现在也更容易阅读 - 这也是一个无关的问题(如前所述,我对 Google 和 Jinja 是全新的,所以吸取了教训)。

不过,我必须说 Google Cloud 的文档与其他文档相比确实很糟糕。很容易失去自我。所以即使上面的内容并不真的需要答案,最好还是把它放在这里,以防其他人有类似的问题。