Для проведения миграции sip login/password из AuP в elph-keycloak, нужно на AuP сформировать json файл с конфигурациями пользователей и импортировать их в keycloak чат сервера.
При миграции скрипт сопоставляет username пользователя в базе данных elph-chat-server с username из экспортированной конфигурации AuP и заполняет пользователю чатов sip login и sip password конфигурации AuP. При наличии нескольких конфигураций для одного username будет использоваться первая из найденных конфигураций. |
На хосте с 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 с данными пользователей.
На хосте с 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 не выполнялся повторный импорт. |