and install bash completion helpers.
%.1.pod: %
podselect $*>$@
-qm.1.pod: qm PVE/QemuServer.pm
+qm.1.pod: PVE/CLI/qm.pm PVE/QemuServer.pm
perl -I. -T -e "use PVE::CLI::qm; PVE::CLI::qm->generate_pod_manpage();" >$@.tmp
mv $@.tmp $@
perl -I. -T -e "use PVE::CLI::qm; PVE::CLI::qm->generate_bash_completions();" >$@.tmp
mv $@.tmp $@
-qmrestore.1.pod: qmrestore
- perl -I. ./qmrestore printmanpod >$@
+qmrestore.1.pod: PVE/CLI/qmrestore.pm
+ perl -I. -T -e "use PVE::CLI::qmrestore; PVE::CLI::qmrestore->generate_pod_manpage();" >$@.tmp
+ mv $@.tmp $@
+
+qmrestore.bash-completion:
+ perl -I. -T -e "use PVE::CLI::qmrestore; PVE::CLI::qmrestore->generate_bash_completions();" >$@.tmp
+ mv $@.tmp $@
vm.conf.5.pod: gen-vmconf-pod.pl PVE/QemuServer.pm
perl -I. ./gen-vmconf-pod.pl >$@
-PKGSOURCES=qm qm.1.gz qm.1.pod qmrestore qmrestore.1.pod qmrestore.1.gz qmextract sparsecp vmtar control vm.conf.5.pod vm.conf.5.gz qm.bash-completion
+PKGSOURCES=qm qm.1.gz qm.1.pod qmrestore qmrestore.1.pod qmrestore.1.gz qmextract sparsecp vmtar control vm.conf.5.pod vm.conf.5.gz qm.bash-completion qmrestore.bash-completion
.PHONY: install
install: ${PKGSOURCES}
install -m 0644 pve-usb.cfg ${DESTDIR}/usr/share/${PACKAGE}
install -m 0644 pve-q35.cfg ${DESTDIR}/usr/share/${PACKAGE}
install -m 0644 -D qm.bash-completion ${DESTDIR}/${BASHCOMPLDIR}/qm
+ install -m 0644 -D qmrestore.bash-completion ${DESTDIR}/${BASHCOMPLDIR}/qmrestore
make -C PVE install
install -m 0755 qm ${DESTDIR}${SBINDIR}
install -m 0755 qmrestore ${DESTDIR}${SBINDIR}
-SOURCES=qm.pm
+SOURCES=qm.pm qmrestore.pm
.PHONY: install
install: ${SOURCES}
--- /dev/null
+package PVE::CLI::qmrestore;
+
+use strict;
+use warnings;
+use PVE::SafeSyslog;
+use PVE::Tools qw(extract_param);
+use PVE::INotify;
+use PVE::RPCEnvironment;
+use PVE::CLIHandler;
+use PVE::JSONSchema qw(get_standard_option);
+use PVE::Cluster;
+use PVE::QemuServer;
+use PVE::API2::Qemu;
+
+use base qw(PVE::CLIHandler);
+
+__PACKAGE__->register_method({
+ name => 'qmrestore',
+ path => 'qmrestore',
+ method => 'POST',
+ description => "Restore QemuServer vzdump backups.",
+ parameters => {
+ additionalProperties => 0,
+ properties => {
+ vmid => get_standard_option('pve-vmid', { completion => \&PVE::Cluster::complete_next_vmid }),
+ archive => {
+ description => "The backup file. You can pass '-' to read from standard input.",
+ type => 'string',
+ maxLength => 255,
+ completion => \&PVE::QemuServer::complete_backup_archives,
+ },
+ storage => get_standard_option('pve-storage-id', {
+ description => "Default storage.",
+ optional => 1,
+ completion => \&PVE::QemuServer::complete_storage,
+ }),
+ force => {
+ optional => 1,
+ type => 'boolean',
+ description => "Allow to overwrite existing VM.",
+ },
+ unique => {
+ optional => 1,
+ type => 'boolean',
+ description => "Assign a unique random ethernet address.",
+ },
+ pool => {
+ optional => 1,
+ type => 'string', format => 'pve-poolid',
+ description => "Add the VM to the specified pool.",
+ },
+ },
+ },
+ returns => {
+ type => 'string',
+ },
+ code => sub {
+ my ($param) = @_;
+
+ $param->{node} = PVE::INotify::nodename();
+
+ return PVE::API2::Qemu->create_vm($param);
+ }});
+
+our $cmddef = [ __PACKAGE__, 'qmrestore', ['archive', 'vmid'], undef,
+ sub {
+ my $upid = shift;
+ my $status = PVE::Tools::upid_read_status($upid);
+ exit($status eq 'OK' ? 0 : -1);
+ }];
+
+1;
+
+__END__
+
+=head1 NAME
+
+qmrestore - restore QemuServer vzdump backups
+
+=head1 SYNOPSIS
+
+=include synopsis
+
+=head1 DESCRIPTION
+
+Restore the QemuServer vzdump backup C<archive> to virtual machine
+C<vmid>. Volumes are allocated on the original storage if there is no
+C<storage> specified.
+
+=head1 SEE ALSO
+
+vzdump(1) vzrestore(1)
+
+=include pve_copyright
use PVE::CLI::qm;
-PVE::CLI::qm->run_cli();
+PVE::CLI::qm->run_cli_handler();
use strict;
use warnings;
-use PVE::SafeSyslog;
-use PVE::Tools qw(extract_param);
-use PVE::INotify;
-use PVE::RPCEnvironment;
-use PVE::CLIHandler;
-use PVE::JSONSchema qw(get_standard_option);
-use PVE::API2::Qemu;
-use Data::Dumper; # fixme: remove
+use PVE::CLI::qmrestore;
-use base qw(PVE::CLIHandler);
-
-$ENV{'PATH'} = '/sbin:/bin:/usr/sbin:/usr/bin';
-
-initlog('qmrestore');
-
-die "please run as root\n" if $> != 0;
-
-PVE::INotify::inotify_init();
-
-my $rpcenv = PVE::RPCEnvironment->init('cli');
-
-$rpcenv->init_request();
-$rpcenv->set_language($ENV{LANG});
-$rpcenv->set_user('root@pam');
-
-__PACKAGE__->register_method({
- name => 'qmrestore',
- path => 'qmrestore',
- method => 'POST',
- description => "Restore QemuServer vzdump backups.",
- parameters => {
- additionalProperties => 0,
- properties => {
- vmid => get_standard_option('pve-vmid'),
- archive => {
- description => "The backup file. You can pass '-' to read from standard input.",
- type => 'string',
- maxLength => 255,
- },
- storage => get_standard_option('pve-storage-id', {
- description => "Default storage.",
- optional => 1,
- }),
- force => {
- optional => 1,
- type => 'boolean',
- description => "Allow to overwrite existing VM.",
- },
- unique => {
- optional => 1,
- type => 'boolean',
- description => "Assign a unique random ethernet address.",
- },
- pool => {
- optional => 1,
- type => 'string', format => 'pve-poolid',
- description => "Add the VM to the specified pool.",
- },
- },
- },
- returns => {
- type => 'string',
- },
- code => sub {
- my ($param) = @_;
-
- $param->{node} = PVE::INotify::nodename();
-
- return PVE::API2::Qemu->create_vm($param);
- }});
-
-my $cmddef = [ __PACKAGE__, 'qmrestore', ['archive', 'vmid'], undef,
- sub {
- my $upid = shift;
- my $status = PVE::Tools::upid_read_status($upid);
- exit($status eq 'OK' ? 0 : -1);
- }];
-
-push @ARGV, 'help' if !scalar(@ARGV);
-
-PVE::CLIHandler::handle_simple_cmd($cmddef, \@ARGV, undef, $0);
-
-exit 0;
-
-__END__
-
-=head1 NAME
-
-qmrestore - restore QemuServer vzdump backups
-
-=head1 SYNOPSIS
-
-=include synopsis
-
-=head1 DESCRIPTION
-
-Restore the QemuServer vzdump backup C<archive> to virtual machine
-C<vmid>. Volumes are allocated on the original storage if there is no
-C<storage> specified.
-
-=head1 SEE ALSO
-
-vzdump(1) vzrestore(1)
-
-=include pve_copyright
+PVE::CLI::qmrestore->run_cli_handler();