VMWare - Ошибка 500 с сервера при попытке загрузки на виртуальную машину

Скажем, у меня есть 2 "физических" ESX, которые оба возглавляются vSphere Server. Я пытаюсь запустить скрипт, который загружает файл на указанную виртуальную машину. В общем, я использую скрипт VIFS.pl, предоставленный сообществом VMWare, документация которого доступна здесь: http://pubs.vmware.com/vsphere-51/index.jsp?topic=%2Fcom.vmware.vcli.ref.doc%2Fvifs.html а источник кода находится здесь: http://communities.vmware.com/docs/DOC-10774.

Исходный код довольно прост, он просто использует http_put_file() функция от VIExt модуль, и эта функция фактически не работает для меня, так как я получаю сообщение об ошибке 500, журнал которого находится здесь (я получил его путем печати $resp->as_string()):

функция do_put()

sub do_put {
   my ($local_source, $remote_target, $datacenter) = @_;
   my ($mode, $dc, $ds, $filepath) = VIExt::parse_remote_path($remote_target);
   # bug 322577
   if (defined $local_source  and -d $local_source) {
      VIExt::fail("Error: File to be uploaded cannot be a folder.");
   }

   # bug 266936
   unless (-e $local_source) {
      VIExt::fail("Error: File $local_source does not exist.");
   }

   my $resp = VIExt::http_put_file($mode, $local_source, $filepath, $ds, $datacenter);
   # bug 301206
   print $resp->as_string();   # => Trace
   if ($resp && $resp->is_success) {
      print "Uploaded file $local_source to $filepath successfully.\n";
   } else {
      print "Failed to upload !";
   }
}

** Трассировка **

# vSphere server : @192.168.20.2
# Datastore : nfs
# Datacenter : dc
# Target VM name : target_vm
# Target filename : VM.txt

>> perl vifs --server 192.168.20.2 --username root  --password root -p "/tmp/foo.txt" "[nfs] target_vm/VM.txt" -Z "dc"

HTTP/1.1 500 Internal Server Error
Connection: close
Date: Thu, 6 Dec 2012 10:32:30 GMT
Content-Length: 0
Content-Type: text; charset=plain
Client-Date: Thu, 06 Dec 2012 11:32:53 GMT
Client-Peer: 192.168.20.2:443
Client-Response-Num: 9
Client-SSL-Cert-Issuer: /C=US/ST=California/L=Palo Alto/O=VMware, Inc./CN=localhost.localdom CA 26fc6343/emailAddress=ssl-certificates@vmware.com
Client-SSL-Cert-Subject: /C=US/ST=California/L=Palo Alto/O=VMware, Inc./OU=VMware vCenter Server Certificate/emailAddress=ssl-certificates@vmware.com/CN=localhost.localdom/unstructuredName=1352217590,031bd875,564d7761726520496e632e
Client-SSL-Cipher: AES256-SHA
Client-SSL-Socket-Class: IO::Socket::SSL
Client-SSL-Warning: Peer certificate not verified

Failed to upload !

Обратите внимание, что я проверил значение всех переменных, переданных в качестве аргумента в http_put_file функция, они все правильные.

Если бы кто-то когда-либо испытывал эту проблему, был бы очень признателен...

1 ответ

Решение

Я знаю немного VMware, но по общему признанию никогда не пытался сделать то, что вы делаете здесь, но у меня есть мысль поделиться с вами.

Если я не ошибаюсь, ваш физический хост ESX (192.168.20.2) пытается поместить файл на вашу виртуальную машину (target_vm). Так как эта связь происходит через порт 443

    Client-Peer: 192.168.20.2:443

Я предполагаю, что сертификаты VMware, которые, возможно, находятся на вашей виртуальной машине, не соответствуют домену, в который эти виртуальные машины были добавлены (или они не добавлены в домен). Сертификаты выглядят как "localhost.localdom":

    CN=localhost.localdom

Если в вашем домене уже нет центра сертификации, возможно, вы сможете быстро создать самоподписанный сертификат для своего домена и поместить его в соответствующее хранилище сертификатов. Вы также можете попробовать некоторые из этих других вызовов API, таких как:

    --listds | -S

Может быть, им не потребуется SSL для подключения, так как он не работает по HTTPS? Это может подтвердить, что сертификаты действительно вызывают ваши проблемы?

Другие вопросы по тегам