convert qmrestore into a PVE::CLI class

and install bash completion helpers.
This commit is contained in:
Dietmar Maurer 2015-10-05 13:10:24 +02:00
parent 5f20325f61
commit cc7b93ec0c
5 changed files with 108 additions and 110 deletions

View File

@ -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}

View File

@ -1,4 +1,4 @@
SOURCES=qm.pm
SOURCES=qm.pm qmrestore.pm
.PHONY: install
install: ${SOURCES}

94
PVE/CLI/qmrestore.pm Executable file
View File

@ -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<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

2
qm
View File

@ -5,4 +5,4 @@ use warnings;
use PVE::CLI::qm;
PVE::CLI::qm->run_cli();
PVE::CLI::qm->run_cli_handler();

106
qmrestore
View File

@ -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<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();