В настоящее время я пытаюсь решить проблему с yq, когда мы обновляем файл значений диаграммы руля с помощью автоматизированного процесса. Большинство файлов значений имеют тег изображения в следующем формате:
image:
repository: repo-name
tag: 0.0.1
которые мы обновляли:
yq -i e '.image.tag = env(TAG)' chart-name/values.yaml
однако не все диаграммы имеют одинаковый формат, например. у некоторых есть:
controller:
image:
repository: repo-name
tag: 0.0.1
Я хочу иметь возможность обновлять значение тега, где бы он ни был вложен в файл yaml, если это возможно с помощью yq или альтернативы, если это возможно.





Предполагая, что вы используете mikefarah/yq, вы можете использовать оператор рекурсивного спуска для обновления любого ключа, соответствующего имени tag
yq '( .. | select(has("tag")).tag ) |= env(TAG)' yaml
К сожалению, оператор path недостаточно эффективен (в отличие от jq), чтобы получить пути всех путей от корня к листу и обновить его значение.
Примечание. Если вы используете yq версии 4.18.1 или выше, флаг eval e больше не нужен, поскольку он стал действием по умолчанию.