Добрый день!
Появилась производственная необходимость автоматизировать создание учетных записей. Проблема заключается в том что при 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, добавить в него необходимые параметры которые вы планируете тянуть из АД(телефон, город и т.д.)
- в скрипте AD_import_accounts.php , добавьте необходимые атрибуты в загружаемый массив из AD.
// List of attributes to retrieve
$aAttribs = array(
'samaccountname',
'sn',
'givenname',
'userprincipalname',
'cn',
'memberof',
'mail',
'phone', // тут указать необходимый атрибут
);
- добавьте атрибут в условие создания нового пользователя.
$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, по этому пришлось вносить правки в него.
Что было сделано, по порядку:
-
Необходимо определить какие атрибуты надо тянуть с AD. я тяну такие данные:
$aAttribs = array(
‘samaccountname’,
‘sn’,
‘givenname’,
‘userprincipalname’,
‘cn’,
‘memberof’,
‘mail’,
‘mobile’,
‘telephonenumber’,
‘ipphone’,
); -
*этот пункт опциональный. Написал функцию которая будет искать пользователя по логину, т.к. мне требовалось поменять 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;
} -
в функцию где производится синхронизация данных пользователей 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';
- запустить скрит
http://your_itop_server/webservices/AD_import_accounts.php
убедиться что он не падает, и подтягивает необходимые атрибуты из AD.
если все ок, то выполнить еще раз
http://your_itop_server/itop/webservices/AD_import_accounts.php?simulation=0
P.S. если требуется, могу выложить файл.
@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
в пауршелл’е такое прокатывает )