diff --git a/Makefile b/Makefile index 9c47a196..7384ce42 100644 --- a/Makefile +++ b/Makefile @@ -55,7 +55,7 @@ sparsecp: sparsecp.c utils.c %.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 $@ @@ -63,13 +63,18 @@ qm.bash-completion: 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} @@ -84,6 +89,7 @@ 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} diff --git a/PVE/CLI/Makefile b/PVE/CLI/Makefile index ac16e738..2fec8e5e 100644 --- a/PVE/CLI/Makefile +++ b/PVE/CLI/Makefile @@ -1,4 +1,4 @@ -SOURCES=qm.pm +SOURCES=qm.pm qmrestore.pm .PHONY: install install: ${SOURCES} diff --git a/PVE/CLI/qmrestore.pm b/PVE/CLI/qmrestore.pm new file mode 100755 index 00000000..b5abfb90 --- /dev/null +++ b/PVE/CLI/qmrestore.pm @@ -0,0 +1,94 @@ +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 to virtual machine +C. Volumes are allocated on the original storage if there is no +C specified. + +=head1 SEE ALSO + +vzdump(1) vzrestore(1) + +=include pve_copyright diff --git a/qm b/qm index 663e440d..d0e9bc19 100755 --- a/qm +++ b/qm @@ -5,4 +5,4 @@ use warnings; use PVE::CLI::qm; -PVE::CLI::qm->run_cli(); +PVE::CLI::qm->run_cli_handler(); diff --git a/qmrestore b/qmrestore index 59a47b6e..506f2bdc 100755 --- a/qmrestore +++ b/qmrestore @@ -2,109 +2,7 @@ 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 to virtual machine -C. Volumes are allocated on the original storage if there is no -C specified. - -=head1 SEE ALSO - -vzdump(1) vzrestore(1) - -=include pve_copyright +PVE::CLI::qmrestore->run_cli_handler();