发生了什么?
在 CRD 验证规则中,有一个 CEL 保留关键字列表,这些关键字会应用转义规则。
例如,对于 CRD 模式:
spec:
ref:
name: myName
namespace: myNamespace
由于 namespace
是一个保留关键字,因此需要在 CEL 表达式中使用 __namespace__
以遵循转义规则,如 self.ref.__namespace__ != ""
。但是,如果已经存在与转义格式冲突的字段名,它将被覆盖。
例如,对于 CRD 模式
spec:
ref:
name: myName
namespace: myNamespace
__namespace__: 10
字段名 __namespace__
将被覆盖,因此 __namespace__
的值将丢失。
你期望发生什么?
任何字段名的值不应该丢失。
我们如何尽可能精确地重现它?
编写包含任何保留关键字和该关键字转义格式的 CRD 模式,并将其用于验证规则中。
我们需要了解其他信息吗?
- 无响应*
Kubernetes 版本
$ kubectl version
# paste output here
云提供商
OS 版本
# On Linux:
$ cat /etc/os-release
# paste output here
$ uname -a
# paste output here
# On Windows:
C:\> wmic os get Caption, Version, BuildNumber, OSArchitecture
# paste output here
2条答案
按热度按时间xriantvc1#
这个问题目前正在等待分类。
如果SIG或子项目确定这是一个相关的问题,他们将通过应用
triage/accepted
标签并提供进一步的指导来接受它。组织成员可以通过在评论中写入
/triage accepted
来添加triage/accepted
标签。有关使用PR评论与我互动的说明,请查看here。如果您对我的行为有任何问题或建议,请针对kubernetes-sigs/prow仓库提出一个问题。
yizd12fk2#
今天,
namespace
无法在CEL表达式中作为字段名使用,因为如果CRD字段名为namespace
,我们要求在CEL中使用转义形式(__namespace__
)来访问字段。为了与现有表达式保持向后兼容并支持将来直接使用
namespace
,我认为我们可以通过namespace
和__namespace__
同时支持访问namespace
(以及所有关键字匹配的字段名),并保持所有其他(双引号、三引号等转义名称)不变。