请求提供Helm中merge操作的输入输出示例(官方文档描述不足)
Helm
merge 函数示例详解 官方文档对merge的说明:
将两个或多个字典合并为一个,优先保留dest字典的内容:
$newdict := merge $dest $source1 $source2 这是一个深度合并操作但并非深度复制操作。合并后的嵌套对象在两个字典中是同一个实例。如果想要在合并的同时进行深度复制,请结合使用deepCopy函数...
以下是带输入输出的具体示例:
1. 基础合并示例
输入字典
$dest := { "name": "my-app", "replicas": 2, "env": {"LOG_LEVEL": "info"} } $source1 := { "replicas": 3, "image": "nginx:1.25", "env": {"DEBUG": "false"} }
执行合并
$merged := merge $dest $source1
输出结果
{ "name": "my-app", # 保留dest的原始值 "replicas": 2, # dest中的key优先,不会被source1的值覆盖 "env": {"LOG_LEVEL": "info", "DEBUG": "false"}, # 嵌套字典深度合并 "image": "nginx:1.25" # 新增source1中的key }
2. 多源字典合并示例
输入字典
在基础示例的基础上新增:
$source2 := { "image": "nginx:1.26", "resources": {"requests": {"cpu": "100m"}} }
执行合并
$merged := merge $dest $source1 $source2
输出结果
{ "name": "my-app", "replicas": 2, "env": {"LOG_LEVEL": "info", "DEBUG": "false"}, "image": "nginx:1.26", # 多个source存在相同key时,最后一个source的值保留 "resources": {"requests": {"cpu": "100m"}} # 新增source2中的key }
3. "非深度复制"特性验证示例
输入字典
$dest := {"config": {"max_size": 100}} $source := {"config": {"timeout": 30}}
执行合并并修改嵌套对象
$merged := merge $dest $source # 修改合并后字典的嵌套属性 $_ := set $merged.config "max_size" 200
输出结果(原dest字典的变化)
# 修改后$dest的内容 {"config": {"max_size": 200, "timeout": 30}}
说明:合并后的嵌套对象与原dest的嵌套对象是同一个实例,修改合并结果会同步影响原字典。
4. 结合deepCopy实现合并+深度复制
输入字典
同示例3的$dest和$source
执行深度复制+合并
# 先对dest做深度复制,避免修改影响原字典 $destCopy := deepCopy $dest $merged := merge $destCopy $source # 修改合并后字典的嵌套属性 $_ := set $merged.config "max_size" 200
输出结果
# 原dest字典不受影响 {"config": {"max_size": 100}} # 合并后的字典已修改 {"config": {"max_size": 200, "timeout": 30}}
说明:通过deepCopy复制原dest后再合并,原字典与合并结果的嵌套对象是独立实例,修改合并结果不会影响原字典。
内容的提问来源于stack exchange,提问作者gstackoverflow
相关产品推荐
相关产品推荐

