Доброго времени суток. Мне нужно выгружать список хостов в определенной группе в формате: хост, ip, группа.
Написал вот такой скрипт на перл:
Вывод примерно такой:
Проблема вот в чём, я не совсем представляю, как в запросе host.get сделать фильтр по группе, если делать что-то вроде:
то не работает.
Так же, если не использовать модуль Data:
umper, а выводить через массив:
Я не могу вывести группу, print $host->{groups}->{name} не работает.
Ещё, кто-то может подсказать, каким запросом проще всего получить ip адрес?
Спасибо.
P.S. С Perl не особо дружу, Zabbix 2.4.
Написал вот такой скрипт на перл:
Code:
#!/usr/bin/env perl
use utf8;
use strict;
use warnings;
use JSON::RPC::Client;
use Data::Dumper;
my ($aid, $res);
my $url = 'http://192.168.0.1/api_jsonrpc.php';
my $user = 'test';
my $pass = 'test';
my $json = {
jsonrpc => '2.0',
method => 'user.login',
params => {
user => $user,
password => $pass,
},
id => 1,
};
my $z = JSON::RPC::Client->new;
$res = $z->call($url, $json);
die "Could not authenticate.\n" unless ($res->content->{result});
$aid = $res->content->{'result'};
print "Authentication successful, Auth ID: $aid\n\n";
$json = {
jsonrpc => "2.0",
method => "host.get",
params => {
output => ["hostid", "host", "name", "status"],
selectGroups => "extend",
sortfield => "host",
},
id => 2,
auth => "$aid",
};
$res = $z->call($url, $json);
print Dumper($res);
#die "$$json{method} failed\n" unless ($res->content->{result});
#foreach my $host (@{$res->content->{result}}) {
#print "$host->{host}, $host->{status} \n";
#};
Code:
$VAR1 = bless( {
'version' => 0,
'content' => {
'jsonrpc' => '2.0',
'id' => 2,
'result' => [
{
'status' => '0',
'groups' => [
{
'flags' => '0',
'name' => 'TEST',
'groupid' => '43',
'internal' => '0'
}
],
'name' => 'test',
'hostid' => '19683',
'host' => 'test'
},
{
'status' => '0',
'groups' => [
{
'flags' => '0',
'name' => 'TEST',
'groupid' => '43',
'internal' => '0'
}
],
'name' => 'test-huawei',
'hostid' => '19619',
'host' => 'test-huawei'
},
{
'status' => '0',
'groups' => [
{
'flags' => '0',
'name' => 'TEST',
'groupid' => '43',
'internal' => '0'
}
],
'name' => 'test-huawei-int-sw',
'hostid' => '19623',
'host' => 'test-huawei-int-sw'
}
]
},
Code:
filter => {groups => name => "TEST"}
Так же, если не использовать модуль Data:
umper, а выводить через массив:Code:
$res = $z->call($url, $json);
die "$$json{method} failed\n" unless ($res->content->{result});
foreach my $host (@{$res->content->{result}}) {
print "$host->{host}, $host->{status} \n";
};
Ещё, кто-то может подсказать, каким запросом проще всего получить ip адрес?
Спасибо.
P.S. С Perl не особо дружу, Zabbix 2.4.
Comment