Exemple #1
0
    def stabilize(self):
        # Wait for udev to create the devices for the just added disks

        # It is possible when we get here the events for the new devices
        # are not send yet, so sleep to make sure the events are fired
        time.sleep(2)
        udev_settle()
    def offlineSCSIDevice(self):
        f = open("/proc/scsi/scsi", "r")
        lines = f.readlines()
        f.close()
        # alternatively iterate over /sys/bus/scsi/devices/*:0:*:*/

        for line in lines:
            if not line.startswith("Host"):
                continue
            scsihost = string.split(line)
            host = scsihost[1]
            channel = "0"
            id = scsihost[5]
            lun = scsihost[7]
            scsidev = "%s:%s:%s:%s" % (host[4:], channel, id, lun)
            fcpsysfs = "%s/%s" % (scsidevsysfs, scsidev)
            scsidel = "%s/%s/delete" % (scsidevsysfs, scsidev)

            f = open("%s/hba_id" % (fcpsysfs), "r")
            fcphbasysfs = f.readline().strip()
            f.close()
            f = open("%s/wwpn" % (fcpsysfs), "r")
            fcpwwpnsysfs = f.readline().strip()
            f.close()
            f = open("%s/fcp_lun" % (fcpsysfs), "r")
            fcplunsysfs = f.readline().strip()
            f.close()

            if fcphbasysfs == self.devnum and fcpwwpnsysfs == self.wwpn and fcplunsysfs == self.fcplun:
                loggedWriteLineToFile(scsidel, "1")
                udev_settle()
                return

        log.warn("no scsi device found to delete for zfcp %s %s %s" % (self.devnum, self.wwpn, self.fcplun))
Exemple #3
0
    def offlineSCSIDevice(self):
        f = open("/proc/scsi/scsi", "r")
        lines = f.readlines()
        f.close()
        # alternatively iterate over /sys/bus/scsi/devices/*:0:*:*/

        for line in lines:
            if not line.startswith("Host"):
                continue
            scsihost = string.split(line)
            host = scsihost[1]
            channel = "0"
            id = scsihost[5]
            lun = scsihost[7]
            scsidev = "%s:%s:%s:%s" % (host[4:], channel, id, lun)
            fcpsysfs = "%s/%s" % (scsidevsysfs, scsidev)
            scsidel = "%s/%s/delete" % (scsidevsysfs, scsidev)

            f = open("%s/hba_id" % (fcpsysfs), "r")
            fcphbasysfs = f.readline().strip()
            f.close()
            f = open("%s/wwpn" % (fcpsysfs), "r")
            fcpwwpnsysfs = f.readline().strip()
            f.close()
            f = open("%s/fcp_lun" % (fcpsysfs), "r")
            fcplunsysfs = f.readline().strip()
            f.close()

            if fcphbasysfs == self.devnum \
                    and fcpwwpnsysfs == self.wwpn \
                    and fcplunsysfs == self.fcplun:
                loggedWriteLineToFile(scsidel, "1")
                udev_settle()
                return

        log.warn("no scsi device found to delete for zfcp %s %s %s" %
                 (self.devnum, self.wwpn, self.fcplun))
