Fabian Deutsch has uploaded a new change for review. Change subject: Allow plugins to define the application ......................................................................
Allow plugins to define the application Previosuly the plugins were loaded frmo a predefined location, now it's possible to define this location when instanciating the application. This allows an easy creation of an e.g. setup and installer application. Change-Id: Ibfab8322c1c7a1ef59956f2eaf2b1d113c55497a Signed-off-by: Fabian Deutsch <[email protected]> --- M scripts/tui/src/ovirt/node/app.py M scripts/tui/src/ovirt/node/config/defaults.py M scripts/tui/src/ovirt/node/main.py M scripts/tui/src/ovirt/node/plugins/__init__.py A scripts/tui/src/ovirt/node/plugins/installer/__init__.py A scripts/tui/src/ovirt/node/plugins/setup/__init__.py R scripts/tui/src/ovirt/node/plugins/setup/engine_page.py R scripts/tui/src/ovirt/node/plugins/setup/example.py R scripts/tui/src/ovirt/node/plugins/setup/features.py R scripts/tui/src/ovirt/node/plugins/setup/kdump_page.py R scripts/tui/src/ovirt/node/plugins/setup/keyboard_page.py R scripts/tui/src/ovirt/node/plugins/setup/logging_page.py R scripts/tui/src/ovirt/node/plugins/setup/monitoring_page.py R scripts/tui/src/ovirt/node/plugins/setup/network_page.py R scripts/tui/src/ovirt/node/plugins/setup/ping.py R scripts/tui/src/ovirt/node/plugins/setup/remote_storage_page.py R scripts/tui/src/ovirt/node/plugins/setup/security_page.py R scripts/tui/src/ovirt/node/plugins/setup/snmp_page.py R scripts/tui/src/ovirt/node/plugins/setup/status_page.py R scripts/tui/src/ovirt/node/plugins/setup/support_page.py R scripts/tui/src/ovirt/node/plugins/setup/usage.py M scripts/tui/src/ovirt/node/utils/fs.py M scripts/tui/src/ovirt/node/utils/network.py 23 files changed, 70 insertions(+), 47 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-node refs/changes/30/9930/1 diff --git a/scripts/tui/src/ovirt/node/app.py b/scripts/tui/src/ovirt/node/app.py index 4aaa4ab..0373706 100644 --- a/scripts/tui/src/ovirt/node/app.py +++ b/scripts/tui/src/ovirt/node/app.py @@ -42,14 +42,15 @@ ui = None - def __init__(self, ui_backend="urwid"): + def __init__(self, plugin_base, ui_backend="urwid"): ui_backend_class = { "urwid": ovirt.node.ui.tui.UrwidTUI }[ui_backend] self.ui = ui_backend_class(self) + self.plugin_base = plugin_base def __load_plugins(self): - self.plugins = [m.Plugin(self) for m in ovirt.node.plugins.load_all()] + self.plugins = [m.Plugin(self) for m in ovirt.node.plugins.load(self.plugin_base)] for plugin in self.plugins: LOGGER.debug("Loading plugin %s" % plugin) diff --git a/scripts/tui/src/ovirt/node/config/defaults.py b/scripts/tui/src/ovirt/node/config/defaults.py index be2c180..1931d8e 100644 --- a/scripts/tui/src/ovirt/node/config/defaults.py +++ b/scripts/tui/src/ovirt/node/config/defaults.py @@ -29,6 +29,9 @@ central configuration file. Each class (for a component) can have a configure and apply_config method. Look at the CentralNodeConfiguration for more informations. + +Each class should implement a configure method, mainly to define all the +required arguments (or keys). """ import logging @@ -138,12 +141,12 @@ - OVIRT_VLAN - OVIRT_IPV6 """ - keys = ("BOOTIF", - "BOOTPROTO", - "IP_ADDRESS", - "IP_NETMASK", - "IP_GATEWAY", - "VLAN") + keys = ("OVIRT_BOOTIF", + "OVIRT_BOOTPROTO", + "OVIRT_IP_ADDRESS", + "OVIRT_IP_NETMASK", + "OVIRT_IP_GATEWAY", + "OVIRT_VLAN") @map_and_update_defaults def configure(self, iface, bootproto, ipaddr=None, netmask=None, gw=None, @@ -152,7 +155,7 @@ class Nameservers(CentralNodeConfiguration): - keys = ("DNS") + keys = ("OVIRT_DNS") @map_and_update_defaults def configure(self, servers): @@ -205,7 +208,7 @@ class Timeservers(CentralNodeConfiguration): - keys = ("NTP") + keys = ("OVIRT_NTP") @map_and_update_defaults def configure(self, servers): @@ -213,8 +216,8 @@ class Syslog(CentralNodeConfiguration): - keys = ("SYSLOG_SERVER", - "SYSLOG_PORT") + keys = ("OVIRT_SYSLOG_SERVER", + "OVIRT_SYSLOG_PORT") @map_and_update_defaults def configure(self, server, port): @@ -222,8 +225,8 @@ class Collectd(CentralNodeConfiguration): - keys = ("COLLECTD_SERVER", - "COLLECTD_PORT") + keys = ("OVIRT_COLLECTD_SERVER", + "OVIRT_COLLECTD_PORT") @map_and_update_defaults def configure(self, server, port): @@ -231,17 +234,17 @@ class RHN(CentralNodeConfiguration): - keys = ("RHN_TYPE", - "RHN_URL", - "RHN_CA_CERT", - "RHN_USERNAME", - "RHN_PASSWORD", - "RHN_PROFILE", - "RHN_ACTIVATIONKEY", - "RHN_ORG", - "RHN_PROXY", - "RHN_PROXYUSER", - "RHN_PROXYPASSWORD") + keys = ("OVIRT_RHN_TYPE", + "OVIRT_RHN_URL", + "OVIRT_RHN_CA_CERT", + "OVIRT_RHN_USERNAME", + "OVIRT_RHN_PASSWORD", + "OVIRT_RHN_PROFILE", + "OVIRT_RHN_ACTIVATIONKEY", + "OVIRT_RHN_ORG", + "OVIRT_RHN_PROXY", + "OVIRT_RHN_PROXYUSER", + "OVIRT_RHN_PROXYPASSWORD") @map_and_update_defaults def configure(self, rhntype, url, ca_cert, username, password, profile, @@ -250,8 +253,8 @@ class KDump(CentralNodeConfiguration): - keys = ("KDUMP_NFS", - "KDUMP_SSH") + keys = ("OVIRT_KDUMP_NFS", + "OVIRT_KDUMP_SSH") @map_and_update_defaults def configure(self, nfs, ssh): @@ -259,10 +262,10 @@ class iSCSI(CentralNodeConfiguration): - keys = ("ISCSI_NODE_NAME", - "ISCSI_TARGET_NAME", - "ISCSI_TARGET_IP", - "ISCSI_TARGET_PORT") + keys = ("OVIRT_ISCSI_NODE_NAME", + "OVIRT_ISCSI_TARGET_NAME", + "OVIRT_ISCSI_TARGET_IP", + "OVIRT_ISCSI_TARGET_PORT") @map_and_update_defaults def configure(self, name, target_name, target_host, target_port): @@ -270,7 +273,7 @@ class SNMP(CentralNodeConfiguration): - keys = ("SNMP_PASSWORD") + keys = ("OVIRT_SNMP_PASSWORD") @map_and_update_defaults def configure(self, password): @@ -278,8 +281,8 @@ class Netconsole(CentralNodeConfiguration): - keys = ("NETCONSOLE_SERVER", - "NETCONSOLE_PORT") + keys = ("OVIRT_NETCONSOLE_SERVER", + "OVIRT_NETCONSOLE_PORT") @map_and_update_defaults def configure(self, server, port): @@ -287,7 +290,7 @@ class CIM(CentralNodeConfiguration): - keys = ("CIM_ENABLED") + keys = ("OVIRT_CIM_ENABLED") @map_and_update_defaults def configure(self, enabled): diff --git a/scripts/tui/src/ovirt/node/main.py b/scripts/tui/src/ovirt/node/main.py index e88cb8b..2e5c3f5 100644 --- a/scripts/tui/src/ovirt/node/main.py +++ b/scripts/tui/src/ovirt/node/main.py @@ -19,12 +19,13 @@ # also available at http://www.gnu.org/copyleft/gpl.html. """ -Create an application instance an start it. +Create an setup application instance an start it. """ import ovirt.node.app +import ovirt.node.plugins.setup if __name__ == '__main__': - app = ovirt.node.app.Application() + app = ovirt.node.app.Application(ovirt.node.plugins.setup) app.run() diff --git a/scripts/tui/src/ovirt/node/plugins/__init__.py b/scripts/tui/src/ovirt/node/plugins/__init__.py index 271f752..fb457c1 100644 --- a/scripts/tui/src/ovirt/node/plugins/__init__.py +++ b/scripts/tui/src/ovirt/node/plugins/__init__.py @@ -24,27 +24,25 @@ import pkgutil import logging -import ovirt.node.plugins import ovirt.node.exceptions LOGGER = logging.getLogger(__name__) -def __walk_plugins(): +def __walk_plugins(module): """Used to find all plugins """ - package = ovirt.node.plugins - for importer, modname, ispkg in pkgutil.iter_modules(package.__path__): + for importer, modname, ispkg in pkgutil.iter_modules(module.__path__): yield (importer, modname, ispkg) -def load_all(): +def load(basemodule): """Load all plugins """ modules = [] - for importer, modname, ispkg in __walk_plugins(): + for importer, modname, ispkg in __walk_plugins(basemodule): #print("Found submodule %s (is a package: %s)" % (modname, ispkg)) - module = __import__("ovirt.node.plugins." + modname, fromlist="dummy") + module = __import__(basemodule.__name__ + "." + modname, fromlist="dummy") #print("Imported", module) modules += [module] return modules diff --git a/scripts/tui/src/ovirt/node/plugins/installer/__init__.py b/scripts/tui/src/ovirt/node/plugins/installer/__init__.py new file mode 100644 index 0000000..a38f201 --- /dev/null +++ b/scripts/tui/src/ovirt/node/plugins/installer/__init__.py @@ -0,0 +1,3 @@ +""" +This package contains all UI plugins for the installer +""" \ No newline at end of file diff --git a/scripts/tui/src/ovirt/node/plugins/setup/__init__.py b/scripts/tui/src/ovirt/node/plugins/setup/__init__.py new file mode 100644 index 0000000..32f8845 --- /dev/null +++ b/scripts/tui/src/ovirt/node/plugins/setup/__init__.py @@ -0,0 +1,3 @@ +""" +This package contains all UI plugins for the setup +""" \ No newline at end of file diff --git a/scripts/tui/src/ovirt/node/plugins/engine_page.py b/scripts/tui/src/ovirt/node/plugins/setup/engine_page.py similarity index 100% rename from scripts/tui/src/ovirt/node/plugins/engine_page.py rename to scripts/tui/src/ovirt/node/plugins/setup/engine_page.py diff --git a/scripts/tui/src/ovirt/node/plugins/example.py b/scripts/tui/src/ovirt/node/plugins/setup/example.py similarity index 100% rename from scripts/tui/src/ovirt/node/plugins/example.py rename to scripts/tui/src/ovirt/node/plugins/setup/example.py diff --git a/scripts/tui/src/ovirt/node/plugins/features.py b/scripts/tui/src/ovirt/node/plugins/setup/features.py similarity index 100% rename from scripts/tui/src/ovirt/node/plugins/features.py rename to scripts/tui/src/ovirt/node/plugins/setup/features.py diff --git a/scripts/tui/src/ovirt/node/plugins/kdump_page.py b/scripts/tui/src/ovirt/node/plugins/setup/kdump_page.py similarity index 100% rename from scripts/tui/src/ovirt/node/plugins/kdump_page.py rename to scripts/tui/src/ovirt/node/plugins/setup/kdump_page.py diff --git a/scripts/tui/src/ovirt/node/plugins/keyboard_page.py b/scripts/tui/src/ovirt/node/plugins/setup/keyboard_page.py similarity index 100% rename from scripts/tui/src/ovirt/node/plugins/keyboard_page.py rename to scripts/tui/src/ovirt/node/plugins/setup/keyboard_page.py diff --git a/scripts/tui/src/ovirt/node/plugins/logging_page.py b/scripts/tui/src/ovirt/node/plugins/setup/logging_page.py similarity index 100% rename from scripts/tui/src/ovirt/node/plugins/logging_page.py rename to scripts/tui/src/ovirt/node/plugins/setup/logging_page.py diff --git a/scripts/tui/src/ovirt/node/plugins/monitoring_page.py b/scripts/tui/src/ovirt/node/plugins/setup/monitoring_page.py similarity index 100% rename from scripts/tui/src/ovirt/node/plugins/monitoring_page.py rename to scripts/tui/src/ovirt/node/plugins/setup/monitoring_page.py diff --git a/scripts/tui/src/ovirt/node/plugins/network_page.py b/scripts/tui/src/ovirt/node/plugins/setup/network_page.py similarity index 98% rename from scripts/tui/src/ovirt/node/plugins/network_page.py rename to scripts/tui/src/ovirt/node/plugins/setup/network_page.py index 8302917..23048c8 100644 --- a/scripts/tui/src/ovirt/node/plugins/network_page.py +++ b/scripts/tui/src/ovirt/node/plugins/setup/network_page.py @@ -52,6 +52,7 @@ return 10 def model(self): + # Pull name-/timeservers from config files (not defaults) nameservers = ovirt.node.config.network.nameservers() for idx, nameserver in enumerate(nameservers): self._model["dns[%d]" % idx] = nameserver diff --git a/scripts/tui/src/ovirt/node/plugins/ping.py b/scripts/tui/src/ovirt/node/plugins/setup/ping.py similarity index 100% rename from scripts/tui/src/ovirt/node/plugins/ping.py rename to scripts/tui/src/ovirt/node/plugins/setup/ping.py diff --git a/scripts/tui/src/ovirt/node/plugins/remote_storage_page.py b/scripts/tui/src/ovirt/node/plugins/setup/remote_storage_page.py similarity index 100% rename from scripts/tui/src/ovirt/node/plugins/remote_storage_page.py rename to scripts/tui/src/ovirt/node/plugins/setup/remote_storage_page.py diff --git a/scripts/tui/src/ovirt/node/plugins/security_page.py b/scripts/tui/src/ovirt/node/plugins/setup/security_page.py similarity index 100% rename from scripts/tui/src/ovirt/node/plugins/security_page.py rename to scripts/tui/src/ovirt/node/plugins/setup/security_page.py diff --git a/scripts/tui/src/ovirt/node/plugins/snmp_page.py b/scripts/tui/src/ovirt/node/plugins/setup/snmp_page.py similarity index 100% rename from scripts/tui/src/ovirt/node/plugins/snmp_page.py rename to scripts/tui/src/ovirt/node/plugins/setup/snmp_page.py diff --git a/scripts/tui/src/ovirt/node/plugins/status_page.py b/scripts/tui/src/ovirt/node/plugins/setup/status_page.py similarity index 100% rename from scripts/tui/src/ovirt/node/plugins/status_page.py rename to scripts/tui/src/ovirt/node/plugins/setup/status_page.py diff --git a/scripts/tui/src/ovirt/node/plugins/support_page.py b/scripts/tui/src/ovirt/node/plugins/setup/support_page.py similarity index 100% rename from scripts/tui/src/ovirt/node/plugins/support_page.py rename to scripts/tui/src/ovirt/node/plugins/setup/support_page.py diff --git a/scripts/tui/src/ovirt/node/plugins/usage.py b/scripts/tui/src/ovirt/node/plugins/setup/usage.py similarity index 100% rename from scripts/tui/src/ovirt/node/plugins/usage.py rename to scripts/tui/src/ovirt/node/plugins/setup/usage.py diff --git a/scripts/tui/src/ovirt/node/utils/fs.py b/scripts/tui/src/ovirt/node/utils/fs.py index 7c8977b..fd72aed 100644 --- a/scripts/tui/src/ovirt/node/utils/fs.py +++ b/scripts/tui/src/ovirt/node/utils/fs.py @@ -31,6 +31,18 @@ LOGGER = logging.getLogger(__name__) +def get_contents(src): + """Read the contents of a file + + Args: + src: The file to be read + Returns: + The contents of src + """ + with open(src, "r") as f: + contents = f.read() + return contents + def copy_contents(src, dst): assert all([os.path.isfile(f) for f in [src, dst]]), \ "Source and destination need to exist" diff --git a/scripts/tui/src/ovirt/node/utils/network.py b/scripts/tui/src/ovirt/node/utils/network.py index 7614774..0130f6b 100644 --- a/scripts/tui/src/ovirt/node/utils/network.py +++ b/scripts/tui/src/ovirt/node/utils/network.py @@ -29,6 +29,7 @@ import glob import ovirt.node.utils.process as process +import ovirt.node.utils.fs import ovirt.node.config.network LOGGER = logging.getLogger(__name__) @@ -39,7 +40,7 @@ # _nm_client = None try: - from gi.repository import NetworkManager, NMClient + from gi.repository import NetworkManager, NMClient # @UnresolvedImport import socket import struct NetworkManager @@ -116,8 +117,8 @@ # Hwaddr hwaddr = "unkown" - with open("/sys/class/net/%s/address" % iface) as macfile: - hwaddr = macfile.read().strip() + hwfilename = "/sys/class/net/%s/address" % iface + hwaddr = ovirt.node.utils.fs.get_contents(hwfilename).strip() info["hwaddr"] = hwaddr # Check bridge -- To view, visit http://gerrit.ovirt.org/9930 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ibfab8322c1c7a1ef59956f2eaf2b1d113c55497a Gerrit-PatchSet: 1 Gerrit-Project: ovirt-node Gerrit-Branch: master Gerrit-Owner: Fabian Deutsch <[email protected]> _______________________________________________ node-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/node-patches
