Ryan Barry has uploaded a new change for review. Change subject: Add a confirmation page ......................................................................
Add a confirmation page Confirm storage selections before the install proceeds, and try to warn users if the disk is part of a storage domain (by looking for an LVM tag) Change-Id: If0c099fbfbfda9bc609a024964905ee59e04280f Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1062515 Signed-off-by: Ryan Barry <[email protected]> --- M src/Makefile.am A src/ovirt/node/installer/core/confirmation_page.py 2 files changed, 142 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-node refs/changes/74/27074/1 diff --git a/src/Makefile.am b/src/Makefile.am index 959ac23..c8d1579 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -137,6 +137,7 @@ pyovirt_node_installer_core_PYTHON = \ ovirt/node/installer/core/__init__.py \ ovirt/node/installer/core/boot_device_page.py \ + ovirt/node/installer/core/confirmation_page.py \ ovirt/node/installer/core/installation_device_page.py \ ovirt/node/installer/core/keyboard_page.py \ ovirt/node/installer/core/password_page.py \ diff --git a/src/ovirt/node/installer/core/confirmation_page.py b/src/ovirt/node/installer/core/confirmation_page.py new file mode 100644 index 0000000..e3453cd --- /dev/null +++ b/src/ovirt/node/installer/core/confirmation_page.py @@ -0,0 +1,141 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# storage_vol_page.py - Copyright (C) 2014 Red Hat, Inc. +# Written by Ryan Barry <[email protected]> +# +# 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; version 2 of the License. +# +# 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. A copy of the GNU General Public License is +# also available at http://www.gnu.org/copyleft/gpl.html. + +""" +Confirmation page of the installer +""" +from ovirt.node import plugins, ui +from ovirt.node.installer.core.boot_device_page import StorageDiscovery +from ovirt.node.utils import process + + +class Plugin(plugins.NodePlugin): + _model = {} + + def __init__(self, app): + super(Plugin, self).__init__(app) + self.storage_discovery = StorageDiscovery(app.args.dry) + self.storage_discovery.start() + self._header = "{!s:8.8} {!s:48.48} {!s:9.9}" + self._tagged_pvs = [x.split()[0] for x in + process.check_output(["lvm", "vgs", + "--noheadings", + "-o", "pv_name_tags"]).split( + "\n") if "storage_domain" in x] + + def name(self): + return "Confirm disk selections" + + def rank(self): + return 45 + + def model(self): + # Force rebuilding in case they go back and change a value + self._build_model() + + return self._model + + def validators(self): + return {} + + def ui_content(self): + align = lambda l: l.ljust(16) + if not self._model: + self._build_model() + + ws = [ui.Header("header[0]", _("Confirm disk selections")), + ui.Header("boot.header", _("Boot device")), + DiskDetails("boot.device", self, + self._model["boot.device.current"])] + + if self._model["boot.device.current"] in self._tagged_pvs: + ws.extend([ui.Notice("boot.notice", _("Boot device may be part " + "of a storage domain!"))]) + + ws.extend([ui.Header("install.header", "Install devices")]) + + for i in range(len(self._model["installation.devices"])): + ws.extend([DiskDetails("installation.device[%s]" % i, self, + self._model["installation.devices"][i])]) + if self._model["installation.devices"][i] in self._tagged_pvs: + ws.extend([ui.Notice("installation.notice[%s]" % i, + _("This device may be part of a storage " + "domain!"))]) + + ws.extend([ui.Header("storage.volumes", _("Volume sizes (MB)"))]) + + for x in self._model.keys(): + if x.startswith("storage."): + ws.extend([ui.KeywordLabel(x, _(align( + x.replace("_", " ").replace("storage.", "").title() + ":")) + )]) + + page = ui.Page("confirmation", ws) + page.buttons = [ui.QuitButton("button.quit", _("Quit")), + ui.Button("button.back", _("Back")), + ui.SaveButton("button.next", _("Confirm"))] + + self.widgets.add(page) + return page + + def on_change(self, changes): + pass + + def on_merge(self, effective_changes): + changes = self.pending_changes(False) + if changes.contains_any(["button.back"]): + self.application.ui.navigate.to_previous_plugin() + elif changes.contains_any(["button.next"]): + self.application.ui.navigate.to_next_plugin() + + def _build_model(self): + _model = {} + + [_model.update(plugin.model()) for plugin in + self.application.plugins().values() if not + plugin.name() == "Confirm selections"] + + _model["installation.devices"].sort() + + self._model = _model + + +class DiskDetails(ui.Label): + """Display basic disk information""" + + def __init__(self, path, plugin, dev): + super(DiskDetails, self).__init__(path, "") + self._plugin = plugin + self.get_details(dev) + + def get_details(self, dev): + all_devices = self._plugin.storage_discovery.all_devices() + device = all_devices[dev] + + txt = self._plugin._header.format(device.bus, device.name, + "%sGB" % device.size) + + self.text(txt) + + def value(self, value=None): + if value: + self.get_details(value) + return value -- To view, visit http://gerrit.ovirt.org/27074 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If0c099fbfbfda9bc609a024964905ee59e04280f Gerrit-PatchSet: 1 Gerrit-Project: ovirt-node Gerrit-Branch: master Gerrit-Owner: Ryan Barry <[email protected]> _______________________________________________ node-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/node-patches
