# ----------------------------------------------------------------------- # OpenXenManager # # Copyright (C) 2009 Alberto Gonzalez Rodriguez alberto@pesadilla.org # Copyright (C) 2014 Daniel Lintott <daniel@serverb.co.uk> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # ----------------------------------------------------------------------- from xva import Xva from threading import Thread import gtk class ProgressBarOXC: widget = None widget2 = None def __init__(self, widget, widget2): self.widget = widget self.widget2 = widget2 self.widget.show() def update_amount(self, new_amount = None): value = "%.2f" % new_amount if float(value) > 1: value=1 self.widget.set_fraction(float(value)) def update_text(self, text= None): self.widget.set_text(text) def finish(self): image = gtk.Image() image.set_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU) self.widget2.set_image(image) self.widget2.set_label("Close") class oxcWindowTools: """ Class to manage OXC Tools """ def on_cancelmigratetool_clicked(self, widget, data=None): """ Cancel button pressed on migrate tool """ self.builder.get_object("migratetool").hide() def on_acceptmigratetool_clicked(self, widget, data=None): """ Accept button pressed on migrate tool """ machine = Xva(classProgressBar=ProgressBarOXC(self.builder.get_object("progressmigrate"), self.builder.get_object("cancelmigratetool"))) if not self.builder.get_object("fileossxenconfig").get_filename() and \ not self.builder.get_object("fileadddisk").get_filename(): return if self.builder.get_object("fileossxenconfig").get_filename(): print self.builder.get_object("fileossxenconfig").get_filename() params = {} execfile(options.config,params) # TODO: Check this, where does options come from? if "name" in params: machine.set_name( params['name'] ) if "vpus" in params: machine.set_vcpus( params['vcpus'] ) if "kernel" in params: if params['kernel'].endswith("hvmloader"): machine.is_hvm() else: print "Kernels that are loaded from the Dom0 aren't supported. Use pygrub" sys.exit(255) else: machine.is_pv() if "disk" in params and len(params['disk']) != 0: for disk in params['disk']: (path, device, mode) = disk.split(",") path_split = path.split(":") path_split.reverse() machine.add_disk(path_split[0]) else: print "You need at least 1 Disk, Exiting" sys.exit(254) if "memory" in params: try: memory = int(params['memory'] ) machine.set_memory( memory * 1024 * 1024) except: print "Could parse memory, setting to 256M" machine.set_memory(268435456) if "apic" in params and params['apic'] == 0: machine.set_apic(False) if "acpi" in params and params['acpi'] == 0: machine.set_acpi(False) if "nx" in params and params['nx'] == 1: machine.set_nx(options.nx) # TODO: Check this, where does options come from? if "pae" in params and params['pae'] == 0: machine.set_pae(False) else: # Set VM name machine.set_name(self.builder.get_object("txtmigratename").get_text()) # Set VM vcpus machine.set_vcpus(self.builder.get_object("spinmigratevcpus").get_text()) # Set VM ACPI machine.set_acpi(self.builder.get_object("checkmigrateacpi").get_active()) # Set VM ACIP machine.set_apic(self.builder.get_object("checkmigrateapic").get_active()) # Set VM Viridian machine.set_viridian(self.builder.get_object("checkmigrateviridian").get_active()) # Set VM PAE machine.set_pae(self.builder.get_object("checkmigratepae").get_active()) # Set VM NX machine.set_nx(self.builder.get_object("checkmigratenx").get_active()) # Set VM Memory memory = int(self.builder.get_object("spinmigratemem").get_text())*1024*1024 machine.set_memory(memory) # Add disk machine.add_disk(self.builder.get_object("fileadddisk").get_filename()) if self.builder.get_object("radiomigratehvm").get_active(): machine.is_hvm() else: machine.is_pv() sparse = self.builder.get_object("checkmigratesparse").get_active() # Save import sys #sys.stdout = labelStream(self.builder.get_object("lblmigrateprogress")) if self.builder.get_object("checkmigrateoutputxva").get_active(): # If save to xva file.. filename = self.builder.get_object("txtoutputxva").get_text() Thread(target=machine.save_as, kwargs={"filename":filename, "sparse":sparse}).start() else: # Else export to server.. server = self.xc_servers[self.selected_host].host username = self.xc_servers[self.selected_host].user password = self.xc_servers[self.selected_host].password ssl = self.xc_servers[self.selected_host].ssl Thread(target=machine.save_as, kwargs={"server":server, "username":username, "password":password, "ssl":ssl, "sparse":sparse}).start() widget.set_sensitive(False) #self.builder.get_object("migratetool").hide() def on_helpmigratetool_clicked(self, widget, data=None): """ Help button pressed on migrate tool """ self.builder.get_object("migratetoolhelp").show() def on_closemigratetoolhelp_clicked(self, widget, data=None): """ Closebutton pressed on migrate tool help """ self.builder.get_object("migratetoolhelp").hide() def on_btoutputxva_clicked(self, widget, data=None): """ Function called when you press "choose xva file" """ # Show file chooser self.builder.get_object("fileoutputxva").show() def on_acceptfileoutputxva_clicked(self, widget, data=None): """ Function called when you accept output xva file chooser """ filename = self.builder.get_object("fileoutputxva").get_filename() self.builder.get_object("txtoutputxva").set_text(filename) self.builder.get_object("fileoutputxva").hide() def on_cancelfileoutputxva_clicked(self, widget, data=None): """ Function called when you accept output xva file chooser """ self.builder.get_object("fileoutputxva").hide()