Окружения

У каждого агента и каждого сервера есть свой набор переменных окружения — строк вида КЛЮЧ=значение, которые передаются приложению при запуске. Там лежат адреса сервисов, ключи доступа, параметры подключений. Пока агентов и серверов мало, эти строки можно копировать руками. Когда их десятки, один и тот же набор приходится вручную повторять много раз — и легко ошибиться или забыть обновить где-то.

«Окружения» — это библиотека именованных наборов таких переменных. Набор заводится один раз, а потом выгружается на выбранные агенты и серверы. Меняете значение в одном месте — рассылаете нужным агентам, вместо того чтобы обходить их по очереди.

Что такое набор окружения

Набор — это имя и упорядоченный список строк КЛЮЧ=значение. Хранится он в том же виде, в каком живут окружения серверов и агентов, поэтому выгруженные значения ведут себя ровно как введённые вручную на вкладке «Окружение».

  • Значения зашифрованы. В списке и при просмотре видны только названия ключей и их количество — сами значения скрыты. Полный текст показывается только при явном раскрытии, и только в окне редактирования. Так секреты не мелькают на экране и не попадают в чужие руки;
  • Имя уникально. Два набора с одинаковым именем не создать: сохранение отклонится с понятным сообщением;
  • Пустые ключи отбрасываются, а пустые значения сохраняются — так работает передача окружения агентам. Строку вида ПАРОЛЬ= иногда нужно оставить намеренно.

Страница «Окружения»

Страница «Окружения» открывается отдельным пунктом боковой панели. Она показывает таблицу наборов: имя и число переменных в каждом. У строки есть три действия:

  • «Выгрузить» — отправить набор на выбранные агенты или серверы;
  • «Редактировать» — открыть набор, поправить строки, раскрыть или скрыть значения;
  • «Удалить» — убрать набор из библиотеки (с подтверждением).

Там же кнопка «Новое окружение» создаёт пустой набор, а «Импорт» сразу создаёт новый набор из переменных другого источника. Если наборов ещё нет, страница предлагает создать первый.

Удаление важно понимать правильно: оно убирает только сам набор из библиотеки. Ни на одном сервере и ни у одного агента ничего не меняется — выгруженные когда-то значения остаются на месте. Учёт того, куда набор выгружался, не ведётся, как и у похожих библиотек (например, навыков и моделей).


Импорт из сервера или агента

Чтобы не набирать переменные заново, их можно забрать из уже существующей записи: выбрать источник — общее окружение сервера или дополнительное окружение агента, — посмотреть его переменные (значения скрыты до раскрытия), отметить нужные и импортировать. То же самое, только в новый набор, делает кнопка «Импорт» на странице.

При импорте переменные сливаются по ключу: если такой ключ в наборе уже есть, его значение заменяется импортированным; новые ключи добавляются в конец, а остальные переменные набора сохраняются. Импорт читает уже сохранённые значения, поэтому работает независимо от того, доступен ли сейчас сервер или агент-источник.

Пример: в наборе есть B=старое и C=3, а из агента импортируются A=1 и B=2. В итоге получится B=2, C=3, A=1 — импортированное значение победило на общем ключе, остальное осталось нетронутым.


Выгрузка на агентов

Выгрузка на выбранных агентов добавляет переменные набора в их дополнительное окружение. Слияние идёт по ключу: значение из набора побеждает, остальные переменные агента сохраняются. Это именно добавление, а не замена: набор никогда не стирает то, чего в нём нет. Записи продуктов (готовых приложений из каталога) в число получателей не входят.

Дальше всё зависит от состояния агента, и каждая строка отчитывается о своём результате отдельно:

  • Работающий агент, у которого значения действительно изменились, пересоздаётся без скачивания образа — это быстрее обычного обновления, и новые значения сразу вступают в силу. В строке отчёта будет сказано, что пересоздание запущено;
  • Остановленный агент просто получает обновлённое окружение, и значения применятся при следующем запуске или пересоздании;
  • Если ничего не изменилось, ничего не пишется и не пересоздаётся — в строке будет сказано, что переменные уже на месте. Повторная выгрузка того же набора безопасна.

Недоступность агента выгрузке не мешает: его сохранённое окружение всё равно обновится, а значения подхватятся при следующем запуске. И если одна строка почему-то сорвалась, остальные всё равно выгрузятся — один сбой не останавливает всю рассылку.


Выгрузка на серверы

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

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


Что важно знать

  • Выгрузка только добавляет. Набор не удаляет ключи, которых в нём нет. Если переменную нужно убрать у агента, это делается на его собственной вкладке «Окружение»;
  • Свой набор важнее общего. Если один и тот же ключ задан в нескольких местах, побеждает то, что ближе к приложению: на вкладке «Окружение» самого агента или приложения, затем в шаблоне развёртывания и только потом в общем окружении сервера. Поэтому общую переменную можно задать для всех сразу и при этом переопределить её у отдельного приложения;
  • Ещё один источник — файл .env в корне проекта. Его значения важнее заданных при развёртывании и подхватываются на лету;
  • Через программный Agent API наборы пока не выгружаются — эта возможность работает из интерфейса;
  • «Окружения» — это про переменные запуска, а не про модели. Прежний раздел с таким названием превратился в каталог моделей и поставщиков; нынешние «Окружения» — про обычные переменные окружения контейнеров.

О том, как задать окружение прямо у агента или сервера, — на страницах Агенты и Серверы; о каталоге моделей — на странице Аккаунты.

← Оглавление документации