【发布时间】:2018-05-22 18:45:12
【问题描述】:
有没有办法在 jsonnet 中导入 .yaml 文件?
我发现jsonnet支持导入.json,也有原生的importstr()函数但是貌似不支持.yaml?
我想做:
local foo = import "foo.yaml";
local bar = foo.bar;
【问题讨论】:
标签: jsonnet
有没有办法在 jsonnet 中导入 .yaml 文件?
我发现jsonnet支持导入.json,也有原生的importstr()函数但是貌似不支持.yaml?
我想做:
local foo = import "foo.yaml";
local bar = foo.bar;
【问题讨论】:
标签: jsonnet
目前没有(2018 年 5 月),https://github.com/google/jsonnet/issues/460 有一个未解决的问题,如果您正在使用 Kubernetes 清单(导入 + 使用 jsonnet 进行按摩),您可以使用https://github.com/ksonnet/kubecfg 包含 jsonnet 的超集,包括 std.parseYaml()。
更新(2018-05-23):添加
ksonnet示例
在应用文件夹中使用ksonnet 的嵌入parseYaml:
$ cat assets/foo.yaml
foo: value1
bar: value2
$ cat components/cm.jsonnet
local env = std.extVar("__ksonnet/environments");
local params = std.extVar("__ksonnet/params").components.cm;
local k = import "k.libsonnet";
local configMap = k.core.v1.configMap;
local parseYaml = std.native("parseYaml");
configMap.new(params.name, params.data) {
data+: parseYaml(importstr "../assets/foo.yaml")[0] {
foo: "my own value",
},
}
$ ks show default
---
apiVersion: v1
data:
bar: value2
foo: my own value
kind: ConfigMap
metadata:
name: cm
【讨论】:
ksonnet 不是std.parseYaml,而是local kubecfg = import "kubecfg.libsonnet"; kubecfg.parseYaml(yaml_string) 之类的东西。
ksonnet 与kubecfg 有共同的根源,正如@sbarzowski 所说(尽管我必须通过std.native() 直接使用它),我已经用一个例子更新了答案。