[node-patches] Change in ovirt-node[master]: Update the migration script

rbarry at redhat.com rbarry at redhat.com
Thu May 1 14:29:04 UTC 2014


Ryan Barry has uploaded a new change for review.

Change subject: Update the migration script
......................................................................

Update the migration script

Bring the migration script up to date.

Change-Id: I8f559be7bdc53a05f4700a623e83975e606edcf4
Signed-off-by: Ryan Barry <rbarry at redhat.com>
---
M src/ovirt/node/config/migrate.py
1 file changed, 92 insertions(+), 18 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-node refs/changes/02/27302/1

diff --git a/src/ovirt/node/config/migrate.py b/src/ovirt/node/config/migrate.py
index 6267109..ac167b2 100644
--- a/src/ovirt/node/config/migrate.py
+++ b/src/ovirt/node/config/migrate.py
@@ -19,17 +19,70 @@
 # MA  02110-1301, USA.  A copy of the GNU General Public License is
 # also available at http://www.gnu.org/copyleft/gpl.html.
 from ovirt.node import base
+from ovirt.node.config import defaults
 from ovirt.node.utils import AugeasWrapper, network, parse_bool
 from ovirt.node.utils.fs import Config
 from ovirtnode import iscsi, log, ovirtfunctions
 import os
 
 
-class MigrateConfigs(base.Base):
+class ConfigMigrationRunner(base.Base):
+    def run_if_necessary(self):
+        """Migrate the configs if needed
+        """
+        migration_func = self._determine_migration_func()
 
+        if migration_func:
+            self._run(migration_func)
+        else:
+            self.logger.debug("No config migration needed")
+
+    def _determine_migration_func(self):
+        """Determins if a migration and which migration is necessary
+        """
+        migration_func = None
+
+        cfgver = defaults.ConfigVersion().retrieve()["ver"]
+
+        if not Config().exists("/etc/default/ovirt"):
+            # If the cfg file is not persisted, then this is probably
+            # a fresh installation, no migration needed
+            self.logger.info("No migration needed during installation")
+
+        elif cfgver is None:
+            # config is persisted, but no version set, we assume it is an
+            # update from pre ovirt-node-3 to ovirt-node-3
+            def importConfigs():
+                self.logger.info("Assuming pre ovirt-node-3.0 config")
+                ImportConfigs().translate_all()
+
+            migration_func = importConfigs
+
+        return migration_func
+
+    def _run(self, migration_func):
+        try:
+            self.logger.info("Starting config migration")
+
+            # Migrate configs
+            migration_func()
+
+            # And set curret runtime version
+            cfgver = defaults.ConfigVersion()
+            cfgver.set_to_current()
+
+            self.logger.info("Config migration finished (to %s)" %
+                             cfgver.retrieve()["ver"])
+        except:
+            self.logger.exception("Config migration failed")
+
+
+class ImportConfigs(base.Base):
+    """Import the real configs into Node's abstract config
+    """
     def __init__(self):
         self.aug = AugeasWrapper()
-        super(MigrateConfigs, self).__init__()
+        super(ImportConfigs, self).__init__()
 
     def translate_all(self, do_network=True):
         if do_network:
@@ -74,10 +127,10 @@
         if self.__is_persisted("/etc/ssh/sshd_config"):
             pw_auth_enabled = ovirtfunctions.augtool_get(
                 "/files/etc/ssh/sshd_config/PasswordAuthentication")
-            rng_bytes, aes_enabled = ovirtfunctions.rng_status()
+            rng_bytes, aes_disabled = ovirtfunctions.rng_status()
 
             rng_bytes = None if rng_bytes == 0 else rng_bytes
-            aes_disabled = False if aes_enabled == "1" else True
+            aes_disabled = aes_disabled == 1
             ssh_is_enabled = parse_bool(pw_auth_enabled)
 
             if rng_bytes:
@@ -91,22 +144,33 @@
                              "yes")
 
     def translate_network_servers(self):
-        dns = [ovirtfunctions.augtool_get(
-               "/files/etc/resolv.conf/nameserver[1]"),
-               ovirtfunctions.augtool_get(
-                   "/files/etc/resolv.conf/nameserver[2]")]
-        self.aug.set("/files/etc/default/ovirt/OVIRT_DNS",
-                     ",".join((filter(None, dns))))
+        # For all of these, make sure it's not actually set already by
+        # install parameters. If it isn't, we won't overwrite anything
+        # by checking the actual values from the configuration files, which
+        # will properly be set
 
-        ntp = [ovirtfunctions.augtool_get(
-               "/files/etc/ntp.conf/server[1]"),
-               ovirtfunctions.augtool_get(
-                   "/files/etc/ntp.conf/server[2]")]
-        self.aug.set("/files/etc/default/ovirt/OVIRT_NTP",
-                     ",".join((filter(None, ntp))))
+        if self.aug.get('/files/etc/default/ovirt/OVIRT_DNS') is None and \
+                self.__is_persisted("/etc/resolv.conf"):
+            dns = [ovirtfunctions.augtool_get(
+                   "/files/etc/resolv.conf/nameserver[1]"),
+                   ovirtfunctions.augtool_get(
+                       "/files/etc/resolv.conf/nameserver[2]")]
+            self.aug.set("/files/etc/default/ovirt/OVIRT_DNS",
+                         ",".join((filter(None, dns))))
 
-        self.aug.set("/files/etc/default/ovirt/OVIRT_HOSTNAME",
-                     os.uname()[1])
+        if self.aug.get('/files/etc/default/ovirt/OVIRT_NTP') is None and \
+                self.__is_persisted("/etc/ntp.conf"):
+            ntp = [ovirtfunctions.augtool_get(
+                   "/files/etc/ntp.conf/server[1]"),
+                   ovirtfunctions.augtool_get(
+                       "/files/etc/ntp.conf/server[2]")]
+            self.aug.set("/files/etc/default/ovirt/OVIRT_NTP",
+                         ",".join((filter(None, ntp))))
+
+        if self.aug.get('/files/etc/default/ovirt/OVIRT_HOSTNAME') is None \
+                and self.__is_persisted("/etc/hosts"):
+            self.aug.set("/files/etc/default/ovirt/OVIRT_HOSTNAME",
+                         os.uname()[1])
 
     def translate_kdump(self):
         if self.__is_persisted("/etc/kdump.conf"):
@@ -249,6 +313,16 @@
         return Config().exists(path)
 
     def migrate_network_layout(self):
+        bondcfg = defaults.NicBonding().retrieve()
+        netlayoutcfg = defaults.NetworkLayout().retrieve()
+
+        if bondcfg["name"] or netlayoutcfg["layout"]:
+            # We can only reliably import pre node-3.0
+            # network configurations, therefor we abort
+            # the import if it looks like a node-3.0 config
+            self.logger.info("Looks like node-3.0 network, skipping import")
+            return
+
         bridges = [x for x in network.Bridges().ifnames() if
                    x.startswith("br")]
         bridged_nics = [x for x in network.all_ifaces() if


-- 
To view, visit http://gerrit.ovirt.org/27302
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8f559be7bdc53a05f4700a623e83975e606edcf4
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-node
Gerrit-Branch: master
Gerrit-Owner: Ryan Barry <rbarry at redhat.com>



More information about the node-patches mailing list