sed обнуляет второе значение - PullRequest
0 голосов
/ 23 апреля 2020

В Kubernetes в initContainer я выполняю следующую команду для замены двух значений, взятых из переменных env:

      initContainers:
      - name: init-atsconfigs
        image: busybox
        command: ['sh', '-c', 'cd /tmp/ats && for i in $(ls *.config); do cat $i > /etc/trafficserver_edit/$i; done; sed -i "s/_AWS_ACCESS_KEY_OVERRIDE_/$AWS_ACCESS_KEY/g" /etc/trafficserver_edit/*.config', 'cd /tmp/ats && for i in $(ls *.config); do cat $i > /etc/trafficserver_edit/$i; done; sed -i "s/_AWS_ACCESS_SECRET_KEY_OVERRIDE_/$AWS_ACCESS_SECRET_KEY/g" /etc/trafficserver_edit/*.config']

Файл /etc/trafficserver_edit/s3_auth_v4.config выглядит так:

access_key=_AWS_ACCESS_KEY_OVERRIDE_
secret_key=_AWS_ACCESS_SECRET_KEY_OVERRIDE_
version=4
v4-region-map=region_map.config

К сожалению, первая команда sed обнуляет второе значение в исходном файле, оставляя его пустым:

access_key=AKIA....
secret_key=
version=4
v4-region-map=region_map.config

Как должна выглядеть команда sed для предотвращения этого?

edit: все неудачные попытки:

command: ['sh', '-c', 'cd /tmp/ats && for i in $(ls *.config); do cat $i > /etc/trafficserver_edit/$i; done; sed -e "s/_AWS_ACCESS_KEY_OVERRIDE_/$AWS_ACCESS_KEY/g" ; sed -e "s/_AWS_SECRET_KEY_OVERRIDE_/$AWS_ACCESS_SECRET_KEY/g" /etc/trafficserver_edit/*.config']

command: ['sh', '-c', 'cd /tmp/ats && for i in $(ls *.config); do cat $i > /etc/trafficserver_edit/$i; done; sed -i "s/_AWS_ACCESS_KEY_OVERRIDE_/$AWS_ACCESS_KEY/g" /etc/trafficserver_edit/*.config', 'cd /tmp/ats && for i in $(ls *.config); do cat $i > /etc/trafficserver_edit/$i; done; sed -i "s/_AWS_SECRET_KEY_OVERRIDE_/$AWS_ACCESS_SECRET_KEY/g" /etc/trafficserver_edit/*.config']

command: ['sh', '-c', 'cd /tmp/ats && for i in $(ls *.config); do cat $i > /etc/trafficserver_edit/$i; done; sed -i "s/_AWS_ACCESS_KEY_OVERRIDE_/$AWS_ACCESS_KEY/g;s/_AWS_ACCESS_SECRET_KEY_OVERRIDE_/$AWS_ACCESS_SECRET_KEY/g" /etc/trafficserver_edit/*.config

подробнее ..

1 Ответ

1 голос
/ 24 апреля 2020

Я использовал envsubst для решения этой проблемы. Поэтому в моем контейнере я запускаю скрипт Bash при запуске:

#!/bin/bash
cp -ar /etc/trafficserver_init/*.config /etc/trafficserver/
envsubst '$AWS_ACCESS_KEY,$AWS_ACCESS_SECRET_KEY' < /tmp/trafficserver_conf/s3_auth_v4.config > /etc/trafficserver/s3_auth_v4.config
envsubst '$AWS_DEFAULT_REGION' < /tmp/trafficserver_conf/region_map.config > /etc/trafficserver/region_map.config
rm -rf /tmp/trafficserver_conf

Я также изменил команду initContainer на:

command: ['sh', '-c', 'cd /tmp/ats && for i in $(ls *.config); do cat $i > /etc/trafficserver_init/$i; done']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...