Ad Widget

Collapse

Помощь c perl скриптом для API

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • tuban
    Senior Member
    Zabbix Certified Specialist
    • Sep 2012
    • 286

    #1

    Помощь c perl скриптом для API

    Доброго времени суток. Мне нужно выгружать список хостов в определенной группе в формате: хост, ip, группа.

    Написал вот такой скрипт на перл:
    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'
                                                  }
                                                ]
                                  },
    Проблема вот в чём, я не совсем представляю, как в запросе host.get сделать фильтр по группе, если делать что-то вроде:
    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";
    };
    Я не могу вывести группу, print $host->{groups}->{name} не работает.
    Ещё, кто-то может подсказать, каким запросом проще всего получить ip адрес?
    Спасибо.
    P.S. С Perl не особо дружу, Zabbix 2.4.
    Last edited by tuban; 01-04-2016, 06:16.
  • tuban
    Senior Member
    Zabbix Certified Specialist
    • Sep 2012
    • 286

    #2
    В общем, чтобы получить ip можно использовать такой запрос:
    Code:
    $json = {
       jsonrpc => "2.0",
       method  => "host.get",
       params  => {
          output          => ["hostid", "host", "name", "status"],
          selectGroups => "extend",
          selectInerfaces => ["ip"],
          sortfield       => "host",
       },
       id   => 2,
       auth => "$aid",
    };
    А вот вывести это нормально не выходит...

    Comment

    • tuban
      Senior Member
      Zabbix Certified Specialist
      • Sep 2012
      • 286

      #3
      Вроде все получилось, остался вопрос как сделать фильтр по группе хостов

      Comment

      • DRVTiny
        Senior Member
        • Sep 2011
        • 162

        #4
        Параметр groupids не подходит разве?

        Comment

        Working...