Периодически требуется загрузить Disk (ISO) Image, Template, Backups и другое «по быстрому» через веб-интерфейс, но сталкиваешься с проблемой в виде:
Error 400: Parameter verification failed. content: upload content type ‘backup’ not allowed
Если окольными путями, то вариант через WinSCP или консоль, но хотелось всё таки разобраться. В итоге стало ясно, что это политика Proxmox, на её багтреках есть эта проблема и все в курсе. Поэтому пойдём другим путём (в ущерб безопасности как считает Proxmox).
Proxmox версии 3.4
Открываем для редактирования следующий скрипт: /usr/share/perl5/PVE/API2/Storage/Status.pm
Находим там следующий фрагмент:
if ($content eq 'iso') { if ($filename !~ m![^/]+\.[Ii][Ss][Oo]$!) { raise_param_exc({ filename => "missing '.iso' extension" }); } $path = PVE::Storage::get_iso_dir($cfg, $param->{storage}); } elsif ($content eq 'vztmpl') { if ($filename !~ m![^/]+\.tar\.gz$!) { raise_param_exc({ filename => "missing '.tar.gz' extension" }); } $path = PVE::Storage::get_vztmpl_dir($cfg, $param->{storage}); } else { raise_param_exc({ content => "upload content type '$content' not allowed" }); }
По умолчанию доступны для загрузки только ISO образы и шаблоны, при загрузке отличного от этих типов контента получаем сообщение об ошибке. Исправляем на:
if ($content eq 'iso') { if ($filename !~ m![^/]+\.[Ii][Ss][Oo]$!) { raise_param_exc({ filename => "missing '.iso' extension" }); } $path = PVE::Storage::get_iso_dir($cfg, $param->{storage}); } elsif ($content eq 'vztmpl') { if ($filename !~ m![^/]+\.tar\.gz$!) { raise_param_exc({ filename => "missing '.tar .gz' extension" }); } $path = PVE::Storage::get_vztmpl_dir($cfg, $param->{storage}); } elsif ($content eq 'backup') { if ($filename !~ m![^/]+\.vma\.lzo$!) { raise_param_exc({ filename => "missing '.vma.lzo' extension" }); } $path = PVE::Storage::get_backup_dir($cfg, $param->{storage}); } else { raise_param_exc({ content => "upload content type '$content' not allowed" }); }
Добавил проверку на расширение vma.lzo, по аналогии можно добавить любое расширение. Перезагружаем Proxmox, загрузка бэкапов через веб-интерфейс работает. На просторах интернета нашёл вариант, отключающий вообще всю проверку, но сам не проверял:
if ($content eq 'iso') { if ($filename !~ m![^/]+\.[Ii][Ss][Oo]$!) { raise_param_exc({ filename => "missing '.iso' extension" }); } $path = PVE::Storage::get_iso_dir($cfg, $param->{storage}); } elsif ($content eq 'vztmpl') { if ($filename !~ m![^/]+\.tar\.gz$!) { raise_param_exc({ filename => "missing '.tar .gz' extension" }); } $path = PVE::Storage::get_vztmpl_dir($cfg, $param->{storage}); } elsif ($content eq 'backup') { $path = PVE::Storage::get_backup_dir($cfg, $param->{storage}); } else { raise_param_exc({ content => "upload content type '$content' not allowed" }); }