Найти и заменить в yml файле
У меня есть следующий файл yml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: queue
spec:
selector:
matchLabels:
app: queue
replicas: 1
template: # template for the pods
metadata:
labels:
app: queue
spec:
containers:
- name:
image:
resources:
requests:
memory: 300Mi
Мне нужно указать имя и изображение в разделе "Развертывание": Метаданные развертывания: имя: очередь
Мне нужно ввести следующую строку в этот файл для развертывания под
spec:
containers:
раздел.
go:dev
go:latest
Желаемый результат
apiVersion: apps/v1
kind: Deployment
metadata:
name: queue
spec:
selector:
matchLabels:
app: queue
replicas: 1
template: # template for the pods
metadata:
labels:
app: queue
spec:
containers:
- name: go:dev
image: go:latest
resources:
requests:
memory: 300Mi
Можно ли выполнить вышеуказанное с помощью сценария оболочки, используя какое-либо регулярное выражение или подобное?
1 ответ
@RavinderSingh13 прав в том, что не использует
awk
,
sed
или некоторые другие строковые утилиты для этого. Использование - правильный способ сделать это.
https://github.com/mikefarah/yq
https://mikefarah.gitbook.io/yq/
я использовал
yq version 4.6.3
.
Чтобы обновить каждое свойство по отдельности, выполните следующие команды. В
-i
изменить файл на месте.
yq -i eval '.spec.template.spec.containers[0].name = "go:dev"' file.yml
yq -i eval '.spec.template.spec.containers[0].image = "go:latest"' file.yml
yq
результаты запроса также могут передаваться друг в друга. Это может быть использовано здесь для обновления обоих полей в одной команде.
yq -i eval '.spec.template.spec.containers[0].name = "go:dev" |
.spec.template.spec.containers[0].image = "go:latest"' file.yml