Случайный пароль в файле yaml

Я пытался обновить значения helm values.yaml с помощью случайного пароля.

Мой подход состоит в том, чтобы добавить placeholder лайк

global:
    my_password: "password-placeholder"
another_service
    service_password: "password-placeholder"

Я пытался сгенерировать пароль с помощью openssl rand -base64 12. Я ищу команду bash для замены строки, которая может зацикливаться и создавать этот пароль.

Пробовал yq, но у него есть ошибка, из-за которой удаляются некоторые комментарии в файле.

Пробовал sed, но не уверен, как каждый раз заменять password-placeholder уникальным паролем.

Ищу предложения.

Какую версию yq вы используете? Go или версия Python? См. stackoverflow.com/tags/yq/info и опубликуйте сведения о своей версии.

Inian 16.05.2022 10:23

Я использую bash, я думаю. Это открытый вопрос -> github.com/mikefarah/yq/issues/442

mayankb 16.05.2022 10:26

Это то, что нужно, вы можете увидеть это, когда посмотрите на исходники.

Aserre 16.05.2022 10:38

вам нужно добавить опцию g в sed, чтобы применить вашу замену ко всем "password-placeholder" вхождениям в вашем файле

Aserre 16.05.2022 10:50

@Aserre Не совсем, только если вы предполагаете заменить несколько вхождений за строку.

tripleee 16.05.2022 11:09
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать 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 печатает каждую строку

Использование этой команды заменяет один и тот же пароль в обоих заполнителях. Я думаю о том, чтобы перебрать каждую строку, а затем заменить по отдельности.

mayankb 16.05.2022 11:15

Извините, я забыл закрыть команду, теперь она должна работать как задумано

Fravadona 16.05.2022 11:31

Спасибо, печать идет правильно с 1, есть ли способ записать ее обратно в файл. Похоже, исходный файл не изменился.

mayankb 16.05.2022 12:39

В GNU awk есть опция awk -i inplace ... для применения изменений к входному файлу.

Fravadona 16.05.2022 12:46

Я проверил -i на месте в моей локальной системе, и это сработало. Но в среде разработки у нас есть другая разновидность Linux, которая имеет либо mawk, либо gawk, и выдает ошибку awk: not an option: -i. Знаете ли вы обходной путь для этого?

mayankb 16.05.2022 18:39

Использование простого временного файла — единственное, что можно перенести (не только для awk, но и для всех других стандартных команд) if awk ... > file.yaml.new; then mv -f file.yaml.new file.yaml; fi

Fravadona 16.05.2022 19:20

Другие вопросы по теме