有没有办法打印 jsonnet 中的对象?这主要用于调试目的。
我正在用来error打印对象,但这会终止程序执行。
local obj = [
{
myKey: 2,
}];
error 'Printing' + std.toString(obj)
Run Code Online (Sandbox Code Playgroud)
输出:
RUNTIME ERROR: Printing[{"myKey": 2}]
snippet:6:1-37
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?
有没有办法.yaml在 jsonnet 中导入文件?
我发现 jsonnet 支持导入.json并且也有本机importstr()功能,但看起来不支持.yaml?
我想要做:
local foo = import "foo.yaml";
local bar = foo.bar;
Run Code Online (Sandbox Code Playgroud) 我无法理解如何最好地参数化Jsonnet文件,以便我可以从bash和另一个Jsonnet文件调用相同的文件.
假设我有一个名为template.jsonnet的简单模板:
{
// Required arguments
name:: error "'name' must be specified",
port:: error "'port' must be specified",
...,
}
Run Code Online (Sandbox Code Playgroud)
我可以很容易地将它合并到另一个Jsonnet文件中,并提供其所需的参数值:
{
local template = = import "./template.jsonnet";
template + {
name:: "service",
port:: 8080,
}
Run Code Online (Sandbox Code Playgroud)
我正在努力确定我可以template.jsonnet从bash 调用以获得相同结果的预期方式.
我可以使用,--ext-str但似乎需要std.extVar(x)
GitHub 问题表明它--tla-code可能是std.extVar()的替代品,但我不明白如何根据我的需要使用它.
后续问题是:如何对参数这是一个数组:
{
local template = = import "./template.jsonnet";
template + {
name:: "service",
port:: [8080,8081,8082],
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 jsonnet 构建将由 Python 代码使用的 json 对象,使用bindings从 Python 调用 jsonnet 。我想设置我的目录结构,以便 jsonnet 文件位于与运行 Python 代码的位置相关的一个或多个子目录中,例如:
foo.py
jsonnet/
jsonnet/bar.jsonnet
jsonnet/baz.libsonnet
运行foo.py然后应该能够使用_jsonnet.evaluate_snippet()从文件中读取的字符串jsonnet/,从jsonnet/. 做到这一点的最佳方法是什么?
我想用多行创建一个 kubernetes 配置映射,比如这种 yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: nifi-bootstrap
data:
run.sh: |-
echo "Waiting to run nslookup..."
sleep 30
Run Code Online (Sandbox Code Playgroud)
我应该如何在原型的部分函数中编写它?
parts:: {
bootstrap(p):: {
apiVersion: 'v1',
kind: 'ConfigMap',
metadata: {
name: p.name + '-bootstrap',
labels: {
app: p.app,
release: p.release,
},
},
data: {
'run.sh': "|-
line 1
line 2
line 3
"
Run Code Online (Sandbox Code Playgroud)
但它会像这样生成 yaml:(ks 显示默认值):
apiVersion: v1
data:
run.sh: "|-\nline 1 \nline 2\nline 3\n"
kind: ConfigMap
Run Code Online (Sandbox Code Playgroud)
我想挂载此配置映射并将其作为脚本运行,但我怀疑此输出是否有效。关于如何在 ksonnet/jsonnet 中生成多行值的任何想法?
我正在使用 jsonnet 读取由数组组成的值。我想修改该数组中的第一个元素以添加一个值。数据结构如下所示:
{
"my_value": [
{
"env": "something"
},
{
"var": "bar"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想为my_value[0]. 我如何在 jsonnet 中引用它?
我能够生成面板 JSON 来配置 Grafana 仪表板,如下所示:
jsonnet -J ~/grafana/grafonnet-lib mydash.jsonnet > mydash.json
Run Code Online (Sandbox Code Playgroud)
不过,我喜欢在 Grafana 本身中操作和编辑生成的仪表板。
我绝对感到困惑和沮丧的是,一旦我通过调整 Grafana 的设置等方式在 Grafana 中进行了 UI 更改……如何将其返回到Jsonnet 中?现在对我来说这是一次超级尴尬的开发经历。我导出面板 JSON 并在单独的窗口中打开源 Jsonnet,并认真尝试移植我的更改。
当您在 JSON 中可能遇到以下情况时,这尤其令人痛苦:
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": true,
"lineColor": "rgb(31, 120, 193)",
"show": true
},
Run Code Online (Sandbox Code Playgroud)
您需要手动转换为 Jsonnet/Graffonet-lib:
sparklineShow=true,
sparklineFull=true,
colorBackground=true,
Run Code Online (Sandbox Code Playgroud)
我是否缺少技巧或工作流程?
Jsonnetstd.mergePatch实现了RFC7396,但在我幼稚的测试中,我没有发现它的行为方式和+操作符之间有什么不同;例如,+操作符尊重x+语法。std.mergePatch是在 Jsonnet本身中实现的,这似乎暗示它与+运算符不同,我假设它是内置的。
这两种合并方式的语义有什么不同?
我怎样才能在 jsonnet 中得到这样的东西?
{
if 1 == 1 then
store: true
}
Run Code Online (Sandbox Code Playgroud)
当我使用 jsonnet 运行它时,出现以下错误:
STATIC ERROR: a.jsonnet:2:9-11: unexpected: if while parsing field definition
Run Code Online (Sandbox Code Playgroud)
我想生成这样的 json,仅作为示例,但在评估一些条件时:
{
"store": true
}
Run Code Online (Sandbox Code Playgroud) 如何附加到现有列表?
这是无效的:
local list = ['a', 'b', 'c'];
local list = list + ['e'];
Run Code Online (Sandbox Code Playgroud) 我想知道在使用 jsonnet 时是否可以在键中插入字符串?
例如,我想做这样的事情:
{
std.format("Hello %03d", 12): "milk"
}
Run Code Online (Sandbox Code Playgroud)
但它导致
STATIC ERROR: arith.jsonnet:2:5: expected token OPERATOR but got "."
我知道“密钥”本身是有效的,因为如果我不使用插值,它就可以正常工作,即
{
"milk": std.format("Hello %03d", 12),
"Hello 12": "milk"
}
Run Code Online (Sandbox Code Playgroud)
产生:
{
"Hello 12": "milk",
"milk": "Hello 012"
}
Run Code Online (Sandbox Code Playgroud)
看起来我也不能在键中使用变量,因为它们被解析为一个字符串(而不是变量的值) - 任何建议将不胜感激。
$ cat foo.libsonnet
{
local foo = 99,
bar: [ foo, 101 ]
}
$ cat baz.jsonnet
{
local foo = import 'foo.libsonnet',
baz: [foo.foo, foo.bar]
}
$ jsonnet baz.jsonnet
RUNTIME ERROR: field does not exist: foo
baz.jsonnet:3:11-18 thunk <array_element>
baz.jsonnet:3:10-28 object <anonymous>
During manifestation
Run Code Online (Sandbox Code Playgroud)
在这个例子中,很容易访问bar的字段foo。有什么办法可以baz.jsonnet访问当地人吗foo.libsonnet?
如果答案是否定的,我应该如何实现foo,baz以便我可以访问in Both和 also in 的foo字段?foo.libsonnetfoo.libsonnetbaz.jsonnet