[gnome-boxes/wip/kalev/ovf-support: 4/6] installed-media: Support .ova files
- From: Felipe Borges <felipeborges src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-boxes/wip/kalev/ovf-support: 4/6] installed-media: Support .ova files
- Date: Thu, 10 May 2018 16:10:39 +0000 (UTC)
commit 185636ee918557644a3a0841f74a6614f299eae7
Author: Kalev Lember <klember redhat com>
Date: Wed Mar 30 15:10:03 2016 +0100
installed-media: Support .ova files
This makes use of libovf-glib to load .ova files in the Open
Virtualization Format.
src/installed-media.vala | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
---
diff --git a/src/installed-media.vala b/src/installed-media.vala
index 09ceffdf..789dadc1 100644
--- a/src/installed-media.vala
+++ b/src/installed-media.vala
@@ -1,12 +1,14 @@
// This file is part of GNOME Boxes. License: LGPLv2+
using GVirConfig;
+using Govf;
private class Boxes.InstalledMedia : Boxes.InstallerMedia {
public const string[] supported_extensions = { ".qcow2", ".qcow2.gz",
".qcow", ".qcow.gz",
".img", ".img.gz",
".cow", ".cow.gz",
+ ".ova", ".ova.gz",
".vdi", ".vdi.gz",
".vmdk", ".vmdk.gz",
".vpc", ".vpc.gz",
@@ -81,6 +83,7 @@ public InstalledMedia (string path, bool known_qcow2 = false) throws GLib.Error
// Also converts to native format (QCOW2)
public async void copy (string destination_path) throws GLib.Error {
var decompressed = yield decompress ();
+ var extracted = yield extract_ovf ();
string[] argv = { "qemu-img", "convert", "-O", "qcow2", device_file, destination_path };
@@ -93,7 +96,7 @@ public async void copy (string destination_path) throws GLib.Error {
yield exec (argv, null);
debug ("Finished copying '%s' to '%s'", device_file, destination_path);
- if (decompressed) {
+ if (decompressed || extracted) {
// We decompressed into a temporary location
var file = File.new_for_path (device_file);
delete_file (file);
@@ -157,6 +160,25 @@ public override VMCreator get_vm_creator () {
return date;
}
+ private async bool extract_ovf () throws GLib.Error {
+ if (!device_file.has_suffix (".ova"))
+ return false;
+
+ var ova_file = File.new_for_path (device_file);
+ var ovf_package = new Govf.Package ();
+ ovf_package.load_from_ova_file (device_file);
+
+ var disks = ovf_package.get_disks ();
+ var extracted_path = get_user_pkgcache (ova_file.get_basename () + ".vmkd");
+ ovf_package.extract_disk (disks [0], extracted_path);
+
+ debug ("Extracted '%s' from '%s'.", extracted_path, device_file);
+
+ device_file = extracted_path;
+
+ return true;
+ }
+
private async bool decompress () throws GLib.Error {
if (!device_file.has_suffix (".gz"))
return false;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]