Exemple #4
0
    def onlineDevice(self):
        online = "%s/%s/online" % (zfcpsysfs, self.devnum)
        portadd = "%s/%s/port_add" % (zfcpsysfs, self.devnum)
        portdir = "%s/%s/%s" % (zfcpsysfs, self.devnum, self.wwpn)
        unitadd = "%s/unit_add" % (portdir)
        unitdir = "%s/%s" % (portdir, self.fcplun)
        failed = "%s/failed" % (unitdir)

        if not os.path.exists(online):
            log.info("Freeing zFCP device %s" % (self.devnum, ))
            iutil.execWithRedirect("zfcp_cio_free", ["-d", self.devnum],
                                   stdout="/dev/tty5",
                                   stderr="/dev/tty5")

        if not os.path.exists(online):
            raise ValueError, _(
                "zFCP device %s not found, not even in device ignore list." %
                (self.devnum, ))

        try:
            f = open(online, "r")
            devonline = f.readline().strip()
            f.close()
            if devonline != "1":
                loggedWriteLineToFile(online, "1")
        except IOError as e:
            raise ValueError, _("Could not set zFCP device %(devnum)s "
                                "online (%(e)s).") \
                              % {'devnum': self.devnum, 'e': e}

        if not os.path.exists(portdir):
            if os.path.exists(portadd):
                # older zfcp sysfs interface
                try:
                    loggedWriteLineToFile(portadd, self.wwpn)
                    udev_settle()
                except IOError as e:
                    raise ValueError, _("Could not add WWPN %(wwpn)s to zFCP "
                                        "device %(devnum)s (%(e)s).") \
                                      % {'wwpn': self.wwpn,
                                         'devnum': self.devnum,
                                         'e': e}
            else:
                # newer zfcp sysfs interface with auto port scan
                raise ValueError, _("WWPN %(wwpn)s not found at zFCP device "
                                    "%(devnum)s.") % {
                                        'wwpn': self.wwpn,
                                        'devnum': self.devnum
                                    }
        else:
            if os.path.exists(portadd):
                # older zfcp sysfs interface
                log.info("WWPN %(wwpn)s at zFCP device %(devnum)s already "
                         "there.") % {
                             'wwpn': self.wwpn,
                             'devnum': self.devnum
                         }

        if not os.path.exists(unitdir):
            try:
                loggedWriteLineToFile(unitadd, self.fcplun)
                udev_settle()
            except IOError as e:
                raise ValueError, _("Could not add LUN %(fcplun)s to WWPN "
                                    "%(wwpn)s on zFCP device %(devnum)s "
                                    "(%(e)s).") \
                                  % {'fcplun': self.fcplun, 'wwpn': self.wwpn,
                                     'devnum': self.devnum, 'e': e}
        else:
            raise ValueError, _("LUN %(fcplun)s at WWPN %(wwpn)s on zFCP "
                                "device %(devnum)s already configured.") \
                              % {'fcplun': self.fcplun,
                                 'wwpn': self.wwpn,
                                 'devnum': self.devnum}

        fail = "0"
        try:
            f = open(failed, "r")
            fail = f.readline().strip()
            f.close()
        except IOError as e:
            raise ValueError, _("Could not read failed attribute of LUN "
                                "%(fcplun)s at WWPN %(wwpn)s on zFCP device "
                                "%(devnum)s (%(e)s).") \
                              % {'fcplun': self.fcplun,
                                 'wwpn': self.wwpn,
                                 'devnum': self.devnum,
                                 'e': e}
        if fail != "0":
            self.offlineDevice()
            raise ValueError, _("Failed LUN %(fcplun)s at WWPN %(wwpn)s on "
                                "zFCP device %(devnum)s removed again.") \
                              % {'fcplun': self.fcplun,
                                 'wwpn': self.wwpn,
                                 'devnum': self.devnum}

        return True
Exemple #5
0
    def onlineDevice(self):
        online = "%s/%s/online" %(zfcpsysfs, self.devnum)
        portadd = "%s/%s/port_add" %(zfcpsysfs, self.devnum)
        portdir = "%s/%s/%s" %(zfcpsysfs, self.devnum, self.wwpn)
        unitadd = "%s/unit_add" %(portdir)
        unitdir = "%s/%s" %(portdir, self.fcplun)
        failed = "%s/failed" %(unitdir)

        if not os.path.exists(online):
            log.info("Freeing zFCP device %s" % (self.devnum,))
            iutil.execWithRedirect("zfcp_cio_free", ["-d", self.devnum],
                                   stdout="/dev/tty5", stderr="/dev/tty5")

        if not os.path.exists(online):
            raise ValueError, _(
                "zFCP device %s not found, not even in device ignore list."
                %(self.devnum,))

        try:
            f = open(online, "r")
            devonline = f.readline().strip()
            f.close()
            if devonline != "1":
                loggedWriteLineToFile(online, "1")
        except IOError as e:
            raise ValueError, _("Could not set zFCP device %(devnum)s "
                                "online (%(e)s).") \
                              % {'devnum': self.devnum, 'e': e}

        if not os.path.exists(portdir):
            if os.path.exists(portadd):
                # older zfcp sysfs interface
                try:
                    loggedWriteLineToFile(portadd, self.wwpn)
                    udev_settle()
                except IOError as e:
                    raise ValueError, _("Could not add WWPN %(wwpn)s to zFCP "
                                        "device %(devnum)s (%(e)s).") \
                                      % {'wwpn': self.wwpn,
                                         'devnum': self.devnum,
                                         'e': e}
            else:
                # newer zfcp sysfs interface with auto port scan
                raise ValueError, _("WWPN %(wwpn)s not found at zFCP device "
                                    "%(devnum)s.") % {'wwpn': self.wwpn,
                                                      'devnum': self.devnum}
        else:
            if os.path.exists(portadd):
                # older zfcp sysfs interface
                log.info("WWPN %(wwpn)s at zFCP device %(devnum)s already "
                         "there." % {'wwpn': self.wwpn,
                                     'devnum': self.devnum})

        if not os.path.exists(unitdir):
            try:
                loggedWriteLineToFile(unitadd, self.fcplun)
                udev_settle()
            except IOError as e:
                raise ValueError, _("Could not add LUN %(fcplun)s to WWPN "
                                    "%(wwpn)s on zFCP device %(devnum)s "
                                    "(%(e)s).") \
                                  % {'fcplun': self.fcplun, 'wwpn': self.wwpn,
                                     'devnum': self.devnum, 'e': e}
        else:
            raise ValueError, _("LUN %(fcplun)s at WWPN %(wwpn)s on zFCP "
                                "device %(devnum)s already configured.") \
                              % {'fcplun': self.fcplun,
                                 'wwpn': self.wwpn,
                                 'devnum': self.devnum}

        fail = "0"
        try:
            f = open(failed, "r")
            fail = f.readline().strip()
            f.close()
        except IOError as e:
            raise ValueError, _("Could not read failed attribute of LUN "
                                "%(fcplun)s at WWPN %(wwpn)s on zFCP device "
                                "%(devnum)s (%(e)s).") \
                              % {'fcplun': self.fcplun,
                                 'wwpn': self.wwpn,
                                 'devnum': self.devnum,
                                 'e': e}
        if fail != "0":
            self.offlineDevice()
            raise ValueError, _("Failed LUN %(fcplun)s at WWPN %(wwpn)s on "
                                "zFCP device %(devnum)s removed again.") \
                              % {'fcplun': self.fcplun,
                                 'wwpn': self.wwpn,
                                 'devnum': self.devnum}

        return True
