понедельник, 1 августа 2016 г.

Perl скрипт для экспорта всех шаблонов Zabbix в индивидуальные XML файлы


Так как для сохранности, а так же для возможности поделиться шаблонами приходится заниматься экспортом шаблонов из Zabbix. А тем более связанных. Экспортировать из Web интерфейса становится не удобно. Можно использовать следующий способ.


  • Создадим файл скрипта в нужной нам директории и вставим в него содержимое описанное ниже.
  • Поправим $url, $userid, $password и если потребуется складывать куда-то в конкретное место то $destDir.
  • Выполним скрипт "perl script.file.pl"
  • Можем копировать выгруженные шаблоны.


Perl script
#!/usr/bin/perl -w
use strict;
use warnings;
use JSON::RPC::Legacy::Client;
use XML::LibXML;

my $url      = 'http://zabbix.SRV/api_jsonrpc.php'; # URL to Zabbix
my $userid   = "USER_NAME";                         # Zabbix API User ID
my $password = "USER_PASSWORD";                     # Zabbix API User Password
my $destDir  = "./templates";

my $client = new JSON::RPC::Legacy::Client;

my $authID = authenticate();
my $response = listTemplates();

# Check if response was successful
die "template.get failed\n" unless $response->content->{result};

unless (-d "$destDir") {
  mkdir "$destDir" or die "$!";
}

foreach my $host (@{$response->content->{result}}) {
  # print "Template: ".$host->{host}."\n";
  # print "TemplateID: ".$host->{templateid}."\n";
  getTemplates($host->{templateid}, $host->{host});
}

exit(0);

# Authenticate
sub authenticate{
  my $json = {
    jsonrpc => "2.0",
    method => "user.login",
    params => {
      user => "$userid",
      password => "$password"
    },
    id => 1
  };

  $response = $client->call($url, $json);
    die "Authentication failed\n" unless $response->content->{'result'};

  return $response->content->{'result'};
}

# Get list of all Templates
sub listTemplates{
  my $json = {
    jsonrpc => '2.0',
    method  => 'template.get',
    params  =>  {
      output => "extend",
     # filter => {
     #   host => "t.app.strongmail"
     #   }
    },
    id   => 2,
    auth => "$authID",
  };
  return $client->call($url, $json);
}

# Get Templates and save to individual XML files
sub getTemplates{
  my $templateid = shift;
  my $templatename = shift;

  print "TemplateID: $templateid\n";
  print "templatename: $templatename\n";

  my $json = {
    jsonrpc => '2.0',
    method  => 'configuration.export',
    params  =>  {
        options => {
            templates => ["$templateid"]
        },
        format => "xml"
    },
    id   => 7,
    auth => "$authID",
  };

  $response = $client->call($url, $json);
    die "Authentication failed\n" unless $response->content->{'result'};

  my $doc = XML::LibXML->load_xml(string => $response->content->{'result'}, { no_blanks => 1 });
  my $output = $doc->toString(1);

  open (MYFILE, ">", "$destDir/$templatename.xml") or die "$!";
  print MYFILE $output;
  close (MYFILE);
}

Комментариев нет:

Отправить комментарий