gpt4 book ai didi

json - 使用jsonnet覆盖嵌套列表元素

转载 作者:行者123 更新时间:2023-12-02 11:37:20 24 4
gpt4 key购买 nike

我有以下json

{
"namespace": "monitoring",
"name": "alok",
"spec": {
"replicas": 1,
"template": {
"metadata": "aaa",
"spec": {
"containers": [
{
"image": "practodev/test:test",
"env": [
{
"name":"GF_SERVER_HTTP_PORT",
"value":"3000"
},
{
"name":"GF_SERVER_HTTPS_PORT",
"value":"443"
},
]
}
]
}
}
}
}

如何使用jsonnet添加deployment_env.json
{
"env": [
{
"name":"GF_AUTH_DISABLE_LOGIN_FORM",
"value":"false"
},
{
"name":"GF_AUTH_BASIC_ENABLED",
"value":"false"
},

]
}

我需要将其添加到spec.template.containers [0] .env = deployment_env.json

我写了下面的jsonnet来做到这一点。它追加了一个新元素。但是我需要更改json中现有的第0个容器元素。 请提出建议。
local grafana_envs = (import 'custom_grafana/deployment_env.json');
local grafanaDeployment = (import 'nested.json') + {
spec+: {
template+: {
spec+: {
containers+: [{
envs: grafana_envs.env,
}]
}
}
},
};
grafanaDeployment

最佳答案

请参见下面的实现,该实现允许通过env数组中的索引将containers[]添加到现有容器。

请注意,jsonnet比数组更适合用于对象(即字典/ map ),因此它需要通过std.mapWithIndex()进行人为处理,以便能够从其匹配索引中修改条目。

local grafana_envs = (import 'deployment_env.json');

// Add extra_env to a container by its idx passed containers array
local override_env(containers, idx, extra_env) = (
local f(i, x) = (
if i == idx then x {env+: extra_env} else x
);
std.mapWithIndex(f, containers)
);
local grafanaDeployment = (import 'nested.json') + {
spec+: {
template+: {
spec+: {
containers: override_env(super.containers, 0, grafana_envs.env)
}
}
},
};
grafanaDeployment

关于json - 使用jsonnet覆盖嵌套列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54886373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com