В настоящее время я возился с проектом с использованием ONTAPI (что-то вроде мониторинга статистики производительности).
Я хочу воспроизвести информацию из 'df' и 'df -s'.
Пока все идет хорошо, потому что api 'volume-list-info', похоже, содержит большую часть нужной мне информации. Не хватает только одного - сколько из «резерва моментальных снимков» я на самом деле использую.
Я не могу найти его ни в том, ни в счетчиках «снимков». В идеале я мог бы сделать это, не выполняя вычислений по объему, потому что одна из вещей, на которые я надеюсь, - это поддержка легкого прокси-клиента, который «просто» извлекает исходный XML для обработки на сервере.
Или есть способ рассчитать это по размеру / использованному / доступному в информации о том-списке?
Решив эту проблему, и благодаря отличный список рассылки "тостеров" (Архив) - мое возможное решение состояло в том, чтобы использовать system-cli
Вызов API.
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Twig;
use LWP;
my $twig = XML::Twig->new( 'pretty_print' => 'indented' );
$twig->set_root(
XML::Twig::Elt->new(
'netapp',
{ version => 1.7,
vfiler => "somevfiler",
xmlns => "http://www.netapp.com/filer/admin",
},
)
);
my $api_req = $twig->root->insert_new_elt('system-cli');
my $args = $api_req->insert_new_elt('args');
$args->insert_new_elt( 'last_child', 'arg', 'df' );
$args->insert_new_elt( 'last_child', 'arg', '-k' );
$twig->set_doctype('netapp SYSTEM "file:/etc/netapp_filer.dtd"');
$twig->set_xml_version("1.0");
$twig->set_encoding('utf-8');
$twig->print;
exit;
my $user_agent = LWP::UserAgent->new(
'ssl_opts' => {
'verify_hostname' => 0,
'SSL_version' => 'SSLv3',
}
);
my $request =
HTTP::Request->new( 'POST' =>
'https://myfilername/servlets/netapp.servlets.admin.XMLrequest_filer'
);
$request->authorization_basic( 'username_here', 'password_here' );
$request->content( $twig->sprint );
my $results = $user_agent->request($request);
if ( not $results->is_success ) {
print "Error: ", $results->status_line;
exit;
}
my $results_xml = XML::Twig->new( 'pretty_print' => 'indented_a' );
$results_xml->parse( $results->content );
$results_xml->print;
Это работает, чтобы зафиксировать результаты df -k
через вызов API. Но есть только один недостаток - вы получаете только простой текстовый blob-объект вывода команды, который вам все равно придется разбирать самостоятельно, так что вы действительно не получите многого. ssh hostname df -k
- просто другой метод аутентификации и выборки, но это действительно то, что мне нужно.
Также следует отметить - это не используйте NetApp SDK. Вы можете считать это преимуществом или нет. Лично я нахожу XML::Twig
и LWP
неплохо работать - YMMV.
В любом случае - другие предложения включают:
ssh hostname df -k
как вы обнаружили, system-cli может быть единственным способом получить вывод df.
поскольку «пространство, используемое для снимков», может превышать резерв снимков, я предпочитаю другую меру. API snapshot-volume-info возвращает доступный размер (сколько еще места вы можете использовать в томе, прежде чем вы потеряете возможность делать больше снимков).
чтобы собрать другую статистику пространства для flexvol, я бы использовал API-интерфейсы volume-space-get-iter (volume-space-list-info-iter в 7 м) или volume-footprint-get-iter (vol-footprint-info в 7 м) .
загрузка SDK NetApp Manageability SDK включает документацию; упомянутые мной вызовы находятся, например, ниже:
doc / ontapi / ontapi_1.20 / Vserver / snapshot / index.html # snapshot-volume-info doc / ontapi / ontapi_1.20 / Vserver / volume / index.html # volume-space-get-iter doc / ontapi / ontapi_1. 20 / Vserver / volume / index.html # volume-footprint-get-iter
(более старая версия документа доступна по адресу http://community.netapp.com/t5/Software-Development-Kit-SDK-and-API-Discussions/Broken-link-for-SDK-API-Doc/m-p/97275 )