instance discovery -> script

Started by wonderboy, September 26, 2016, 05:59:42 PM

Previous topic - Next topic

wonderboy

Можно ли сразу из скрипта (который используется в instance discovery) возвращать массив instance'ов вместе с именами, по аналогии как в instance discovery filter строка: return %(true, $1, i->name); ? Есть желание все сделать в основном скрипте, а фильтр не использовать, так как получается дублирование кода.

Victor Kirhenshtein

Можно как метод instance discovery выбрать скрипт, а он уже вернет массив instance'ов.

wonderboy

Видимо криво объяснил. У меня итак сейчас в instance discovery стоит script, который возвращает массив ifIndex'ов, а дальше приходится использовать instance discovery filter чисто для того, чтобы достать еще и список наименований для этих индексов, чтобы dci красиво проименовать используя instance-name. Я подумал, а почему бы в основном скрипте сразу с массивом ifIndex'ов не возвращать и наименования, чтобы не делать двойную работу. Но как из основного скрипта вернуть массив индексов и массив имен я так и не нашел. return %(ifIndexes, ifNames) не работает :)

ps Благодарю за все ответы :)

Victor Kirhenshtein

Сейчас так сделать нельзя, но идея хорошая, поэтому добавил :) В аттаче патч на 2.0.6 - если собираете из исходников, то можно пересобрать. Ну и изменение войдет в 2.1-М1 и 2.0.7 (если будем делать 2.0.7).
После этого изменения instance discovery script может вернуть hash map вместо массива - в таком случае ключи будут instance, а значения - instance name. Например:


instances = %{};  // создаем пустой hash map
instances[1] = "eth1";
instances[2] = "eth2";
instances[3] = "eth3";
return instances;


Если все ключи известны заранее, то можно даже так:


return %{ 1:"eth1", 2:"eth2", 3:"eth3" };


Ключ - это строка, не обязательно число. Так тоже правильно:


instances = %{};  // создаем пустой hash map
instances["eth1"] = "Ethernet 1";
instances["eth2"] = "Ethernet 2";
instances["eth3"] = "Ethernet 3";
return instances;


wonderboy