Создать правильную строку JSON из Bash или Ruby? - PullRequest
0 голосов
/ 03 января 2019

Я хотел бы создать 20 капель в Digital Ocean, и я хотел бы сделать это из Bash или Ruby.Сначала Bash казался самым простым, но потом оказалось, что JSON очень требователен к кавычкам и требует, чтобы аргумент -d имел одинарные кавычки.

Так что мой скрипт ниже не расширяет $lineпеременная = (

Вопрос

Так что теперь я думаю, поможет ли это, если бы я использовал Ruby? Разве я не столкнулся бы с той же проблемой снова только вдругой язык?

token=123

while read line; do
  curl -qq -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token" -d '{"name":"02267-$line","region":"fra1","size":"s-2vcpu-4gb","image":"ubuntu-18-04-x64","ssh_keys":["14063864","22056139","23743266"],"backups":false,"ipv6":false,"user_data":null,"private_networking":null,"volumes": null,"tags":["02267-$line"]}' "https://api.digitalocean.com/v2/droplets"
done < list.txt

list.txt

tokyo seoul osaka kobe

1 Ответ

0 голосов
/ 03 января 2019

Используйте инструмент типа jq, чтобы сгенерировать правильный JSON для вас.

# Note: $x here is *not* a shell variable, but a jq variable
# that jq will expand, ensuring the value is correctly quoted.
filter='{name: "02267-\($x)",
         region: "fra1",
         size: "s-2vcpu-4gb",
         image: "ubuntu-18-04-x64",
         ssh_keys ["14063864","22056139","23743266"],
         backups: false,
         ipv6: false,
         user_data: null,
         private_networking: null,
         volumes: null,
         tags: ["02267-\($x)"]
       }'

jq -n --argjson x "$line" "$filter" |
  curl -qq -X POST \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer $token" \
     -d @- \
     "https://api.digitalocean.com/v2/droplets"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...