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