[pve-devel] [PATCH qemu-server v5 3/3] Add new qm option 'diskimport' to import external disk images
Fabian Grünbichler
f.gruenbichler at proxmox.com
Tue May 30 10:17:16 CEST 2017
meta: this is not an "option" but a new "command" ;)
On Mon, May 22, 2017 at 10:34:47AM +0200, Emmanuel Kasper wrote:
> The VM must be already existing, and the syntax is
>
> qm diskimport 421 minix204.img pve4tank
>
> where 421 is an already existing VM
> ---
> PVE/CLI/qm.pm | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 51 insertions(+)
>
> diff --git a/PVE/CLI/qm.pm b/PVE/CLI/qm.pm
> index 44439dd..7c5b2c4 100755
> --- a/PVE/CLI/qm.pm
> +++ b/PVE/CLI/qm.pm
> @@ -17,6 +17,7 @@ use PVE::SafeSyslog;
> use PVE::INotify;
> use PVE::RPCEnvironment;
> use PVE::QemuServer;
> +use PVE::QemuServer::ImportDisk;
> use PVE::API2::Qemu;
> use JSON;
> use PVE::JSONSchema qw(get_standard_option);
> @@ -380,6 +381,54 @@ __PACKAGE__->register_method ({
> }});
>
> __PACKAGE__->register_method ({
> + name => 'importdisk',
> + path => 'importdisk',
> + method => 'POST',
> + description => "Import an external disk image as an unused disk in a VM. The
> + image format has to be supported by qemu-img(1).",
> + parameters => {
> + additionalProperties => 0,
> + properties => {
> + vmid => get_standard_option('pve-vmid', {completion => \&PVE::QemuServer::complete_vmid}),
> + source => {
> + description => 'Path to the disk image to import',
> + type => 'string',
> + optional => 0,
> + },
> + storage => get_standard_option('pve-storage-id', {
> + description => 'Target storage ID',
> + completion => \&PVE::QemuServer::complete_storage,
> + optional => 0,
> + }),
> + format => {
> + type => 'string',
> + description => 'Target format',
> + enum => [ 'raw', 'qcow2', 'vmdk' ],
> + optional => 1,
> + },
> + },
> + },
> + returns => { type => 'null'},
> + code => sub {
> + my ($param) = @_;
> +
> + my $vmid = extract_param($param, 'vmid');
> + my $source = extract_param($param, 'source');
> + my $storeid = extract_param($param, 'storage');
> + my $format = extract_param($param, 'format');
> +
> + my $vm_conf = PVE::QemuConfig->load_config($vmid);
> + PVE::QemuConfig->check_lock($vm_conf);
> + -f $source or die "$source: non-existent or non-regular file\n";
this is uncommon style for our code base.. usually we'd do
die "foo" if ! -f $bar;
or
die "rather long foo which needs its own line.."
if ! -f $bar;
this also makes skimming code for parts where it can error out easier
(because you just have to look for lines starting with "die" ;)
(also, lines starting with '-' are ugly :P)
> + my $storecfg = PVE::Storage::config();
> + PVE::Storage::storage_check_enabled($storecfg, $storeid);
> +
> + PVE::QemuServer::ImportDisk::do_import($source, $vmid, $storeid, { format => $format });
> +
> + return undef;
> + }});
> +
> +__PACKAGE__->register_method ({
> name => 'terminal',
> path => 'terminal',
> method => 'POST',
> @@ -587,6 +636,8 @@ our $cmddef = {
> nbdstop => [ __PACKAGE__, 'nbdstop', ['vmid']],
>
> terminal => [ __PACKAGE__, 'terminal', ['vmid']],
> +
> + importdisk => [ __PACKAGE__, 'importdisk', ['vmid', 'source', 'storage']],
> };
>
> 1;
> --
> 2.11.0
>
>
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
More information about the pve-devel
mailing list