Так как для сохранности, а так же для возможности поделиться шаблонами приходится заниматься экспортом шаблонов из 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); }
Комментариев нет:
Отправить комментарий