Для проведения миграции sip login/password из AuP в elph-keycloak, нужно на AuP сформировать json файл с конфигурациями пользователей и импортировать их в keycloak чат сервера.

При миграции скрипт сопоставляет username пользователя в базе данных elph-chat-server с username из экспортированной конфигурации AuP и заполняет пользователю чатов sip login и sip password конфигурации AuP. При наличии нескольких конфигураций для одного username будет использоваться первая из найденных конфигураций.

Этап 1. Экспорт конфигураций

На хосте с AuP:

1) Зайдите внутрь контейнера:

docker exec -it autoprovision-stable-core-1 bash

2) Запустите оболочку Elixir:

./ecss_aup_core remote --name ecss_aup_core

3) Выполните скрипт экспорта:

"/ecss_aup_db/request/device/find_with_preload" |> EcssAupCore.Subscriber.request({{%{}, %{}, nil}, [:configuration, :device_additional_info]}) |> case do {:ok, devices} -> devices |> Enum.filter(fn %{vendor: vendor, virtual: virtual, type: type, configuration: [_first | _rest], device_additional_info: device_additional_info} when type in [:voip_mobile_phone, :voip_desktop_phone] -> (vendor == "EltexEnt" || virtual) && Enum.any?(device_additional_info, &(&1.key == "device_registration_info")); _other -> false end) |> Enum.group_by(fn %{device_additional_info: device_additional_info} -> Enum.find_value(device_additional_info, fn %{key: "device_registration_info", value: value} -> value |> Jason.decode!() |> Map.get("login_hint", "unknown"); _other -> false end) end, fn %{type: type, configuration: configurations} -> {device, template} = case type do :voip_mobile_phone -> {:ip_phone, EcssAupDeviceAdapter.DeviceAdapter.DaWeb.Templates.Json.Eltex.IpPhone.Config}; :voip_desktop_phone -> {:elph_desktop, EcssAupDeviceAdapter.DeviceAdapter.DaWeb.Templates.Json.Eltex.ElphDesktop.Config} end; %{device: device, configuration: configurations |> Enum.max_by(& &1.updated_at, DateTime) |> Kernel.get_in([Access.key(:value, %{}), Access.key("configuration", %{}), Access.key("prop_map", %{})]) |> template.render()} end); _other -> %{} end |> Jason.encode!(pretty: true) |> then(&File.write!("elph_users.json", &1))

4) Выйдите из оболочки Elixir и контейнера;

5) Скопируйте файл конфигураций из контейнера:

docker cp autoprovision-stable-core-1:/usr/lib/ecss/ecss-aup-core/bin/elph_users.json ./elph_users.json

После выполнения указанных шагов в директории создастся файл elph_users.json с данными пользователей.

Этап 2. Импорт конфигураций

На хосте с Elph Chat:

Поместите файл elph_users.json на чат сервер в директорию ~/elph-chat-server/stable/configs.

Перезапустите Chat Server:

./ecss-elph-chat-server.sh up

Посмотреть прогресс импорта конфигураций можно в логах контейнера elph-keycloak-configurator командой:

docker logs elph-keycloak-configurator -f

Пример успешного выполнения импорта:

[2025-11-05 08:27:38.752 +0000] INFO: Начинаем обновление sip login & password для пользователей
[2025-11-05 08:27:54.752 +0000] INFO: Обновление sip login & password для пользователей завершено ✅

После выполнения импорта необходимо убрать файл elph_users.json из ~/elph-chat-server/stable/configs, чтобы при перезапуске Chat Server не выполнялся повторный импорт.