Jinja 变量数组动力学

问题描述

我最近开始使用 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] }}

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

LIST 和 SPLIT 是要走的路吗?或者是否有我错过的类似 MAP 的功能..

我也不知道如何将我的 SET 函数放在多行而不出错,所以很抱歉上面的混乱。虽然我认为谷歌可以在我不忙的时候告诉我! >.>

希望这有助于澄清事情。

解决方法

在转了一圈之后,在这个过程中学到的东西很少,我实际上意识到我的答案是我已经尝试过的......我上面发布的代码不起作用,但有效 - 尽管它变成了有很多其他原因它没有,但与它本身没有直接关系。

因此,我在 Terraform/AWS CF 中重新创建我拥有的“地图”的答案如下:

{% 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] }}

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

不过,我必须说,与其他文档相比,Google Cloud 的文档确实很糟糕。很容易放飞自我。因此,即使上述内容并不真正需要答案,也最好将其放在这里,以防其他人有类似问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...