Для того, чтобы импортировать данные из ECSS-MySQL:

1. Отредактируйте файл settings.override.yaml:

<nano/vim/mcedit> address-book/stable/settings.override.yaml

Заполните значения полей в соответствии с вашей инфраструктурой и соблюдая структуру YAML:

sources:  #Здесь задаются источники откуда брать данные
  mysql:
    - host: "mysql:domain:host"
      port: 3306
      database: "ecss_address_book"
      username: "service_address_book"
      password: "service_address_book"
      base_ou: "Имя компании"
      # domain: "example.domain" #Указывается для импорта с определенного домена
      source: "mysql:domain:host"


# ============================
# ОБЩИЕ НАСТРОЙКИ
# ============================

additional_import_settings:
  common:
    include_incompletely_filled_contacts: false # | true   - если выключена, при импорте будут отброшены все контакты, у которых отсутствуют обязательные поля

    full_name_parsing:
      enabled: false
      pattern: "LFM" # L - last_name, M - middle_name, F - first_name
      fallback_enabled: true # если не удалось распарсить - класть всё в fallback_field
      fallback_field: "middle_name" # middle_name | first_name | last_name; по умолчанию middle_name

  mysql:
    ignore_data: [""]
    select_group: false

sources: mysql:

    username — логин;
    password — пароль;
    host/source — хост или доменное имя сервера;
    database — имя БД на mysql с данными для адресной книги;
    port — порт;
    base_ou — название базовой организационной единицы (OU — Organizational Unit) верхнего уровня.

Важно

Начиная с версии Softswitch (SSW) 3.14.15, добавилось поле «group».

Для корректной работы с предыдущими версиями, необходимо в настройках settings.override.yaml указать настройку:

additional_import_settings:
  mysql:
    select_group: false

Для импорта из нескольких источников перечислите несколько источников mysql:

sources:  #Здесь задаются источники откуда брать данные
   mysql:
    - host: "mysql:domain:host"
      port: 3306
      database: "ecss_address_book"
      username: "service_address_book"
      password: "service_address_book"
      base_ou: "Имя компании"
      # domain: "example.domain"  #Указывается для импорта с определенного домена
      source: "mysql:domain:host" 
    
    - host: "mysql:domain:host2"
      port: 3306
      database: "ecss_address_book"
      username: "service_address_book"
      password: "service_address_book"
      base_ou: "Имя компании"
      # domain: "example.domain"
      source: "mysql:domain:host2"  


2. При необходимости поменяйте настройки маппинга, указав их в секции mappers:

# ============================
# КОНФИГУРАЦИЯ МАППИНГА
# ============================

# Конфигурация мапперов для трансформации данных из внешних источников в структуру контакта Address Book
#
# Доступные поля контакта: domain, external_id, birthday, common_name, first_name,
# last_name, middle_name, nickname, org, title, full_name, position, gender, avatar, addresses, emails, messengers,
# phones, additional_info
#
# Структура маппера:
#   <источник>:
#     <поле_контакта>: [<путь_к_данным_в_источнике>, <тип_данных>]
#     <поле_контакта>: [[<вложенный_путь>, <тип_данных>]]
#     additional_info:
#       <подполе>: [<путь_к_данным>, <тип_данных>]
#
# Поддерживаемые типы данных:
#   - string: строковые значения
#   - url: тип аватара; означает, что аватар хранится в виде пути
#   - jpeg: тип аватара; бинарные данные изображений
#   - email: адреса электронной почты
#   - phone: номера телефонов
#   - date: даты
#
# Особенности:
#   - Поле 'kind' автоматически устанавливается сервисом ('contact' или 'group')
#   - Поле 'additional_info' поддерживает только одноуровневую вложенность
#   - Вложенные структуры в 'additional_info' отбрасываются с записью в лог
#   - Для полей emails, phones, avatar поддерживается множественное отображение

mappers:
  mysql:
    avatar: ["avatar_path", "url"]
    emails: ["email", ["email", "work"]]
    external_id: ["external_id", "string"]
    first_name: ["first_name", "string"]
    full_name: ["full_name", "string"]
    last_name: ["last_name", "string"]
    middle_name: ["middle_name", "string"]
    org: ["org", "string"]
    phones: ["phone_numbers", ["phone", "work"]]
    title: ["title", "string"]
    domain: ["domain", "string"]
    additional_info:
      group: ["contact_group", "string"]


3. Подключитесь к docker-контейнеру сервиса Address Book:

docker exec -it address-book-stable-server-1 bash

4. Подключитесь к Erlang node по имени:

./ecss_address_book remote --name ecss_address_book

5. Выполните команду для запуска миграции из MySQL:

EcssAddressBookCore.Actions.MySQLImport.import()

Для базовой проверки полноты миграции можно обратиться напрямую к БД с запросом количества контактов:

EcssAddressBookDb.Actions.Contacts.count(%{})
{:ok, 1557}

Число после :ok должно совпадать с количеством контактов MySQL.

Для выхода из iex нажмите Ctrl+C дважды. Затем введите exit. 

  • Нет меток