Предупреждение в vSphere CLI: использование неинициализированного значения $hostname

Я использую vSphere CLI 6.5.0 для сброса виртуальной машины из сценария Perl. Это в контексте (проприетарного) плагина STONITH для Pacemaker.

Сразу после STONITH, journalctl -u pacemaker сообщает о предупреждении в vmcontrol.pl, который принадлежит vSphere CLI. Предупреждение сообщается fence_legacy, который принадлежит Pacemaker.

Use of uninitialized value $hostname in concatenation (.) or string at 
/opt/vmware-vsphere-cli-distrib/apps/vm/vmcontrol.pl line 168.

Ошибка возникает при вызове UTIL::trace в данном контексте:

sub reset_vm {
   foreach (@$vm_views) {
      my $mor_host = $_->runtime->host;
      my $hostname = Vim::get_view(mo_ref => $mor_host)->name;
      eval {
        $_->ResetVM();
        Util::trace(0, "\nvirtual machine '" . $_->name . "' under host".
                                  " $hostname reset successfully ");
      };

Мне интересно, является ли это функция или ошибка. Может ли быть так Vim::get_view связывается с VMware в то время, когда имя хоста не может быть сообщено (и, следовательно, $hostname невозможно инициализировать), потому что виртуальная машина перезагружается?

Это звучит маловероятно (например, потому что призыв к ResetVM происходит после назначения $hostname), но я подозреваю, что происходит что-то подобное, и в этом случае предупреждение может быть проигнорировано. Я также подозреваю, что проблема связана только с vSphere CLI (то есть не вызвана его использованием внутри стека Pacemaker).

1 ответ

Можете ли вы попробовать это вместо этого.

sub reset_vm {
   foreach $mor_host(@$vm_views) {
     my $hostname = Vim::get_view(mo_ref => $mor_host->runtime->host, properties => );
      eval {
        $_->ResetVM();
        Util::trace(0, "\nvirtual machine '" . $_->name . "' under host".
                                " $hostname reset successfully ");
      };
Другие вопросы по тегам