Импорт учетных записей пользователей ldap

Добрый день!
Появилась производственная необходимость автоматизировать создание учетных записей. Проблема заключается в том что при csv импорте учеток требуется обязательная связь с профилем. Может кто сталкивался с такой задачей и есть решения? Возможно есть способ назначить профиль по умолчанию при создании учетки?

А чем не устраивает дефолтный вариант?
https://wiki.openitop.org/doku.php?id=active_directory_integration&s[]=ldap
Importing users from Active Directory

ЗЫ к тому же исключен промежуточный костыль в виде .csv

+1 за

Либо Import data via CLI [iTop Documentation]. Обратите внимание на пример login.csv, помимо учетки там импортируются связи с профилями.

Вот тут описана технология импорта связей “многие-ко-многим”: Import a link set [iTop Documentation].

Спасибо всем за ссылки. Как-то я упустил про импорт из AD в доках)

Как синхронизировать поля например номер телефона, может кто-то сталкивался?

Может @sv16 поможет, вроде у него есть опыт работы с ldap.

не пробовал, но должно работать.
вам надо переопределить класс пользователя itop, добавить в него необходимые параметры которые вы планируете тянуть из АД(телефон, город и т.д.)

  1. в скрипте AD_import_accounts.php , добавьте необходимые атрибуты в загружаемый массив из AD.

// List of attributes to retrieve

$aAttribs = array(
        'samaccountname',
        'sn',
        'givenname',
        'userprincipalname',
        'cn',
        'memberof',
        'mail',
        'phone', // тут указать необходимый атрибут
);
  1. добавьте атрибут в условие создания нового пользователя.

$oPerson = new Person();
$oPerson->Set(‘name’, $aData[‘sn’]);
$oPerson->Set(‘first_name’, $aData[‘givenname’]);
$oPerson->Set(‘email’, $aData[‘mail’]);
$oPerson->Set(‘org_id’, $aConfig[‘default_organization’]);
$oPerson->Set(‘phone’, $aData[‘phone’]);

@Rasul_Islamov Это работает только для новых пользователей, как быть с уже существующими?

Затрудняюсь с ходу ответить на ваш вопрос.

Мы в компании как раз на этапе внедрения, и ваш вопрос будет для нас тоже актуален.
постараюсь на этой неделе разобраться как синхронизировать у созданных пользователей номера телефонов и т.д. из AD.

Из документации:

If a match is found (based on the login name) the script synchronizes the profiles of the iTop user with the AD information. Else the script creates a new iTop user (and if needed also a Person) based on the AD information

То есть скрипт обновляет или создает пользователей.

Как обещал, разобраться как синхронизировать информацию(атрибутов) с AD у созданных уже пользователей (персон в терминологии itop).
Как выяснилось и подтвердилось скрипт AD_import_accounts.php , действительно не производит синхронизацию атрибутов AD, по этому пришлось вносить правки в него.
Что было сделано, по порядку:

  1. Необходимо определить какие атрибуты надо тянуть с AD. я тяну такие данные:

    $aAttribs = array(
    ‘samaccountname’,
    ‘sn’,
    ‘givenname’,
    ‘userprincipalname’,
    ‘cn’,
    ‘memberof’,
    ‘mail’,
    ‘mobile’,
    ‘telephonenumber’,
    ‘ipphone’,
    );

  2. *этот пункт опциональный. Написал функцию которая будет искать пользователя по логину, т.к. мне требовалось поменять email адреса у уже созданных пользователей.

    function GetPersonByLogin($sLogin)
    {
    static $oSearch = null; // OQL Query cache
    $person = null;
    if ($oSearch == null)
    {
    $sOQL = ‘SELECT Person WHERE employee_number = :login’;
    $oSearch = DBObjectSearch::FromOQL($sOQL);
    }
    $oSet = new CMDBObjectSet($oSearch, array(), array(‘login’ => $sLogin));
    switch($oSet->Count())
    {
    case 0:
    $person = null;
    break;

           case 1:
           $person = $oSet->Fetch();
           break;
           
           default:
           $person = ' several matches found: '.$oSet->Count()." persons have same login '$sLogin'";
    

    }
    return $person;
    }

  3. в функцию где производится синхронизация данных пользователей Itop. добавить код

        $oPerson = GetPersonByLogin($sLogin);
             if (is_object($oPerson))
             {
                 $oPerson->Set('employee_number',$sLogin);
                 $oPerson->Set('email', $aData['mail']);
                 $oPerson->Set('phone', $aData['ipphone']);
                 if ($aData['mobile'] == null){
                     $oPerson->Set('mobile_phone', $aData['telephonenumber']);
                 }
                 else
                 {
                     $oPerson->Set('mobile_phone', $aData['mobile']);
                 }
                 if ($oChange != null)
                 {
                     $oPerson->DBUpdateTracked($oChange);
                 }
             }   
    

после этих строк

else if(is_object($oITopUser))
    {
            $sAction = 'synchronized';
  1. запустить скрит
    http://your_itop_server/webservices/AD_import_accounts.php
    убедиться что он не падает, и подтягивает необходимые атрибуты из AD.
    если все ок, то выполнить еще раз
    http://your_itop_server/itop/webservices/AD_import_accounts.php?simulation=0

P.S. если требуется, могу выложить файл.

2 лайка

@Rasul_Islamov Поделитесь полным текстом скрипта. Спасибо.

Что-то я не разобрался как прикреплять файлы к сообщениям на данном форуме.

Могу попросить @vladimir , чтобы он выложил на гит-хабе, если ему будет удобно конечно.

либо дайте почтовый адрес, отправлю на него.

@Rasul_Islamov моя почта hohlovap at gmail.com

отправил на почту.

И мне можно тоже.
Deaddog2013@gmail.com
Спасибо

отправил на почту

спасибо!!!

Нужна ваша помощь.
Не подтягивает атрибуты.
мой код

    // List of attributes to retrieve
$aAttribs = array(
    'samaccountname',
    'sn',
    'givenname',
    'userprincipalname',
    'cn',
    'memberof',
    'mail',
    'mobile',
    'telephonenumber',
    'ipphone',
    'extensionAttribute1',
);




else if ($oPerson == null)
        {
            echo "<p>A new person will be created.</p>";
            $oPerson = new Person();
            $oPerson->Set('name', $aData['sn']);
            $oPerson->Set('first_name', $aData['givenname']);
            $oPerson->Set('email', $aData['mail']);
            $oPerson->Set('employee_number',$sLogin);
            $oPerson->Set('org_id', $aConfig['default_organization']);
            $oPerson->Set('middle_name', $aData['extensionAttribute1']);
            if ($oChange != null)
            {
                $oPerson->DBInsertTracked($oChange);
            }

Поле extensionAttribute1 не подтягивается из AD
’ldap_query’ => ‘(&(objectCategory=user))’,

не уверен, но попробуй все маленькими - extensionattribute1
в пауршелл’е такое прокатывает )