Добрый день! Возникла необходимость реализовать автоматическое распределение нод по контейнерам, а так же переименовыванием, если у ноды имя == IP (которое образуется в процессе NetworkDiscovery) - пихать эту ноду в "безымянный" контейнер для нод. Если у ноды вписано sysName - переименовываем ноду в этот sysName. На форуме были похожие примеры, часть скрипта я взял с форума.
sub main()
{
if ($node->isSNMP)
{
transport = CreateSNMPTransport($node);
if (transport == null)
{
return -1;
}
location = SNMPGetValue(transport, ".1.3.6.1.2.1.1.6.0"); // sysLocation
sysname = SNMPGetValue(transport, ".1.3.6.1.2.1.1.5.0"); // sysName
//nodename = FindObject($node);
if (sysname != null && sysname !="" && sysname !=" ")
{
RenameObject($node, sysname);
}
if ($node->name ~= "^10.10.|10.20")
{
BindObject(FindObject(15775), $node);
println ("true");
}
else
println ("false");
}
}
15775 - id контейнера куда должны складываться ноды с IP в имени.
Но даже простой пример: (Execute server script)
sub main()
{
BindObject(FindObject(15775),FindObject(13471));
}
Error 14 in line 3: Function or operation argument is not an object
Ладно, я пошёл другим путём и сделал Auto bind на нужном контейнере:
return $node->isSNMP && ($node->name ~= "^10.10.|10.20");
Включил active and passive discovery с фильтром SNMP и address subnet.
Все ноды сразу же нашлись и забиндились в контейнер 15775, но они так же остаются и в Infrastructure Services, хотя там они естественно не нужны.
Так вот, что нужно сделать чтобы в Infrastructure Services они не биндились после Discovery и как мне совместить NetworkDiscovery по subnet + скрипт который будет переименовывать ноды? Или как правильно его назвать чтобы он вызывался при определённых Poll's
Для всех опросов есть hook скрипты: Hook::ConfigurationPoll, Hook::sStatusPoll, и т.д. В данном случае похоже подойдет hook на configuration poll. Еще рекомендую отключить CheckTrustedNodes, иначе могут быть проблемы с поиском объектов.
Не совсем понял как ноды оказались в Infrastructure Services - сам по себе сервер их туда не помещает. В любом случае можно использовать UnbindObject в хуке чтобы убрать ноду оттуда.
Quote from: Victor Kirhenshtein on July 07, 2016, 12:36:51 PM
Для всех опросов есть hook скрипты: Hook::ConfigurationPoll, Hook::sStatusPoll, и т.д. В данном случае похоже подойдет hook на configuration poll. Еще рекомендую отключить CheckTrustedNodes, иначе могут быть проблемы с поиском объектов.
Не совсем понял как ноды оказались в Infrastructure Services - сам по себе сервер их туда не помещает. В любом случае можно использовать UnbindObject в хуке чтобы убрать ноду оттуда.
Спасибо за ответ, в принципе пока уже прошло время - решил проблему вроде бы. При discovery сервер именует ноды в IP, для таких создан специальный контейнер который туда их автоматически биндит. Дальше если у ноды настроено snmp sysName, то Hook::ConfigurationPoll переименовывает эту ноду в sysName и далее сервер кладёт их в конечный контейнер в котором уже правила такого вида:
return $node->name ~= "^Name 33 ";Если у ноды не указан sysName - ничего не делаем с ними.
На сколько костыльно или возможно не правильно я это всё сделал ? :) Может есть какие то замечания? Конечная цель получить полностью автоматическое распределение нод по контейнерам (улицам).
Получается какой то особенный network discovery скрипт мне не нужен?
На мой взгляд совершенно правильно - каждый скрипт заимается своим делом.