[Kimchi-devel] [PATCH 4/5] Add a monitor to change iso ownership

lvroyce at linux.vnet.ibm.com lvroyce at linux.vnet.ibm.com
Tue Jun 10 10:06:17 UTC 2014


From: Royce Lv <lvroyce at linux.vnet.ibm.com>

Add a threaded monitor to change file ownership.
Also its pynotify dependecy is added.

Signed-off-by: Royce Lv <lvroyce at linux.vnet.ibm.com>
---
 docs/README.md           |  6 ++++--
 src/kimchi/isomonitor.py | 33 +++++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+), 2 deletions(-)
 create mode 100644 src/kimchi/isomonitor.py

diff --git a/docs/README.md b/docs/README.md
index 63ac760..9f059ca 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -53,7 +53,8 @@ Install Dependencies
                         PyPAM m2crypto python-jsonschema rpm-build \
                         qemu-kvm python-psutil python-ethtool sos \
                         python-ipaddr python-lxml nfs-utils \
-                        iscsi-initiator-utils libxslt pyparted nginx
+                        iscsi-initiator-utils libxslt pyparted nginx \
+                        python-inotify
      # If using RHEL6, install the following additional packages:
      $ sudo yum install python-unittest2 python-ordereddict
      # Restart libvirt to allow configuration changes to take effect
@@ -75,7 +76,8 @@ for more information on how to configure your system to access this repository.
                            python-pam python-m2crypto python-jsonschema \
                            qemu-kvm libtool python-psutil python-ethtool \
                            sosreport python-ipaddr python-lxml nfs-common \
-                           open-iscsi lvm2 xsltproc python-parted nginx
+                           open-iscsi lvm2 xsltproc python-parted nginx \
+                           python-pyinotify
 
     Packages version requirement:
         python-jsonschema >= 1.3.0
diff --git a/src/kimchi/isomonitor.py b/src/kimchi/isomonitor.py
new file mode 100644
index 0000000..c20d71a
--- /dev/null
+++ b/src/kimchi/isomonitor.py
@@ -0,0 +1,33 @@
+import os
+import pyinotify
+
+
+from kimchi.utils import get_qemu_owner
+
+
+class EventHandler(pyinotify.ProcessEvent):
+    def process_IN_CREATE(self, event):
+        uid, gid = get_qemu_owner()
+        os.chown(event.pathname, uid, gid)
+
+
+class pathMonitor(object):
+    def __init__(self):
+        self.wm = pyinotify.WatchManager()
+        self.notifier = pyinotify.ThreadedNotifier(self.wm, EventHandler())
+        self.handlers = dict()
+
+        self.notifier.start()
+
+    def add_monitor_path(self, path):
+        mask = pyinotify.IN_DELETE | pyinotify.IN_CREATE # watched events
+        self.handlers[path] = self.wm.add_watch(path, mask, rec=True)
+
+    def rm_monitor_path(self, path):
+        self.wm.rm_watch(self.handlers.pop(path).values())
+
+    def stop_monitor(self):
+        for path in self.handlers.iterkeys():
+            self.rm_monitor_path(path)
+        self.notifier.stop()
+
-- 
1.8.3.2




More information about the Kimchi-devel mailing list