我希望能够为导入的变量指定不同的参数并更改导入的行为。例如,我想要以下内容:
local foo = import "foo.libsonnet";
{
"foo1": foo["foo1"],
"foo2": foo["foo2"]
}
foo.libsonnet :(类似于具有默认值的程序中的切换情况),我知道以下内容不起作用。只是可能使用伪代码。
{
"foo1": "bar1", // only if foo1 is passed
"foo2": "bar2", // only if foo2 is passed
"bar1" : "bar1_value",//default
"bar2" : "bar2_value" //default
}
输出:
{
"foo1":{
"foo1": "bar1",
"bar1": "bar1_value",
"bar2" : "bar2_value"
},
"foo2":{
"foo2": "bar2",
"bar1": "bar1_value",
"bar2" : "bar2_value"
}
}
答案 0 :(得分:0)
只需将foo.libsonnet
做成“成熟的”对象(通常在实践中会做),还请注意,原始foo.jsonnet
并不是有效的构造(使用大括号作为{{1} }(类似于列表中的{}
):
[]
注意:此答案试图解决原始问题,更新后会偏离主题。
答案 1 :(得分:0)
可能的实现,使用实现“查询”逻辑的get()
方法返回对象:
$ cat foo.jsonnet
local foo = import "foo.libsonnet";
{
foo1: foo.get("foo1"),
foo2: foo.get("foo2"),
foo3: foo.get("foo3"),
}
$ cat foo.libsonnet
local data = {
param_q:: {
foo1: "bar1",
foo2: "bar2",
},
const:: {
bar1: "bar1_value",
bar2: "bar2_value",
},
};
// Object with get() method to implement parametrized data return
{
get(q):: (
// const data
data.const +
// parametrized data (if-then-else to support q not in param_q)
if q in data.param_q then { [q]: data.param_q[q] } else {}
),
}
$ jsonnet foo.jsonnet
{
"foo1": {
"bar1": "bar1_value",
"bar2": "bar2_value",
"foo1": "bar1"
},
"foo2": {
"bar1": "bar1_value",
"bar2": "bar2_value",
"foo2": "bar2"
},
"foo3": {
"bar1": "bar1_value",
"bar2": "bar2_value"
}
}