Снова столкнулся с тем, что в достаточно широко распространенном программном продукте не работает из коробки та функция, которая по логике должна бы работать.
На этот раз речь пойдет о среде виртуализации Proxmox и загрузке бэкапов виртуальных машин через веб-интерфейс. Итак, имеем следующие входные данные: на машине свежеустановленный Proxmox версии 3.2, на нем развернуто помимо хранилища Local еще и хранилище Backup с типом контента ISO, Backups, Templates. Задача - перенести бэкапы виртуальных машин с другого гипервизора. Естественно, руки потянулись для этой цели использовать веб-интерфейс: выбираем наше хранилище Backup, жмем Upload, выбираем тип контента VZDump backup file, выбираем нужный файл, жмем Upload, смотрим на проценты загрузки и по итогу получаем сообщение об ошибке:
Error 400: Parameter verification failed.
content: upload content type 'backup' not allowed
Собственно, я сразу не стал разбираться, почему так, и воспользовался консолью и самбой для решения этой задачи. Примерно то же самое(пойти обходным путем) рекомендует баг-трекер Proxmox'а(use scp to copy the file to the right directory). Но обсуждение этой проблемы вывело меня на верное решение.
Открываем для редактирования следующий скрипт: /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
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" });
}
}
$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, поскольку все мои бэкапы были сделаны именно в этом формате, но при желании можно добавить и vma.gz, а можно и вообще отказаться от проверки на расширение.
Перезагружаем Proxmox - и таки да, загрузка бэкапов через веб-интерфейс работает.
Хотелось бы понять как такой формат загружать
ОтветитьУдалитьvzdump-openvz-102-2015.tar.lzo
Для такие случаев вообще можно отказаться от проверки расширения файла, т.е. скрипт 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});
} elsif ($content eq 'backup') {
$path = PVE::Storage::get_backup_dir($cfg, $param->{storage});
} else {
raise_param_exc({ content => "upload content type '$content' not allowed" });
}
А посвежее есть код на proxmox 5
ОтветитьУдалитьПод 5 проксмоксом с такой задачей не сталкивался, но если вопрос еще актуален, напишите, я проверю и, если получится, сделаю решение.
УдалитьBorgata Hotel Casino & Spa - MandaraHospitalityWeb
ОтветитьУдалитьFind out how to order food and drink at Borgata Hotel Casino & Spa 정읍 출장안마 in 동두천 출장안마 MandaraHospitalityWeb. Order, pickup, and more 김천 출장안마 from our 김포 출장샵 menu! 과천 출장안마