【问题标题】:Extending inner object without explicitly extending every object in its path扩展内部对象而不显式扩展其路径中的每个对象
【发布时间】:2019-12-17 14:33:00
【问题描述】:

我有以下 2 个文件:

1.jsonnet

{
  a: {
    b: {
      b1: 1
    }
  }
}

2.jsonnet

local one = import'1.jsonnet';

one {
  a+: {
    b+: {
      b2: 2
    }
  }
}

我想扩展作为 a 一部分的内部对象 b(例如添加 a.b.b2),有没有办法在不明确执行 2.jsonnet 的情况下做到这一点?这个想法是一个对象可能有几层深,用户不应该关心内部结构。

类似于:

{
  bInner::self.a.b,
  a : {
    b : {
      b1 : 1
    }
  }
}

one {
  bInner +: {
    b2 : 2
  }
}

【问题讨论】:

    标签: jsonnet


    【解决方案1】:

    请注意,我假设用户需要以某种方式知道他们希望在树中的哪个位置重载字段。

    您可以将helpers.jsonnet 中的https://github.com/bitnami/kube-prod-runtime/blob/master/manifests/contrib/helpers.jsonnet 用作:

    $ wget https://raw.githubusercontent.com/bitnami/kube-prod-runtime/master/manifests/contrib/helpers.jsonnet
    
    $ cat 2.jsonnet
    local one = import'1.jsonnet';
    local helpers = import 'helpers.jsonnet';
    
    helpers.mergeAtPath(one, 'a.b.b2', 2)
    
    $ jsonnet 2.jsonnet 
    {
       "a": {
          "b": {
             "b1": 1,
             "b2": 2
          }
       }
    }
    

    还请注意,您可以在那里合并任何类型的 jsonnet 对象,例如

    helpers.mergeAtPath(one, "a.b.b2", [1,2,3])
    

    【讨论】:

      猜你喜欢
      • 2020-03-18
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 2011-05-07
      相关资源
      最近更新 更多