支持 map_replace 函数¶
包含您的 Launchpad 蓝图的 URL
https://blueprints.launchpad.net/heat/+spec/map-replace-function
此蓝图添加了对新的 map_replace 函数的支持。
问题描述¶
目前,对映射(例如 json 参数)执行键/值替换比较困难。虽然可以使用 str_replace 或 yaql 进行(滥)用,但两种方法都存在问题,例如避免 str_replace 中的部分匹配,以及在 yaql 或 str_replace 的情况下引发键/值冲突的验证错误。
提议的变更¶
此规范建议添加一个新函数,该函数可以遍历映射并根据每个映射的可选映射替换键或值
map_replace:
- k1: v1
k2: v2
- keys:
k1: K1
values:
v2: V2
在这种情况下,结果将被评估为 {‘K1’: ‘v1’, ‘k2’, ‘V2’}
将添加验证检查,以便如果发生键冲突,替换将失败,例如,如果将“k2”替换为上面的“k1”,该函数将失败,因为它将覆盖现有键。
备选方案¶
我尝试在 yaql 中执行此操作,并在一些 ML 帮助下使其工作
yaql:
expression: let(root => $) -> dict($root.data.service.items().select(
[$[0], $root.data.ip[$[1]]]))
data:
service: { get_param: ServiceNetMap }
ip: {get_param: NetIpMap}
但是,这不允许在发生键冲突时引发错误,并且语法很难记住。
实现¶
实现新函数和测试。
负责人¶
- 主要负责人
shardy
里程碑¶
newton-3
工作项¶
实现 map_replace 内置函数。
添加相关的测试。
添加相应的文档。
在 heat-templates 中添加用法示例。
依赖项¶
无