Создайте файл json, используя jq и несколько переменных - PullRequest
0 голосов
/ 26 июня 2018

У меня есть файл json, подобный этому:

{
  "name": "Job",
  "type": "xdb",
  "typeLogoUrl": "public/app/plugins/logo.svg",
  "access": "proxy",
  "url": "http://xdb:80",
  "password": {},
  "user": "xx",
  "database": "Job",
  "basicAuth": true,
  "basicAuthUser": "xx",
  "basicAuthPassword": {},
  "withCredentials": true,
  "isDefault": false,
  "jsonData": {},
  "secureJsonFields": null
}

Теперь все, что мне нужно, это передать переменные окружения в пароль пароля и basicAuthPassword и сгенерировать новый файл json, как показано ниже:

{
  "name": "Job",
  "type": "xdb",
  "typeLogoUrl": "public/app/plugins/logo.svg",
  "access": "proxy",
  "url": "http://xdb:80",
  "password": "password" ,
  "user": "xx",
  "database": "Job",
  "basicAuth": true,
  "basicAuthUser": "xx",
  "basicAuthPassword": "password",
  "withCredentials": true,
  "isDefault": false,
  "jsonData": {},
  "secureJsonFields": null
}

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

/usr/local/bin/jq -n --arg "password" '.password = $arg' < input.json

Может кто-нибудь подсказать мне, как этого добиться?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Если пароль уже является переменной окружения (что может быть не очень хорошей идеей), то, чтобы избежать его отображения в командной строке, вы можете использовать встроенный env, например:

.password = env.password

и т.д.

Альтернативой для рассмотрения может быть помещение пароля во временный файл, а затем, например, использование параметра командной строки --argfile. Или, если ваша оболочка поддерживает это, --argfile pw <(echo "\"$password\"")

0 голосов
/ 26 июня 2018

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

Предполагая, что вам нужно изменить команду jq следующим образом:

jq --arg p "password" '.password = $p | .basicAuthPassword =  $p' < input.json
...