每次我以为我终于理解了 jsonnet 时,它就来打我的脸...... -.-
我有以下内容:
local applyModifications(kp) = {
[topLvlKey]: {
[subKey]: myfunction(kp[topLvlKey][subKey])
for subKey in std.objectFieldsAll(kp[topLvlKey])
},
for topLvlKey in std.objectFieldsAll(kp)
};
我想遍历一个对象的前 2 个级别内的所有内容,并在那里应用一些函数......
基本上这是可行的......但取决于我是否使用std.objectFieldsAll
or std.objectFields
,隐藏字段在之后可见或完全丢失。
在不触及隐藏的“财产”的情况下,我将/如何做到这一点?我理解我的问题是,我在这里使用了对象理解并且(参考错误消息)那些“对象理解不能有隐藏字段”......但据我了解 jsonnet,一些东西理解是唯一的创建for循环的方法,对吗?
测试代码:
// vim: set ts=2 sw=2 expandtab :
local myfunction(o) = o {
spec+: {
foo: 'bar'
}
};
local applyModifications(kp) = {
[topLvlKey]: {
[subKey]: myfunction(kp[topLvlKey][subKey])
for subKey in std.objectFieldsAll(kp[topLvlKey])
},
for topLvlKey in std.objectFieldsAll(kp)
};
local stack = {
fooService: {
fooResource: {
kind: 'PrometheusRule',
spec: {
groups: [
{ name: 'fooGroup', rules: [{ alert: 'fooAlert', expr: 'fooExpr' }] },
{ name: 'barGroup', rules: [{ alert: 'fooAlert', expr: 'fooExpr' }] },
],
},
},
},
fooService2:: {
fooResource: {
kind: 'PrometheusRule',
spec: {
groups: [
{ name: 'fooGroup', rules: [{ alert: 'fooAlert', expr: 'fooExpr' }] },
{ name: 'barGroup', rules: [{ alert: 'fooAlert', expr: 'fooExpr' }] },
],
},
},
},
};
local stack2 = applyModifications(stack);
{
modified: stack2
}