src/modules/actions/driver.py
branchs11-sru10
changeset 2929 60b857b1ce6d
parent 2563 294a870f0cd6
--- a/src/modules/actions/driver.py	Mon Jul 16 14:35:02 2012 +0530
+++ b/src/modules/actions/driver.py	Wed Aug 07 11:06:38 2013 +0530
@@ -85,15 +85,16 @@
                 else:
                         self.attrs["clone_perms"] = new_cloneperms
 
-        def __usr_sbin_init(self):
+        @staticmethod
+        def __usr_sbin_init():
                 """Initialize paths to device management commands that we will
                 execute when handling package driver actions"""
 
                 usr_sbin = DebugValues.get("driver-cmd-dir", "/usr/sbin") + "/"
-                self.__class__.usr_sbin = usr_sbin
-                self.__class__.add_drv = usr_sbin + "add_drv"
-                self.__class__.rem_drv = usr_sbin + "rem_drv"
-                self.__class__.update_drv = usr_sbin + "update_drv"
+                DriverAction.usr_sbin = usr_sbin
+                DriverAction.add_drv = usr_sbin + "add_drv"
+                DriverAction.rem_drv = usr_sbin + "rem_drv"
+                DriverAction.update_drv = usr_sbin + "update_drv"
 
         def __getstate__(self):
                 """This object doesn't have a default __dict__, instead it
@@ -136,6 +137,17 @@
                         print buf,
                         print "-" * 60
 
+        @staticmethod
+        def remove_aliases(driver_name, aliases, image):
+                if not DriverAction.update_drv:
+                        DriverAction.__usr_sbin_init()
+                rem_base = (DriverAction.update_drv, "-b", image.get_root(), "-d")
+                for i in aliases:
+                        args = rem_base + ("-i", '%s' % i, driver_name)
+                        DriverAction.__call(args, "driver (%(name)s) upgrade (removal "
+                            "of alias '%(alias)s')",
+                            {"name": driver_name, "alias": i})
+
         @classmethod
         def __activate_drivers(cls):
                 cls.__call([cls.usr_sbin + "devfsadm", "-u"],
@@ -372,10 +384,8 @@
                 add_base = ( self.update_drv, "-b", image.get_root(), "-a" )
                 rem_base = ( self.update_drv, "-b", image.get_root(), "-d" )
 
-                nalias = set(self.attrlist("alias"))
-                oalias = set(orig.attrlist("alias"))
-                add_alias = nalias - oalias
-                rem_alias = oalias - nalias
+                add_alias = set(self.attrlist("alias")) - \
+                    set(orig.attrlist("alias"))
 
                 nclass = set(self.attrlist("class"))
                 oclass = set(orig.attrlist("class"))
@@ -408,11 +418,8 @@
                             "of alias '%(alias)s')",
                             {"name": self.attrs["name"], "alias": i})
 
-                for i in rem_alias:
-                        args = rem_base + ("-i", '%s' % i, self.attrs["name"])
-                        self.__call(args, "driver (%(name)s) upgrade (removal "
-                            "of alias '%(alias)s')",
-                            {"name": self.attrs["name"], "alias": i})
+                # Removing aliases has already been taken care of in
+                # imageplan.execute by calling remove_aliases.
 
                 # update_drv doesn't do anything with classes, so we have to
                 # futz with driver_classes by hand.