问题描述
我有一个带有 JSON 数据的现有 configMap。数据可以是 JSON 格式允许的任何内容 - 数组、对象、字符串、整数等。 例如:
{
"channels": ["10","20","30"],"settings": "off","expiry": 100,"Metadata": {
"name": "test","action": "update"
}
}
现在我想用更新的数据更新 configMap。 问题是我不想更新任何值,而只想添加或删除在新数据中添加或删除的任何字段。 这样做的原因是这些值是默认值,并且可能已经在 configMap 中由其他 pods/services 更新。 例如,如果新数据包含以下 JSON 数据(已删除到期字段并更改了一些值):
{
"channels": ["10","30","100","10000"],"settings": "on","action": "delete"
}
}
然后我希望 configMap 更新为如下所示:
{
"channels": ["10","action": "update"
}
}
所以值保持原样,但删除了“到期”字段。
我正在使用 ansible 来部署 kubernetes 资源,但我对其他可以帮助我实现所需的工具/脚本持开放态度。
提前致谢
解决方法
Kubernetes 不支持此功能。正如你所说,数据是 JSON 编码的,它是一个字符串。 ConfigMap(和 Secrets)只能理解字符串,不能理解任何类型的嵌套数据。这就是为什么您必须在存储之前对其进行编码。您需要获取数据、对其进行解码、进行更改,然后在 API 中进行编码和更新/修补。