Как правильно передать данные?

Вопрос чисто теоретический, но поскольку я больше к линуксу чем а разработке то страдает моя теоретическая часть.
И так у нас есть некий сервис который управляет виртуальными машинами заказывает их останавливает накатывает ( собствено я готовлю эти баш скрипты.
Соответственно у нас есть фронт публичный.
Все что остается на фронте это :
(сама машина заказывается по апи датацентра и уже грубо говоря готова )
через exec выполнить одну единственную команду на виртуальной машине, в частности скачать bash скрипт с репозитория и запустить его.
Он там магически все делает.

НО остается вопрос в данных.
Скрипт получает на ввод некий массив данных ID кошелька название ноды и тд в общем введеные данные в админке.
И сейчас я их просто заливаю следующим образом просто подавая их в виде дополнительных аргументов, притом они всегда разные и есть стандартные но чаще есть эксклюзивные.
чтото вроде bash.sh a=3 b=423 и тд.
Естественно не очень удобно по двум критериям.
1 в переменных могут быть спецсимволы.
2. мне нужно возвращять часть даных скрипта обратно в админку.
Статус что все готово. естественно для прогресс бара установки а следовательно не один раз.
3. статусы ошибок если они возниктут ( пусть даже эти статусы я готовлю в самом скрипте)
4. Возвращать некие фишки которые генерятся уже на машине, такие как публичный ключ и тд.
Просто stdout я не могу забирать там много мусора.
Демона на стороне машины своего ставить не желательно .
Но обмен данных должен быть двухсторонним,
Как это лучше организовать плюс желательно секрюрно.

Возможно как-то отдавать json с переменными на сервер, но как его грамотно возвращать в реальном времени обратно.
Разбивать один скрипт на разные конечно возможно, дабы получать вывод каждого по отдельности.
Но они будут очень часто обновляться а главное таких видов машин много.
И так хотябы это один файл да и этапов может быть много. В обещм мне кажется если его разбивать на несколько то потом будет тяжело все это отлаживать и чинить при обновлениях.
  • Вопрос задан
  • 141 просмотр
Решения вопроса 4
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Сделайте так

1. Фронт создает json спецсимволы экранируются встроенными средствами
2. Скрипт по крону запускается и обрабатывает созданные файлы
3. В ходе обработки скрипт пишет в файл id.json где id номер процесса или идентификатор
4. В фронте отображается id.json там может быть прогресс или результат, в общем все зависит от вашей фантазии
5. После окончания работы временные файлы удаляются
Ответ написан
@rPman
Первое, sh - отвратительный язык программирования, именно для задач работы с данными, т.е.он конечно может но сильно неудобно. В метках php, он отлично подходит для написания скриптов, поддержка json есть.

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

Иногда вместо разработки сетевой коммуникации и сопутствующих им проблем, проще разрабатывать централизованную систему управления, запускать скрипты на удаленных машинах с помощью ssh, но реализовать скрипты так, чтобы они н отрабатывали быстро, репортуя состояния, без ожидания, особенно если система распределенная через ненадежный интернет
Ответ написан
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
С учётом уже написанных комментариев... Берёте скриптовый язык, для которого есть компиляция в exe-шник. Пусть садится на какой-нибудь порт типа 9876, и отрабатывает коннекты по HTTP. А дальше вертите как хотите.
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
Данные в баш скрипт можно передавать тем же json-ом и парсить через jq
Или фронтом писать в файл, скриптом читать из файла по строкам, убрав проблемы с разными символами
Можно вообще заворачивать все base64 и передавать аргументы в скрипт уже закодировав - тоже все проблемы с символами пропадают.
Вариантов много.

Просто stdout я не могу забирать там много мусора.

Ну можно же правильный stdout сделать. В самом скрипте писать в лог файлы, а в stdout только то, что нужно для ответа серверу в том формате, который нужен серверу.
Можно в stderr писать, если нужно в терминал, а не в файл. И соответсвенно контролировать что пошло в stderr а что в stdout. Тут вообще не проблема.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы