计算字段不能访问局部变量?
Computed fields cannot access local variables?
我有以下代码块:
local tst = {
postgres: {
test: {
// params: ['blahblah'],
},
},
};
{
[if std.length(std.objectFields(tst)) > 0 then 'aws_db_parameter_group']: {
['pgsql_%s' % db]: {
local database = tst.postgres[db], // <--- Here's my local scope var
name: 'pgsql_%s' % db,
[if 'params' in tst.postgres[db] then 'parameter']: database.params,
}
for db in std.objectFields(if 'postgres' in tst then tst.postgres else {})
},
}
按预期工作:
> ./jsonnet tst.jsonnet
{
"aws_db_parameter_group": {
"pgsql_test": {
"name": "pgsql_test"
}
}
}
但是,如果我更改行:
[if 'params' in tst.postgres[db] then 'parameter']: database.params,
收件人:
[if 'params' in database then 'parameter']: database.params,
Jsonnet
抛出错误:
> ./jsonnet tst.jsonnet
STATIC ERROR: tst.jsonnet:14:23-31: Unknown variable: database
我做错了什么?我可以解决这个问题吗?
> ./jsonnet --version
Jsonnet commandline interpreter v0.18.0
根据我的发现(不是 jsonnet 内部专家),您需要在 进入您正在使用的范围之前“完全”完成计算字段变量他们。
我是你的情况,下面修复它:
local tst = {
postgres: {
test: {
params: ['blahblah'],
},
test_noparam: {
},
},
};
{
[if std.length(std.objectFields(tst)) > 0 then 'aws_db_parameter_group']: {
local database = tst.postgres[db], // <--- Here's the local var, finalized in _upper_ scope
['pgsql_%s' % db]: {
name: 'pgsql_%s' % db,
[if 'params' in database then 'parameter']: database.params,
}
for db in std.objectFields(if 'postgres' in tst then tst.postgres else {})
},
}
我有以下代码块:
local tst = {
postgres: {
test: {
// params: ['blahblah'],
},
},
};
{
[if std.length(std.objectFields(tst)) > 0 then 'aws_db_parameter_group']: {
['pgsql_%s' % db]: {
local database = tst.postgres[db], // <--- Here's my local scope var
name: 'pgsql_%s' % db,
[if 'params' in tst.postgres[db] then 'parameter']: database.params,
}
for db in std.objectFields(if 'postgres' in tst then tst.postgres else {})
},
}
按预期工作:
> ./jsonnet tst.jsonnet
{
"aws_db_parameter_group": {
"pgsql_test": {
"name": "pgsql_test"
}
}
}
但是,如果我更改行:
[if 'params' in tst.postgres[db] then 'parameter']: database.params,
收件人:
[if 'params' in database then 'parameter']: database.params,
Jsonnet
抛出错误:
> ./jsonnet tst.jsonnet
STATIC ERROR: tst.jsonnet:14:23-31: Unknown variable: database
我做错了什么?我可以解决这个问题吗?
> ./jsonnet --version
Jsonnet commandline interpreter v0.18.0
根据我的发现(不是 jsonnet 内部专家),您需要在 进入您正在使用的范围之前“完全”完成计算字段变量他们。
我是你的情况,下面修复它:
local tst = {
postgres: {
test: {
params: ['blahblah'],
},
test_noparam: {
},
},
};
{
[if std.length(std.objectFields(tst)) > 0 then 'aws_db_parameter_group']: {
local database = tst.postgres[db], // <--- Here's the local var, finalized in _upper_ scope
['pgsql_%s' % db]: {
name: 'pgsql_%s' % db,
[if 'params' in database then 'parameter']: database.params,
}
for db in std.objectFields(if 'postgres' in tst then tst.postgres else {})
},
}