Как добавить кавычки в вывод jq, чтобы создать секрет для kubectl secret - PullRequest
0 голосов
/ 07 ноября 2019
kubectl -n aqua123 create secret generic aquadocker1234 --from-env-file=<(
    aws secretsmanager get-secret-value --secret-id aqua_secret |
    jq -r '.SecretString' | jq -r 'to_entries | .[] | '.key' + "=" + '.value'')

Вывод скрипта jq имеет вид xyz123@gmail.com= password1234. Секрету Kubernates не нравится вывод знака @. Я хочу вывод как 'xyz123@gmail.com'= 'password1234' (с кавычками).

Как я могу изменить свой код jq для получения желаемого результата?

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

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

... jq -r '.SecretString | to_entries[] | "'"'"'\(.key)'"'"'='"'"'\(.value)'"'"'"'

Если вам часто нужны одинарные кавычки, вам может быть полезно определить некоторые функции в файле .jq.

def squot: "'";
def squot($val): "\(squot)\($val|gsub(squot; "\\\(squot)"))\(squot)";

С помощьюэто, ваш фильтр теперь становится:

... jq -r '.SecretString | to_entries[] | "\(squot(.key))=\(squot(.value))"'
0 голосов
/ 07 ноября 2019

Это работа для JQ's @sh. Рассмотрим:

jq -rn '{"key": "xyz123@gmail.com", "value": "password1234"}
  | "\(.key|@sh)=\(.value|@sh)" '

Вывод

'xyz123@gmail.com'='password1234'
...