将json配置变量传递给jsonnet中的函数

67up9zun  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(112)

我有一个jsonnet文件,其中有一个文件config.json,它是硬编码在变量中的。我想做的是能够将config_v1.json或config.v*.json作为参数传递给config。在jsonnet中如何做到这一点?

local config(
   args,
   resources,
   nodeAffinity,
   replicas=1,
   ttl='',
   fullName=naming.NewFullName('allm', namespace),
   image=naming.WithRegistry('allm:' + env.global.User + '-latest'),
   routes=null,
   command=null,
       ) = (
   local configMap = {
     apiVersion: 'v1',
     kind: 'ConfigMap',
     metadata: {
       name: fullName.name,
       namespace: fullName.namespace,
       labels: { app: fullName.name },
     },
     data: {
       'conf-multiturn.json': std.manifestJsonEx(confData, '  '),
     },
   };
2nbm6dog

2nbm6dog1#

考虑到您希望configDataJSON被逐字显示,您真的不需要进一步操作它。
在下面的示例中,我使用importstr按原样加载configdata.json,然后构建两个数据字段:一个来自加载的JSON的逐字记录,然后另一个通过jsonnet更改了它的一个字段,只是为了向你展示应该如何完成可能的转换(在你的原始用例中 * 不需要 *):

foo.jsonnet

local confData = importstr 'configdata.json';

local config(confData) = (
  local configMap = {
    apiVersion: 'v1',
    kind: 'ConfigMap',
    metadata: {
      name: 'myname',
      namespace: 'mynamespace',
      labels: { app: 'myname' },
    },
    // data fields need to be: { key: value }, both as strings
    data: {
      // verbatim JSON manifested as string
      'confData.json': confData,
      // original JSON parsed into jsonnet object, modified, then manifested as string
      'confData2.json': std.manifestJson(
        std.parseJson(confData) { foo: 'otherBar' }
      ),
    },
  };
  configMap
);

config(confData)

configdata.json

{
  "foo": "bar",
  "qqq": "qux"
}

输出

$ jsonnet foo.jsonnet | jq -r '.data["confData.json"]' 
{
  "foo": "bar",
  "qqq": "qux"
}

$ jsonnet foo.jsonnet | jq -r '.data["confData2.json"]'
{
    "foo": "otherBar",
    "qqq": "qux"
}

$ jsonnet foo.jsonnet | kubeconform -verbose
stdin - ConfigMap myname is valid

相关问题