mirror of
				https://git.proxmox.com/git/qemu-server
				synced 2025-10-31 13:20:09 +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
	 Fabian Ebner
						Fabian Ebner