У меня есть файл YAML со следующим содержимым:
apiVersion: v1
kind: ConfigMap
metadata:
name: castlereport-cfg
namespace: qa
data:
application.properties: |
BODY
Мне нужно заменить BODY содержимым файла application.properties.Я использовал sed, чтобы сделать это следующим образом:
sed -i -e '/BODY/r target/classes/application-dev.properties' -e 's///' -e '/^ *\$/d' target/classes/$kubeConfigFile
Он делает то, что мне нужно, но теряет отступ, и я получаю следующее:
apiVersion: v1
kind: ConfigMap
metadata:
name: castlereport-cfg
namespace: qa
data:
application.properties: |
server.port=8080
server.context-path=/
spring.main.banner-mode=off
logbook.format.style=http
Что мне делатьсохранить отступ?
И еще одна вещь, которую часть -e '/^ *\$/d'
в команде sed предназначена для удаления пустых строк, но, похоже, она тоже не работает.
Ожидаемый результат следующий:
apiVersion: v1
kind: ConfigMap
metadata:
name: castlereport-cfg
namespace: qa
data:
application.properties: |
server.port=8080
server.context-path=/
spring.main.banner-mode=off
logbook.format.style=http
ОБНОВЛЕНИЕ: у меня есть конвейерный сценарий Jenkins, в котором я могу добиться того, что хочу, с помощью следующих трех строк:
sh ( script : "sed -i -e 's/^[ \t\$]*/ /' -e \"/^ *\$/d\" ./target/classes/"+configFile, returnStdout: true).trim() //remove trailing spaces and blank lines
sh ( script : "sed -i -e \"/BODY/r ./target/classes/"+configFile+"\" -e \"s///\" ./target/classes/" + configMapKubernetes, returnStdout: true).trim() // insert content of application-dev.properties to YAML file using BODY
sh ( script : "sed -i -e \"/^ *\$/d\" ./target/classes/" + configMapKubernetes, returnStdout: true).trim() //remove blank lines
Конвейерный скрипт находится в groovy, поэтому вся командавнутри двойных кавычек.