mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-05-28 16:33:55 +00:00
api: add endpoint for parsing .ovf files
Co-developed-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Signed-off-by: Dominic Jäger <d.jaeger@proxmox.com> [split into its own patch + minor improvements/style fixes] Signed-off-by: Fabian Ebner <f.ebner@proxmox.com> [renamed API handler, since it's not an index] Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
This commit is contained in:
parent
62375438dc
commit
39051ac0df
@ -1,4 +1,4 @@
|
||||
SOURCES=Agent.pm CPU.pm Machine.pm
|
||||
SOURCES=Agent.pm CPU.pm Machine.pm OVF.pm
|
||||
|
||||
.PHONY: install
|
||||
install:
|
||||
|
53
PVE/API2/Qemu/OVF.pm
Normal file
53
PVE/API2/Qemu/OVF.pm
Normal file
@ -0,0 +1,53 @@
|
||||
package PVE::API2::Qemu::OVF;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use PVE::JSONSchema qw(get_standard_option);
|
||||
use PVE::QemuServer::OVF;
|
||||
use PVE::RESTHandler;
|
||||
|
||||
use base qw(PVE::RESTHandler);
|
||||
|
||||
__PACKAGE__->register_method ({
|
||||
name => 'readovf',
|
||||
path => '',
|
||||
method => 'GET',
|
||||
proxyto => 'node',
|
||||
description => "Read an .ovf manifest.",
|
||||
protected => 1,
|
||||
parameters => {
|
||||
additionalProperties => 0,
|
||||
properties => {
|
||||
node => get_standard_option('pve-node'),
|
||||
manifest => {
|
||||
description => "Path to .ovf manifest.",
|
||||
type => 'string',
|
||||
},
|
||||
},
|
||||
},
|
||||
returns => {
|
||||
type => 'object',
|
||||
additionalProperties => 1,
|
||||
properties => PVE::QemuServer::json_ovf_properties(),
|
||||
description => "VM config according to .ovf manifest.",
|
||||
},
|
||||
code => sub {
|
||||
my ($param) = @_;
|
||||
|
||||
my $manifest = $param->{manifest};
|
||||
die "check for file $manifest failed - $!\n" if !-f $manifest;
|
||||
|
||||
my $parsed = PVE::QemuServer::OVF::parse_ovf($manifest);
|
||||
my $result;
|
||||
$result->{cores} = $parsed->{qm}->{cores};
|
||||
$result->{name} = $parsed->{qm}->{name};
|
||||
$result->{memory} = $parsed->{qm}->{memory};
|
||||
my $disks = $parsed->{disks};
|
||||
for my $disk (@$disks) {
|
||||
$result->{$disk->{disk_address}} = $disk->{backing_file};
|
||||
}
|
||||
return $result;
|
||||
}});
|
||||
|
||||
1;
|
@ -2203,6 +2203,38 @@ sub json_config_properties {
|
||||
return $prop;
|
||||
}
|
||||
|
||||
# Properties that we can read from an OVF file
|
||||
sub json_ovf_properties {
|
||||
my $prop = {};
|
||||
|
||||
for my $device (PVE::QemuServer::Drive::valid_drive_names()) {
|
||||
$prop->{$device} = {
|
||||
type => 'string',
|
||||
format => 'pve-volume-id-or-absolute-path',
|
||||
description => "Disk image that gets imported to $device",
|
||||
optional => 1,
|
||||
};
|
||||
}
|
||||
|
||||
$prop->{cores} = {
|
||||
type => 'integer',
|
||||
description => "The number of CPU cores.",
|
||||
optional => 1,
|
||||
};
|
||||
$prop->{memory} = {
|
||||
type => 'integer',
|
||||
description => "Amount of RAM for the VM in MB.",
|
||||
optional => 1,
|
||||
};
|
||||
$prop->{name} = {
|
||||
type => 'string',
|
||||
description => "Name of the VM.",
|
||||
optional => 1,
|
||||
};
|
||||
|
||||
return $prop;
|
||||
}
|
||||
|
||||
# return copy of $confdesc_cloudinit to generate documentation
|
||||
sub cloudinit_config_properties {
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user