概述
- 类似于sed + bash 函数的替换
但是使用
yq
- kislyuk的yq不是其他yq项目https://github.com/kislyuk/yq (
pip install yq
)
细节
我有这个 bash 功能:
function replace_image_repo() {
echo "nexus.local/${1}"
}
另一方面,我有一个 YAML 文件:
# pod.yaml
kind: Pod
# ...
spec:
containers:
- name: web
image: nginx
- name: logger
image: abdennour/logger
我能够用.image
静态值替换键的所有值出现:
yq -y '(.. | .image?) |= "mynewimage"' pod.yaml
结果和预期的一样:
# pod.yaml
kind: Pod
# ...
spec:
containers:
- name: web
image: mynewimage # <-- Replacement done successfully
- name: logger
image: mynewimage # <-- Replacement done successfully
但是,我想利用上面的 bash 函数replace_image_repo
并调用它来根据当前值计算每次出现的新值:
例如,
nginx
必须替换为$(replace_image_repo nginx)
应该是的输出nexus.local/nginx
。是否可以匹配当前值?
如果是这样,是否可以调用 Bash 函数“yq -y '.... $(HERE)'”?