# Copyright (C) 2015-2016 Red Hat, Inc. All rights reserved. # # This copyrighted material is made available to anyone wishing to use, # modify, copy, or redistribute it subject to the terms and conditions # of the GNU General Public License v.2. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import pyudev import threading from .refresh import event_add from . import cfg observer = None observer_lock = threading.RLock() # noinspection PyUnusedLocal def filter_event(action, device): # Filter for events of interest and add a request object to be processed # when appropriate. refresh = False if '.ID_FS_TYPE_NEW' in device: fs_type_new = device['.ID_FS_TYPE_NEW'] if 'LVM' in fs_type_new: refresh = True elif fs_type_new == '': # Check to see if the device was one we knew about if 'DEVNAME' in device: found = cfg.om.get_object_by_lvm_id(device['DEVNAME']) if found: refresh = True if 'DM_LV_NAME' in device: refresh = True if refresh: event_add(('udev',)) def add(): with observer_lock: global observer context = pyudev.Context() monitor = pyudev.Monitor.from_netlink(context) monitor.filter_by('block') observer = pyudev.MonitorObserver(monitor, filter_event) observer.start() def remove(): with observer_lock: global observer if observer: observer.stop() observer = None return True return False