bobpxp 发表于 2018-9-1 07:04:46

NetApp SDK Perl 小测试

  最近在看NetApp的SDK,想做Quota快满时发E-mail给NetApp管理员的这个功能。当然,这个功能只能在目前的autosupport里有体现,智能点的就需要自己来了。本人是Perl初哥,以下代码不是最佳的,只做参考而已。
  环境:
  NetApp SDK 4.0 / OnTap 7.3.3 /Perl 5.8
  大概的流程
  1. 可以使用SDK里相关的API可以提取 Quota信息,导出的信息是XML格式。
  Example:
  perl apitest.pl    quota-report volume
  2. 使用Perl读取XML文件在此我们用了 XML::Simple 模块来读取XML
  Example:
  use XML::Simple;
  $xml = XMLin( 'quotafile.xml', ForceArray =>1);
  3. 我们需要的tree,disk-limit,disk-used 这三部分信息。打印下看看
  Example:
  @quota = @{$xml->{quotas}->->{quota}};
  $quotal = @quota;
  for ($i=0; $i{quotas}->->{quota}->[$i]->{'tree'}->;
  $qlimit = $xml->{quotas}->->{quota}->[$i]->{'disk-limit'}->;
  $qused = $xml->{quotas}->->{quota}->[$i]->{'disk-used'}->;
  if ($qused ne "0" ) {
  print $qtree,"\n",$qlimit,"\n",$qused,"\n" ;
  }
  }
  4. 比较disk-used/disk-limit的比例,打印出大于 0.8的来看看,perl很智能,数值字符貌似可以混着来。
  Exmaple:
  @quota = @{$xml->{quotas}->->{quota}};
  $quotal = @quota;
  for ($i=0; $i{quotas}->->{quota}->[$i]->{'tree'}->;
  $qlimit = $xml->{quotas}->->{quota}->[$i]->{'disk-limit'}->;
  $qused = $xml->{quotas}->->{quota}->[$i]->{'disk-used'}->;
  if ($qused ne "0" ) {
  if ($qused/$qlimit >= "0.8"){
  print $qtree,"\n",$qlimit,"\n",$qused,"\n" ;
  }
  }
  }
  5. 写个E-mail的sub,可以在判定条件成立时发邮件出去
  Example:
  use Net::SMTP;
  sub send_mail {
  $emailbody= "Dear user, the disk quota ofused ratio high than 80%, please check";
  $smtp = Net::SMTP->new("$mailserver");
  $smtp->mail("$fromname");
  $smtp->to($User);
  $smtp->bcc($bbcname);
  $smtp->data();
  $smtp->datasend("Subject: Disk Space almost full, Please check\n");
  $smtp->datasend("\n");
  $smtp->datasend("$emailbody \n");
  $smtp->dataend();
  $smtp->quit;
  }
  5条写完,基本就是这样了。 因为quota里看不到具体的用户,如果要发e-mail给最终用户则还要再进一步。等我有空再更新了。

页: [1]
查看完整版本: NetApp SDK Perl 小测试