Change in vdsm[master]: v2v: support for importing Xen VMs via libvirt on RHEL hosts

shavivi at redhat.com shavivi at redhat.com
Tue Dec 1 09:54:39 UTC 2015


Shahar Havivi has uploaded a new change for review.

Change subject: v2v: support for importing Xen VMs via libvirt on RHEL hosts
......................................................................

v2v: support for importing Xen VMs via libvirt on RHEL hosts

Adding support for import Xen virtual machines that are running on RHEL
via libvirt.

Change-Id: If544c0247003b6bc7189f72130553b9402dc915d
Signed-off-by: Shahar Havivi <shaharh at redhat.com>
---
M vdsm/v2v.py
1 file changed, 32 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/05/49505/1

diff --git a/vdsm/v2v.py b/vdsm/v2v.py
index 16644e4..2c6a36c 100644
--- a/vdsm/v2v.py
+++ b/vdsm/v2v.py
@@ -52,6 +52,10 @@
 
 _V2V_DIR = os.path.join(P_VDSM_RUN, 'v2v')
 _VIRT_V2V = CommandPath('virt-v2v', '/usr/bin/virt-v2v')
+_SSH_AGENT = CommandPath('ssh-agent', '/usr/bin/ssh-agent')
+_SSH_ADD = CommandPath('ssh-add', '/usr/bin/ssh-add')
+_XEN_SSH_PROTOCOL = 'xen+ssh'
+_SSH_AUTH_RE = '(SSH_AUTH_SOCK)=([^;]+).*'
 _OVF_RESOURCE_CPU = 3
 _OVF_RESOURCE_MEMORY = 4
 _OVF_RESOURCE_NETWORK = 10
@@ -311,7 +315,6 @@
         '''
         do not use directly, use a factory method instead!
         '''
-        self._thread = None
         self._vminfo = vminfo
         self._id = job_id
         self._irs = irs
@@ -323,6 +326,7 @@
         self._current_disk = 1
         self._aborted = False
         self._prepared_volumes = []
+        self._ssh_auth_re = re.compile(_SSH_AUTH_RE)
 
         self._uri = None
         self._username = None
@@ -434,10 +438,36 @@
             self._status = STATUS.DONE
             logging.info('Job %r finished import successfully', self._id)
 
+    def _init_ssh_agent(self):
+        proc = execCmd([_SSH_AGENT.cmd], sync=False,
+                       deathSignal=signal.SIGTERM, nice=NICENESS.HIGH,
+                       ioclass=IOCLASS.IDLE)
+        proc.blocking = True
+        if proc.returncode is not None:
+            err = proc.stderr.read(1024)
+            raise V2VError('Error init ssh-agent, exit code: %r, msg: %s' %
+                           proc.returncode, err)
+
+        m = self._ssh_auth_re.match(proc.stdout.read(1024))
+        # looking for: SSH_AUTH_SOCK=/tmp/ssh-VEE74ObhTWBT/agent.29917
+        env = {m.group(1): m.group(2)}
+
+        proc = execCmd([_SSH_ADD.cmd], sync=False, deathSignal=signal.SIGTERM,
+                       nice=NICENESS.HIGH, ioclass=IOCLASS.IDLE, env=env)
+
+        if proc.returncode is not None:
+            err = proc.stderr.read(1024)
+            raise V2VError('Error init ssh-add, exit code: %r, msg: %s' %
+                           proc.returncode, err)
+        return env
+
     def _execution_environments(self):
         env = {'LIBGUESTFS_BACKEND': 'direct'}
         if 'virtio_iso_path' in self._vminfo:
             env['VIRTIO_WIN'] = self._vminfo['virtio_iso_path']
+
+        if (self._uri.startswith(_XEN_SSH_PROTOCOL)):
+            env.update(self._init_ssh_agent())
         return env
 
     def _wait_for_process(self):
@@ -728,6 +758,7 @@
             _, capacity, alloc = vol.info()
         except libvirt.libvirtError:
             logging.exception("Error getting disk size")
+
         else:
             disk['capacity'] = str(capacity)
             disk['allocation'] = str(alloc)


-- 
To view, visit https://gerrit.ovirt.org/49505
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If544c0247003b6bc7189f72130553b9402dc915d
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Shahar Havivi <shavivi at redhat.com>


More information about the vdsm-patches mailing list