mirror of
https://github.com/virt-manager/virt-manager.git
synced 2024-10-27 01:55:20 +03:00
host: Allow renaming a storage pool
This commit is contained in:
parent
369a17160a
commit
8f0bfb1ad6
172
ui/host.ui
172
ui/host.ui
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!-- Generated with glade 3.16.0 on Sun Sep 29 11:40:23 2013 -->
|
<!-- Generated with glade 3.16.0 on Sun Sep 29 12:24:13 2013 -->
|
||||||
<interface>
|
<interface>
|
||||||
<!-- interface-requires gtk+ 3.0 -->
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<object class="GtkAccelGroup" id="accelgroup1"/>
|
<object class="GtkAccelGroup" id="accelgroup1"/>
|
||||||
@ -1341,13 +1341,11 @@
|
|||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTable" id="table5">
|
<object class="GtkGrid" id="table5">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="n_rows">5</property>
|
|
||||||
<property name="n_columns">2</property>
|
|
||||||
<property name="column_spacing">8</property>
|
|
||||||
<property name="row_spacing">5</property>
|
<property name="row_spacing">5</property>
|
||||||
|
<property name="column_spacing">8</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label73">
|
<object class="GtkLabel" id="label73">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
@ -1356,10 +1354,10 @@
|
|||||||
<property name="label" translatable="yes">Pool Type:</property>
|
<property name="label" translatable="yes">Pool Type:</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="top_attach">1</property>
|
<property name="left_attach">0</property>
|
||||||
<property name="bottom_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="width">1</property>
|
||||||
<property name="y_options"/>
|
<property name="height">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@ -1372,11 +1370,9 @@
|
|||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="right_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="top_attach">1</property>
|
<property name="width">1</property>
|
||||||
<property name="bottom_attach">2</property>
|
<property name="height">1</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
|
||||||
<property name="y_options"/>
|
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@ -1388,8 +1384,10 @@
|
|||||||
<property name="use_markup">True</property>
|
<property name="use_markup">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="left_attach">0</property>
|
||||||
<property name="y_options"/>
|
<property name="top_attach">0</property>
|
||||||
|
<property name="width">1</property>
|
||||||
|
<property name="height">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@ -1402,37 +1400,9 @@
|
|||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="right_attach">2</property>
|
<property name="top_attach">0</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="width">1</property>
|
||||||
<property name="y_options"/>
|
<property name="height">1</property>
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label60">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="label" translatable="yes">Location:</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="top_attach">2</property>
|
|
||||||
<property name="bottom_attach">3</property>
|
|
||||||
<property name="x_options">GTK_FILL</property>
|
|
||||||
<property name="y_options"/>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label75">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="label" translatable="yes">State:</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="top_attach">3</property>
|
|
||||||
<property name="bottom_attach">4</property>
|
|
||||||
<property name="x_options">GTK_FILL</property>
|
|
||||||
<property name="y_options"/>
|
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@ -1468,27 +1438,9 @@
|
|||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="right_attach">2</property>
|
|
||||||
<property name="top_attach">3</property>
|
|
||||||
<property name="bottom_attach">4</property>
|
|
||||||
<property name="x_options">GTK_FILL</property>
|
|
||||||
<property name="y_options"/>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label76">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="label" translatable="yes">A_utostart:</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
<property name="mnemonic_widget">pool-autostart</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="top_attach">4</property>
|
<property name="top_attach">4</property>
|
||||||
<property name="bottom_attach">5</property>
|
<property name="width">1</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="height">1</property>
|
||||||
<property name="y_options"/>
|
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@ -1504,11 +1456,9 @@
|
|||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="right_attach">2</property>
|
<property name="top_attach">5</property>
|
||||||
<property name="top_attach">4</property>
|
<property name="width">1</property>
|
||||||
<property name="bottom_attach">5</property>
|
<property name="height">1</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
|
||||||
<property name="y_options"/>
|
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@ -1521,10 +1471,80 @@
|
|||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="right_attach">2</property>
|
<property name="top_attach">3</property>
|
||||||
<property name="top_attach">2</property>
|
<property name="width">1</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="height">1</property>
|
||||||
<property name="y_options"/>
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkEntry" id="pool-name-entry">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<signal name="changed" handler="on_pool_name_changed" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">1</property>
|
||||||
|
<property name="top_attach">1</property>
|
||||||
|
<property name="width">1</property>
|
||||||
|
<property name="height">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="label11">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<property name="label" translatable="yes">Name:</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">0</property>
|
||||||
|
<property name="top_attach">1</property>
|
||||||
|
<property name="width">1</property>
|
||||||
|
<property name="height">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="label60">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<property name="label" translatable="yes">Location:</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">0</property>
|
||||||
|
<property name="top_attach">3</property>
|
||||||
|
<property name="width">1</property>
|
||||||
|
<property name="height">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="label75">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<property name="label" translatable="yes">State:</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">0</property>
|
||||||
|
<property name="top_attach">4</property>
|
||||||
|
<property name="width">1</property>
|
||||||
|
<property name="height">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="label76">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<property name="label" translatable="yes">A_utostart:</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="mnemonic_widget">pool-autostart</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">0</property>
|
||||||
|
<property name="top_attach">5</property>
|
||||||
|
<property name="width">1</property>
|
||||||
|
<property name="height">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -779,6 +779,9 @@ class vmmConnection(vmmGObject):
|
|||||||
def rename_network(self, obj, origxml, newxml):
|
def rename_network(self, obj, origxml, newxml):
|
||||||
return self._rename_helper("network", self.define_network,
|
return self._rename_helper("network", self.define_network,
|
||||||
obj, origxml, newxml)
|
obj, origxml, newxml)
|
||||||
|
def rename_pool(self, obj, origxml, newxml):
|
||||||
|
return self._rename_helper("storagepool", self.define_pool,
|
||||||
|
obj, origxml, newxml)
|
||||||
|
|
||||||
|
|
||||||
####################
|
####################
|
||||||
|
@ -44,7 +44,11 @@ INTERFACE_PAGE_INFO = 0
|
|||||||
INTERFACE_PAGE_ERROR = 1
|
INTERFACE_PAGE_ERROR = 1
|
||||||
|
|
||||||
(EDIT_NET_NAME,
|
(EDIT_NET_NAME,
|
||||||
EDIT_NET_AUTOSTART) = range(2)
|
EDIT_NET_AUTOSTART,
|
||||||
|
|
||||||
|
EDIT_POOL_NAME,
|
||||||
|
EDIT_POOL_AUTOSTART,
|
||||||
|
) = range(4)
|
||||||
|
|
||||||
|
|
||||||
class vmmHost(vmmGObjectUI):
|
class vmmHost(vmmGObjectUI):
|
||||||
@ -73,7 +77,7 @@ class vmmHost(vmmGObjectUI):
|
|||||||
self.volmenu = None
|
self.volmenu = None
|
||||||
self._in_refresh = False
|
self._in_refresh = False
|
||||||
|
|
||||||
self.net_active_edits = []
|
self.active_edits = []
|
||||||
|
|
||||||
self.cpu_usage_graph = None
|
self.cpu_usage_graph = None
|
||||||
self.memory_usage_graph = None
|
self.memory_usage_graph = None
|
||||||
@ -113,6 +117,8 @@ class vmmHost(vmmGObjectUI):
|
|||||||
"on_vol_list_button_press_event": self.popup_vol_menu,
|
"on_vol_list_button_press_event": self.popup_vol_menu,
|
||||||
"on_pool_apply_clicked": self.pool_apply,
|
"on_pool_apply_clicked": self.pool_apply,
|
||||||
"on_vol_list_changed": self.vol_selected,
|
"on_vol_list_changed": self.vol_selected,
|
||||||
|
"on_pool_name_changed": (lambda *x:
|
||||||
|
self.enable_pool_apply(x, EDIT_POOL_NAME)),
|
||||||
|
|
||||||
"on_interface_add_clicked" : self.add_interface,
|
"on_interface_add_clicked" : self.add_interface,
|
||||||
"on_interface_start_clicked" : self.start_interface,
|
"on_interface_start_clicked" : self.start_interface,
|
||||||
@ -469,10 +475,10 @@ class vmmHost(vmmGObjectUI):
|
|||||||
|
|
||||||
logging.debug("Applying changes for network '%s'", net.get_name())
|
logging.debug("Applying changes for network '%s'", net.get_name())
|
||||||
try:
|
try:
|
||||||
if EDIT_NET_AUTOSTART in self.net_active_edits:
|
if EDIT_NET_AUTOSTART in self.active_edits:
|
||||||
auto = self.widget("net-autostart").get_active()
|
auto = self.widget("net-autostart").get_active()
|
||||||
net.set_autostart(auto)
|
net.set_autostart(auto)
|
||||||
if EDIT_NET_NAME in self.net_active_edits:
|
if EDIT_NET_NAME in self.active_edits:
|
||||||
net.define_name(self.widget("net-name").get_text())
|
net.define_name(self.widget("net-name").get_text())
|
||||||
self.repopulate_networks()
|
self.repopulate_networks()
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
@ -482,14 +488,14 @@ class vmmHost(vmmGObjectUI):
|
|||||||
self.disable_net_apply()
|
self.disable_net_apply()
|
||||||
|
|
||||||
def disable_net_apply(self):
|
def disable_net_apply(self):
|
||||||
self.net_active_edits = []
|
self.active_edits = []
|
||||||
self.widget("net-apply").set_sensitive(False)
|
self.widget("net-apply").set_sensitive(False)
|
||||||
|
|
||||||
def enable_net_apply(self, *arglist):
|
def enable_net_apply(self, *arglist):
|
||||||
edittype = arglist[-1]
|
edittype = arglist[-1]
|
||||||
self.widget("net-apply").set_sensitive(True)
|
self.widget("net-apply").set_sensitive(True)
|
||||||
if edittype not in self.net_active_edits:
|
if edittype not in self.active_edits:
|
||||||
self.net_active_edits.append(edittype)
|
self.active_edits.append(edittype)
|
||||||
|
|
||||||
def net_autostart_changed(self, src_ignore):
|
def net_autostart_changed(self, src_ignore):
|
||||||
auto = self.widget("net-autostart").get_active()
|
auto = self.widget("net-autostart").get_active()
|
||||||
@ -824,19 +830,33 @@ class vmmHost(vmmGObjectUI):
|
|||||||
|
|
||||||
logging.debug("Applying changes for pool '%s'", pool.get_name())
|
logging.debug("Applying changes for pool '%s'", pool.get_name())
|
||||||
try:
|
try:
|
||||||
do_auto = self.widget("pool-autostart").get_active()
|
if EDIT_POOL_AUTOSTART in self.active_edits:
|
||||||
pool.set_autostart(do_auto)
|
auto = self.widget("pool-autostart").get_active()
|
||||||
|
pool.set_autostart(auto)
|
||||||
|
if EDIT_POOL_NAME in self.active_edits:
|
||||||
|
pool.define_name(self.widget("pool-name-entry").get_text())
|
||||||
|
self.repopulate_storage_pools()
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
self.err.show_err(_("Error setting pool autostart: %s") % str(e))
|
self.err.show_err(_("Error setting pool autostart: %s") % str(e))
|
||||||
return
|
return
|
||||||
|
self.disable_pool_apply()
|
||||||
|
|
||||||
|
def disable_pool_apply(self):
|
||||||
|
self.active_edits = []
|
||||||
self.widget("pool-apply").set_sensitive(False)
|
self.widget("pool-apply").set_sensitive(False)
|
||||||
|
|
||||||
|
def enable_pool_apply(self, *arglist):
|
||||||
|
edittype = arglist[-1]
|
||||||
|
self.widget("pool-apply").set_sensitive(True)
|
||||||
|
if edittype not in self.active_edits:
|
||||||
|
self.active_edits.append(edittype)
|
||||||
|
|
||||||
def pool_autostart_changed(self, src_ignore):
|
def pool_autostart_changed(self, src_ignore):
|
||||||
auto = self.widget("pool-autostart").get_active()
|
auto = self.widget("pool-autostart").get_active()
|
||||||
self.widget("pool-autostart").set_label(auto and
|
self.widget("pool-autostart").set_label(auto and
|
||||||
_("On Boot") or
|
_("On Boot") or
|
||||||
_("Never"))
|
_("Never"))
|
||||||
self.widget("pool-apply").set_sensitive(True)
|
self.enable_pool_apply(EDIT_POOL_AUTOSTART)
|
||||||
|
|
||||||
def set_storage_error_page(self, msg):
|
def set_storage_error_page(self, msg):
|
||||||
self.reset_pool_state()
|
self.reset_pool_state()
|
||||||
@ -858,8 +878,7 @@ class vmmHost(vmmGObjectUI):
|
|||||||
except Exception, e:
|
except Exception, e:
|
||||||
logging.exception(e)
|
logging.exception(e)
|
||||||
self.set_storage_error_page(_("Error selecting pool: %s") % e)
|
self.set_storage_error_page(_("Error selecting pool: %s") % e)
|
||||||
|
self.disable_pool_apply()
|
||||||
self.widget("pool-apply").set_sensitive(False)
|
|
||||||
|
|
||||||
def populate_pool_state(self, uuid):
|
def populate_pool_state(self, uuid):
|
||||||
pool = self.conn.get_pool(uuid)
|
pool = self.conn.get_pool(uuid)
|
||||||
@ -871,6 +890,8 @@ class vmmHost(vmmGObjectUI):
|
|||||||
self.widget("pool-details").set_sensitive(True)
|
self.widget("pool-details").set_sensitive(True)
|
||||||
self.widget("pool-name").set_markup("<b>%s:</b>" %
|
self.widget("pool-name").set_markup("<b>%s:</b>" %
|
||||||
pool.get_name())
|
pool.get_name())
|
||||||
|
self.widget("pool-name-entry").set_text(pool.get_name())
|
||||||
|
self.widget("pool-name-entry").set_editable(not active)
|
||||||
self.widget("pool-sizes").set_markup(
|
self.widget("pool-sizes").set_markup(
|
||||||
"""<span size="large">%s Free</span> / <i>%s In Use</i>""" %
|
"""<span size="large">%s Free</span> / <i>%s In Use</i>""" %
|
||||||
(pool.get_pretty_available(), pool.get_pretty_allocation()))
|
(pool.get_pretty_available(), pool.get_pretty_allocation()))
|
||||||
@ -915,6 +936,7 @@ class vmmHost(vmmGObjectUI):
|
|||||||
def reset_pool_state(self):
|
def reset_pool_state(self):
|
||||||
self.widget("pool-details").set_sensitive(False)
|
self.widget("pool-details").set_sensitive(False)
|
||||||
self.widget("pool-name").set_text("")
|
self.widget("pool-name").set_text("")
|
||||||
|
self.widget("pool-name-entry").set_text("")
|
||||||
self.widget("pool-sizes").set_markup("""<span size="large"> </span>""")
|
self.widget("pool-sizes").set_markup("""<span size="large"> </span>""")
|
||||||
self.widget("pool-type").set_text("")
|
self.widget("pool-type").set_text("")
|
||||||
self.widget("pool-location").set_text("")
|
self.widget("pool-location").set_text("")
|
||||||
@ -928,10 +950,10 @@ class vmmHost(vmmGObjectUI):
|
|||||||
self.widget("pool-delete").set_sensitive(False)
|
self.widget("pool-delete").set_sensitive(False)
|
||||||
self.widget("pool-stop").set_sensitive(False)
|
self.widget("pool-stop").set_sensitive(False)
|
||||||
self.widget("pool-start").set_sensitive(False)
|
self.widget("pool-start").set_sensitive(False)
|
||||||
self.widget("pool-apply").set_sensitive(False)
|
|
||||||
self.widget("vol-add").set_sensitive(False)
|
self.widget("vol-add").set_sensitive(False)
|
||||||
self.widget("vol-delete").set_sensitive(False)
|
self.widget("vol-delete").set_sensitive(False)
|
||||||
self.widget("vol-list").set_sensitive(False)
|
self.widget("vol-list").set_sensitive(False)
|
||||||
|
self.disable_pool_apply()
|
||||||
|
|
||||||
def vol_selected(self, src):
|
def vol_selected(self, src):
|
||||||
selected = src.get_selected()
|
selected = src.get_selected()
|
||||||
|
@ -174,6 +174,10 @@ class vmmStoragePool(vmmLibvirtObject):
|
|||||||
self._backend.refresh(0)
|
self._backend.refresh(0)
|
||||||
self.idle_add(cb)
|
self.idle_add(cb)
|
||||||
|
|
||||||
|
def define_name(self, newname):
|
||||||
|
return self._define_name_helper("storagepool",
|
||||||
|
self.conn.rename_pool,
|
||||||
|
newname)
|
||||||
|
|
||||||
###################
|
###################
|
||||||
# Volume handling #
|
# Volume handling #
|
||||||
|
Loading…
Reference in New Issue
Block a user