【问题标题】:how to replace one element of array in jsonnet with mixin way?如何用mixin方式替换jsonnet中数组的一个元素?
【发布时间】:2020-04-29 10:35:28
【问题描述】:

我们有从 libsonnet 导入的数组

{
  "volumes": [
    {
      "emptyDir": {},
      "name": "grafana-storage"
    },
    {
      "configMap": {
        "name": "grafana-dashboard-apiserver"
      },
      "name": " grafana-dashboard-apiserver"
    }
  ]
}

我想替换这个元素:

    {
      "emptyDir": {},
      "name": "grafana-storage"
    },

用这个(相同的name):

    {
      "name": "grafana-storage",
      "persistentVolumeClaim": {
        "claimName": "product-nfs"
      }

预期输出:

{
  "volumes": [
    {
      "configMap": {
        "name": "grafana-dashboard-apiserver"
      },
      "name": " grafana-dashboard-apiserver"
    },
    {
      "name": "grafana-storage",
      "persistentVolumeClaim": {
        "claimName": "product-nfs"
      }
    }
  ]
}

“追加”很简单,但是如何删除现有的

示例:

local x = {volumes: [
  {emptyDir: {}, name: 'grafana-storage' },
  {configMap: {name:  'grafana-dashboard-apiserver'
}, name: ' grafana-dashboard-apiserver'},]};

x 
+ {volumes+: [{name: 'grafana-storage',persistentVolumeClaim: {claimName:'product-nfs'}}]}

先谢谢了~

【问题讨论】:

标签: jsonnet ksonnet


【解决方案1】:

在派生/重载方面,jsonnet 更容易使用映射(又名“对象”、“字典”、“哈希”),策略是:1)转换为映射,2)覆盖, 3) 转换回数组。

sn-p 下面实现它:

local main_obj = {
  volumes: [
    {
      emptyDir: {},
      name: "grafana-storage",
    },
    {
      configMap: {
        name: "grafana-dashboard-apiserver",
      },
      name: "grafana-dashboard-apiserver",
    },
  ],
};

local obj_overrides = {
  volumes: [
    {
      name: "grafana-storage",
      persistentVolumeClaim: { claimName: "product-nfs" },
    },
  ],
};

// Convert to map for easier overloading, assumes all array elements are maps having "name" field
local toNamedMap(array) = { [x.name]: x for x in array };

// Convert back to array
local toNamedArray(map) = [{ name: x } + map[x] for x in std.objectFields(map)];

toNamedArray(toNamedMap(main_obj.volumes) + toNamedMap(obj_overrides.volumes))

【讨论】:

  • 我用这种方式写了一个libsonet,效果很好!,非常感谢!
猜你喜欢
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 2019-12-20
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多