Selaa lähdekoodia

Add setup step in OS morphing tools

Alessandro Pilotti 8 vuotta sitten
vanhempi
sitoutus
53b818c46a

+ 3 - 0
coriolis/osmorphing/manager.py

@@ -53,6 +53,9 @@ def morph_image(origin_provider, destination_provider, connection_info,
     proxy_settings = _get_proxy_settings()
     os_mount_tools.set_proxy(proxy_settings)
 
+    event_manager.progress_update("Preparing for OS partitions discovery")
+    os_mount_tools.setup()
+
     event_manager.progress_update("Discovering and mounting OS partitions")
     os_root_dir, other_mounted_dirs, os_root_dev = os_mount_tools.mount_os()
 

+ 15 - 18
coriolis/osmorphing/osmount/base.py

@@ -21,10 +21,11 @@ class BaseOSMountTools(object):
         self._event_manager = event_manager
         self._ignore_devices = ignore_devices
         self._environment = {}
-        self._connect(connection_info)
+        self._connection_info = connection_info
+        self._connect()
 
     @abc.abstractmethod
-    def _connect(self, connection_info):
+    def _connect(self):
         pass
 
     @abc.abstractmethod
@@ -35,6 +36,9 @@ class BaseOSMountTools(object):
     def check_os(self):
         pass
 
+    def setup(self):
+        pass
+
     @abc.abstractmethod
     def mount_os(self):
         pass
@@ -51,7 +55,10 @@ class BaseOSMountTools(object):
 
 
 class BaseSSHOSMountTools(BaseOSMountTools):
-    def _connect(self, connection_info):
+    @utils.retry_on_error(max_attempts=5, sleep_seconds=3)
+    def _connect(self):
+        connection_info = self._connection_info
+
         ip = connection_info["ip"]
         port = connection_info.get("port", 22)
         username = connection_info["username"]
@@ -67,19 +74,14 @@ class BaseSSHOSMountTools(BaseOSMountTools):
             {"ip": ip, "port": port})
         ssh = paramiko.SSHClient()
         ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
-
-        @utils.retry_on_error(max_attempts=5, sleep_seconds=3)
-        def _ssh_connect():
-            ssh.connect(hostname=ip, port=port, username=username, pkey=pkey,
-                        password=password)
-        _ssh_connect()
-
+        ssh.connect(hostname=ip, port=port, username=username, pkey=pkey,
+                    password=password)
         self._ssh = ssh
 
+    def setup(self):
         if self._allow_ssh_env_vars():
-            # Reconnect after a reload
-            ssh.close()
-            _ssh_connect()
+            self._ssh.close()
+            self._connect()
 
     def _allow_ssh_env_vars(self):
         pass
@@ -139,12 +141,7 @@ class BaseLinuxOSMountTools(BaseSSHOSMountTools):
         LOG.info("Volume block devices: %s", volume_devs)
         return volume_devs
 
-    def _pre_mount_os(self):
-        pass
-
     def mount_os(self):
-        self._pre_mount_os()
-
         dev_paths = []
         other_mounted_dirs = []
 

+ 2 - 1
coriolis/osmorphing/osmount/redhat.py

@@ -18,7 +18,8 @@ class RedHatOSMountTools(base.BaseLinuxOSMountTools):
                 'rhel', 'centos', 'ol']:
             return True
 
-    def _pre_mount_os(self):
+    def setup(self):
+        super(RedHatOSMountTools, self).setup()
         self._exec_cmd("sudo -E yum install -y lvm2")
         self._exec_cmd("sudo modprobe dm-mod")
 

+ 2 - 1
coriolis/osmorphing/osmount/ubuntu.py

@@ -15,7 +15,8 @@ class UbuntuOSMountTools(base.BaseLinuxOSMountTools):
         if os_info and os_info[0] in ('Ubuntu', 'ubuntu'):
             return True
 
-    def _pre_mount_os(self):
+    def setup(self):
+        super(UbuntuOSMountTools, self).setup()
         self._exec_cmd("sudo -E apt-get update -y")
         self._exec_cmd("sudo -E apt-get install lvm2 -y")
         self._exec_cmd("sudo modprobe dm-mod")

+ 3 - 1
coriolis/osmorphing/osmount/windows.py

@@ -15,7 +15,9 @@ LOG = logging.getLogger(__name__)
 
 
 class WindowsMountTools(base.BaseOSMountTools):
-    def _connect(self, connection_info):
+    def _connect(self):
+        connection_info = self._connection_info
+
         host = connection_info["ip"]
         port = connection_info.get("port", 5986)
         username = connection_info["username"]