Exemple #6
0
    def onlineDevice(self):
        online = "%s/%s/online" % (zfcpsysfs, self.devnum)
        portadd = "%s/%s/port_add" % (zfcpsysfs, self.devnum)
        portdir = "%s/%s/%s" % (zfcpsysfs, self.devnum, self.wwpn)
        unitadd = "%s/unit_add" % (portdir)
        unitdir = "%s/%s" % (portdir, self.fcplun)
        failed = "%s/failed" % (unitdir)

        try:
            if not os.path.exists(online):
                loggedWriteLineToFile("/proc/cio_ignore", "free %s" % (self.devnum,))
                udev_settle()
        except IOError as e:
            raise ValueError, _("Could not free zFCP device %(devnum)s from " "device ignore list (%(e)s).") % {
                "devnum": self.devnum,
                "e": e,
            }

        if not os.path.exists(online):
            raise ValueError, _("zFCP device %s not found, not even in device ignore list." % (self.devnum,))

        try:
            f = open(online, "r")
            devonline = f.readline().strip()
            f.close()
            if devonline != "1":
                loggedWriteLineToFile(online, "1")
            else:
                log.info("zFCP device %s already online." % (self.devnum,))
        except IOError as e:
            raise ValueError, _("Could not set zFCP device %(devnum)s " "online (%(e)s).") % {
                "devnum": self.devnum,
                "e": e,
            }

        if not os.path.exists(portdir):
            if os.path.exists(portadd):
                # older zfcp sysfs interface
                try:
                    loggedWriteLineToFile(portadd, self.wwpn)
                    udev_settle()
                except IOError as e:
                    raise ValueError, _("Could not add WWPN %(wwpn)s to zFCP " "device %(devnum)s (%(e)s).") % {
                        "wwpn": self.wwpn,
                        "devnum": self.devnum,
                        "e": e,
                    }
            else:
                # newer zfcp sysfs interface with auto port scan
                raise ValueError, _("WWPN %(wwpn)s not found at zFCP device " "%(devnum)s.") % {
                    "wwpn": self.wwpn,
                    "devnum": self.devnum,
                }
        else:
            if os.path.exists(portadd):
                # older zfcp sysfs interface
                log.info("WWPN %(wwpn)s at zFCP device %(devnum)s already " "there.") % {
                    "wwpn": self.wwpn,
                    "devnum": self.devnum,
                }

        if not os.path.exists(unitdir):
            try:
                loggedWriteLineToFile(unitadd, self.fcplun)
                udev_settle()
            except IOError as e:
                raise ValueError, _(
                    "Could not add LUN %(fcplun)s to WWPN " "%(wwpn)s on zFCP device %(devnum)s " "(%(e)s)."
                ) % {"fcplun": self.fcplun, "wwpn": self.wwpn, "devnum": self.devnum, "e": e}
        else:
            raise ValueError, _("LUN %(fcplun)s at WWPN %(wwpn)s on zFCP " "device %(devnum)s already configured.") % {
                "fcplun": self.fcplun,
                "wwpn": self.wwpn,
                "devnum": self.devnum,
            }

        fail = "0"
        try:
            f = open(failed, "r")
            fail = f.readline().strip()
            f.close()
        except IOError as e:
            raise ValueError, _(
                "Could not read failed attribute of LUN "
                "%(fcplun)s at WWPN %(wwpn)s on zFCP device "
                "%(devnum)s (%(e)s)."
            ) % {"fcplun": self.fcplun, "wwpn": self.wwpn, "devnum": self.devnum, "e": e}
        if fail != "0":
            self.offlineDevice()
            raise ValueError, _(
                "Failed LUN %(fcplun)s at WWPN %(wwpn)s on " "zFCP device %(devnum)s removed again."
            ) % {"fcplun": self.fcplun, "wwpn": self.wwpn, "devnum": self.devnum}

        return True