Определяем несколько макросов и пытаемся их использовать ровно как заявлено в документации, а именно подставляем их в Item description. Не работает. В last data видим в названиях items наши макросы, ни какой подстановки не происходит.
Посмотрел в код, дошел до функции getMacros() в api/classes/class.cusermacro.php, функция получает на входе список макросов и опции в которых нас интерисуют в данной функции или itemid или triggerid, последнии в свою очередь есть условие поиска списка хостов, а по хостам уже будут искаться макросы.
Короче, делается выборка макросов в массив $hmacros:
затем над этим $hmacros выполняется следующий код:
как не сложно догадаться в $host_macros получается нечто такое:
# host_macros: Array ( [100100000000011] => Array ( [hosts] => Array ( [0] => Array ( [hostid] => 100100000000011 ) ) [hostmacroid] => 100100000000014 [hostid] => 100100000000011 [macro] => {$IFNAME1} [value] => em1 ) )
иначе говоря один рандомный макрос из всех которые есть на хосте
ну и понятное дело подстановка ничего не дает потому что найти надо {$FSMOUNT0}, а ищем мы в списке состоящем только из одного макроса {$IFNAME1}
вот собственно есть у кого мысли или знания на тему того что это за хитрый код перебирающий макросы и "индексирующий" их по hostid?
для опечатки или банальной ошибки приведенный код слишком сложен, зачем то даже ресетится вложенный array() со списком хостов, я даже не понимаю может ли этот вложенный список когда-либо состоять из более чем одного хоста
вдруг кто разбирался в коде frontend, а то боюсь на трекере быстро я ответа не получу, а хотелось бы двигаться дальше
Посмотрел в код, дошел до функции getMacros() в api/classes/class.cusermacro.php, функция получает на входе список макросов и опции в которых нас интерисуют в данной функции или itemid или triggerid, последнии в свою очередь есть условие поиска списка хостов, а по хостам уже будут искаться макросы.
Короче, делается выборка макросов в массив $hmacros:
Code:
# hmacros: Array (
[100100000000033] => Array (
[hosts] => Array ( [0] => Array ( [hostid] => 100100000000011 ) )
[hostmacroid] => 100100000000033
[hostid] => 100100000000011
[macro] => {$FSMOUNT0}
[value] => / )
[100100000000034] => Array (
[hosts] => Array ( [0] => Array ( [hostid] => 100100000000011 ) )
[hostmacroid] => 100100000000034
[hostid] => 100100000000011
[macro] => {$FSMOUNT1}
[value] => /tmp )
...skip...skip...
[100100000000014] => Array (
[hosts] => Array ( [0] => Array ( [hostid] => 100100000000011 ) )
[hostmacroid] => 100100000000014
[hostid] => 100100000000011
[macro] => {$IFNAME1}
[value] => em1 )
)
Code:
$host_macros = array();
foreach($hmacros as $hmacroid => $hmacro){
$h = reset($hmacro['hosts']);
$host_macros[$h['hostid']] = $hmacro;
}
ksort($host_macros);
# host_macros: Array ( [100100000000011] => Array ( [hosts] => Array ( [0] => Array ( [hostid] => 100100000000011 ) ) [hostmacroid] => 100100000000014 [hostid] => 100100000000011 [macro] => {$IFNAME1} [value] => em1 ) )
иначе говоря один рандомный макрос из всех которые есть на хосте
ну и понятное дело подстановка ничего не дает потому что найти надо {$FSMOUNT0}, а ищем мы в списке состоящем только из одного макроса {$IFNAME1}
вот собственно есть у кого мысли или знания на тему того что это за хитрый код перебирающий макросы и "индексирующий" их по hostid?
для опечатки или банальной ошибки приведенный код слишком сложен, зачем то даже ресетится вложенный array() со списком хостов, я даже не понимаю может ли этот вложенный список когда-либо состоять из более чем одного хоста
вдруг кто разбирался в коде frontend, а то боюсь на трекере быстро я ответа не получу, а хотелось бы двигаться дальше
Comment