Я пытался обновить значения helm values.yaml с помощью случайного пароля.
Мой подход состоит в том, чтобы добавить placeholder
лайк
global:
my_password: "password-placeholder"
another_service
service_password: "password-placeholder"
Я пытался сгенерировать пароль с помощью openssl rand -base64 12
. Я ищу команду bash для замены строки, которая может зацикливаться и создавать этот пароль.
Пробовал yq
, но у него есть ошибка, из-за которой удаляются некоторые комментарии в файле.
Пробовал sed
, но не уверен, как каждый раз заменять password-placeholder
уникальным паролем.
Ищу предложения.
Я использую bash, я думаю. Это открытый вопрос -> github.com/mikefarah/yq/issues/442
Это то, что нужно, вы можете увидеть это, когда посмотрите на исходники.
вам нужно добавить опцию g
в sed, чтобы применить вашу замену ко всем "password-placeholder"
вхождениям в вашем файле
@Aserre Не совсем, только если вы предполагаете заменить несколько вхождений за строку.
Вы можете использовать awk
для этого:
awk -v placeholder='password-placeholder' '
$0 ~ placeholder {
cmd = "openssl rand -base64 12"
cmd | getline pass
close(cmd)
sub(placeholder,pass)
} 1
' file.yml
$0 ~ placeholder {...}
выбирает строки, которые соответствуют регулярное выражение, содержащемуся в placeholder
, и выполняет для них ...
.
"openssl rand -base64 12" | getline pass
загружает результат команды openssl в переменную pass
sub(placeholder,pass)
заменяет (в текущей строке) первое совпадение регулярного выражения placeholder
содержимым pass
1
печатает каждую строку
Использование этой команды заменяет один и тот же пароль в обоих заполнителях. Я думаю о том, чтобы перебрать каждую строку, а затем заменить по отдельности.
Извините, я забыл закрыть команду, теперь она должна работать как задумано
Спасибо, печать идет правильно с 1
, есть ли способ записать ее обратно в файл. Похоже, исходный файл не изменился.
В GNU awk есть опция awk -i inplace ...
для применения изменений к входному файлу.
Я проверил -i на месте в моей локальной системе, и это сработало. Но в среде разработки у нас есть другая разновидность Linux, которая имеет либо mawk
, либо gawk
, и выдает ошибку awk: not an option: -i
. Знаете ли вы обходной путь для этого?
Использование простого временного файла — единственное, что можно перенести (не только для awk, но и для всех других стандартных команд) if awk ... > file.yaml.new; then mv -f file.yaml.new file.yaml; fi
Какую версию yq вы используете? Go или версия Python? См. stackoverflow.com/tags/yq/info и опубликуйте сведения о своей версии.