Vinzenz Feenstra has uploaded a new change for review.

Change subject: Support for mapping image ids to physical devices
......................................................................

Support for mapping image ids to physical devices

Change-Id: Ie8961b3703703df573dbf2f0fca2143b463ae76b
Bug-Url: https://bugzilla.redhat.com/1127607
Signed-off-by: Vinzenz Feenstra <vfeen...@redhat.com>
---
M scripts/Makefile.am
A scripts/diskmapper/Makefile.am
A scripts/diskmapper/diskmapper.el5
A scripts/diskmapper/diskmapper.el6
A scripts/diskmapper/diskmapper.libudev
5 files changed, 141 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-guest-agent 
refs/changes/65/31465/1

diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 83b8cb4..1c07337 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -1,5 +1,6 @@
-SUBDIRS =    \
-    wrappers \
+SUBDIRS =        \
+    diskmapper   \
+    wrappers     \
     $(NULL)
 
 EXTRA_DIST=                    \
diff --git a/scripts/diskmapper/Makefile.am b/scripts/diskmapper/Makefile.am
new file mode 100644
index 0000000..b5d5f7a
--- /dev/null
+++ b/scripts/diskmapper/Makefile.am
@@ -0,0 +1,23 @@
+EXTRA_DIST=\
+    diskmapper.el5     \
+    diskmapper.el6     \
+    diskmapper.libudev \
+    $(NULL)
+
+if INSTALL_DISKMAPPER_EL5
+install-data-hook:
+       $(MKDIR_P) $(DESTDIR)/$(pkgdatadir)
+       $(INSTALL) -m 755 diskmapper.el5 $(DESTDIR)/$(pkgdatadir)/diskmapper
+endif
+
+if INSTALL_DISKMAPPER_EL6
+install-data-hook:
+       $(MKDIR_P) $(DESTDIR)/$(pkgdatadir)
+       $(INSTALL) -m 755 diskmapper.el6 $(DESTDIR)/$(pkgdatadir)/diskmapper
+endif
+
+if INSTALL_DISKMAPPER_LIBUDEV
+install-data-hook:
+       $(MKDIR_P) $(DESTDIR)/$(pkgdatadir)
+       $(INSTALL) -m 755 diskmapper.libudev $(DESTDIR)/$(pkgdatadir)/diskmapper
+endif
diff --git a/scripts/diskmapper/diskmapper.el5 
b/scripts/diskmapper/diskmapper.el5
new file mode 100755
index 0000000..e54e1b5
--- /dev/null
+++ b/scripts/diskmapper/diskmapper.el5
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+for DEVICE in `ls /sys/block`;
+do
+    if [ -e /sys/block/$DEVICE/device/serial ]; then
+        echo -n /dev/$DEVICE
+        echo -n '|'
+        cat /sys/block/$DEVICE/device/serial
+        echo
+    fi
+done
diff --git a/scripts/diskmapper/diskmapper.el6 
b/scripts/diskmapper/diskmapper.el6
new file mode 100755
index 0000000..d0c5593
--- /dev/null
+++ b/scripts/diskmapper/diskmapper.el6
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+for DEVICE in `ls /sys/block`;
+do
+    if [ -e /sys/block/$DEVICE/serial ];
+    then
+        echo -n /dev/$DEVICE
+        echo -n '|'
+        cat /sys/block/$DEVICE/serial
+        echo
+    fi
+done;
diff --git a/scripts/diskmapper/diskmapper.libudev 
b/scripts/diskmapper/diskmapper.libudev
new file mode 100755
index 0000000..b8192ce
--- /dev/null
+++ b/scripts/diskmapper/diskmapper.libudev
@@ -0,0 +1,92 @@
+#!/usr/bin/env python
+
+from ctypes import CDLL, POINTER, c_ulonglong, c_char_p, c_int, Structure
+from ctypes.util import find_library
+
+
+class udev(Structure):
+    pass
+
+
+class udev_enumerate(Structure):
+    pass
+
+
+class udev_list_entry(Structure):
+    pass
+
+
+class udev_device(Structure):
+    pass
+
+
+udev_p = POINTER(udev)
+udev_enumerate_p = POINTER(udev_enumerate)
+udev_list_entry_p = POINTER(udev_list_entry)
+udev_device_p = POINTER(udev_device)
+dev_t = c_ulonglong
+
+
+_SIGNATURES = {
+    'udev': dict(
+        new=([], udev_p),
+        unref=([udev_p], None),
+    ),
+    'udev_enumerate': dict(
+        new=([udev_p], udev_enumerate_p),
+        unref=([udev_enumerate_p], None),
+        add_match_subsystem=([udev_enumerate_p, c_char_p], c_int),
+        add_match_property=([udev_enumerate_p, c_char_p, c_char_p], c_int),
+        scan_devices=([udev_enumerate_p], c_int),
+        get_list_entry=([udev_enumerate_p], udev_list_entry_p)
+    ),
+    'udev_list_entry': dict(
+        get_next=([udev_list_entry_p], udev_list_entry_p),
+        get_name=([udev_list_entry_p], c_char_p),
+    ),
+    'udev_device': dict(
+        new_from_syspath=([udev_p, c_char_p], udev_device_p),
+        unref=([udev_device_p], None),
+        get_devtype=([udev_device_p], c_char_p),
+        get_devnode=([udev_device_p], c_char_p),
+        get_property_value=([udev_device_p, c_char_p], c_char_p)
+    )
+}
+
+
+def load_udev():
+    libudev_name = find_library("udev")
+    ludev = CDLL(libudev_name, use_errno=True)
+    for cls, funcs in _SIGNATURES.iteritems():
+        for name, signature in funcs.iteritems():
+            f = getattr(ludev, '%s_%s' % (cls, name))
+            if f:
+                (argtypes, restype) = signature
+                f.argtypes = argtypes
+                f.restype = restype
+            else:
+                print 'Couldn\'t load', '%s_%s' % (cls, name)
+    return ludev
+
+if __name__ == '__main__':
+    ludev = load_udev()
+    udev = ludev.udev_new()
+    udevenum = ludev.udev_enumerate_new(udev)
+    try:
+        ludev.udev_enumerate_add_match_subsystem(udevenum, "block")
+        ludev.udev_enumerate_scan_devices(udevenum)
+        devices = ludev.udev_enumerate_get_list_entry(udevenum)
+        entry = devices
+        while entry:
+            name = ludev.udev_list_entry_get_name(entry)
+            dev = ludev.udev_device_new_from_syspath(udev, name)
+            devtype = ludev.udev_device_get_devtype(dev)
+            if devtype == "disk":
+                devnode = ludev.udev_device_get_devnode(dev)
+                serial = ludev.udev_device_get_property_value(dev, "ID_SERIAL")
+                if serial:
+                    print '%s|%s' % (devnode, serial)
+            entry = ludev.udev_list_entry_get_next(entry)
+    finally:
+        ludev.udev_enumerate_unref(udevenum)
+        ludev.udev_unref(udev)
\ No newline at end of file


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie8961b3703703df573dbf2f0fca2143b463ae76b
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-guest-agent
Gerrit-Branch: master
Gerrit-Owner: Vinzenz Feenstra <vfeen...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to