]> git-server-git.apps.pok.os.sepia.ceph.com Git - teuthology.git/commitdiff
kernel: get_image_version()
authorIlya Dryomov <idryomov@redhat.com>
Tue, 9 Dec 2014 12:30:08 +0000 (15:30 +0300)
committerIlya Dryomov <idryomov@redhat.com>
Mon, 15 Dec 2014 12:31:16 +0000 (15:31 +0300)
Use 'dpkg-deb -c' for debs instead of rolling our own.

Signed-off-by: Ilya Dryomov <idryomov@redhat.com>
teuthology/task/kernel.py

index b5939c79e4df67e7046c0939d341ae80121d6c17..f31ea60d3c72d30a1d143a927123daf61e320c6b 100644 (file)
@@ -391,29 +391,8 @@ def install_and_reboot(ctx, config):
             )
 
         # collect kernel image name from the .deb
-        cmdout = StringIO()
-        proc = role_remote.run(
-            args=[
-                # extract the actual boot image name from the deb
-                'dpkg-deb',
-                '--fsys-tarfile',
-                remote_pkg_path(role_remote),
-                run.Raw('|'),
-                'tar',
-                '-t',
-                '-v',
-                '-f', '-',
-                '--wildcards',
-                '--',
-                './boot/vmlinuz-*',
-                run.Raw('|'),
-                'sed',
-                r'-e s;.*\./boot/vmlinuz-;;',
-            ],
-            stdout = cmdout,
-            )
-        kernel_title = cmdout.getvalue().rstrip()
-        cmdout.close()
+        kernel_title = get_image_version(role_remote,
+                                         remote_pkg_path(role_remote))
         log.info('searching for kernel {}'.format(kernel_title))
 
         if kernel_title.endswith("-highbank"):
@@ -832,6 +811,40 @@ def generate_legacy_grub_entry(remote, newversion):
         linenum += 1
     return newgrubconf
 
+def get_image_version(remote, path):
+    """
+    Get kernel image version from (rpm or deb) package.
+
+    :param path: (rpm or deb) package path
+    """
+    if remote.os.package_type == 'rpm':
+        proc = remote.run(
+            args=[
+                'rpm',
+                '-qlp',
+                path
+            ],
+            stdout=StringIO())
+    elif remote.os.package_type == 'deb':
+        proc = remote.run(
+            args=[
+                'dpkg-deb',
+                '-c',
+                path
+            ],
+            stdout=StringIO())
+    else:
+        raise UnsupportedPackageTypeError(remote)
+
+    files = proc.stdout.getvalue()
+    for file in files.split('\n'):
+        if '/boot/vmlinuz-' in file:
+            version = file.split('/boot/vmlinuz-')[1]
+            break
+
+    log.debug("get_image_version: %s", version)
+    return version
+
 def get_version_from_pkg(remote, ostype):
     """
     Round-about way to get the newest kernel uname -r compliant version string