[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [PATCH] Backport Fedora-11 libiscsi iscsi code (#497438)
- From: Joel Granados <jgranado redhat com>
- To: Discussion of Development and Customization of the Red Hat Linux Installer <anaconda-devel-list redhat com>
- Subject: Re: [PATCH] Backport Fedora-11 libiscsi iscsi code (#497438)
- Date: Wed, 6 May 2009 12:05:21 +0200
I didn't find any obvious mistake. I would commit and iron out any
issues afterwards.
Regards.
On Wed, May 06, 2009 at 10:33:39AM +0200, Hans de Goede wrote:
> This patch backports the recent iscsi cleanup work done in Fedora to 5.4,
> significantly cleaning up the iscsi code, and fixing a number of issues,
> most noticably it fixes chap / reverse chap in combination with ibft (#497438)
> ---
> iscsi.py | 573 +++++++++++------------------------------------
> iw/autopart_type.py | 44 +---
> kickstart.py | 4 -
> partitioning.py | 1 -
> scripts/upd-instroot | 2 +
> textw/partition_text.py | 29 +---
> upgrade.py | 3 +
> 7 files changed, 146 insertions(+), 510 deletions(-)
>
> diff --git a/iscsi.py b/iscsi.py
> index 89220c0..1f80600 100644
> --- a/iscsi.py
> +++ b/iscsi.py
> @@ -13,10 +13,8 @@
> #
>
> import os
> -import errno
> -import string
> -import signal
> import iutil
> +import isys
> from flags import flags
> import logging
> import shutil
> @@ -26,13 +24,15 @@ log = logging.getLogger("anaconda")
>
> from rhpl.translate import _, N_
>
> +has_libiscsi = True
> +try:
> + import libiscsi
> +except ImportError:
> + has_libiscsi = False
> +
> # Note that stage2 copies all files under /sbin to /usr/sbin
> -global ISCSID
> ISCSID=""
> -global ISCSIADM
> -ISCSIADM = ""
> INITIATOR_FILE="/etc/iscsi/initiatorname.iscsi"
> -ISCSID_CONF="/etc/iscsi/iscsid.conf"
>
> def find_iscsi_files():
> global ISCSID
> @@ -41,137 +41,23 @@ def find_iscsi_files():
> path="%s/iscsid" % (dir,)
> if os.access(path, os.X_OK):
> ISCSID=path
> - global ISCSIADM
> - if ISCSIADM == "":
> - for dir in ("/usr/sbin", "/tmp/updates", "/mnt/source/RHupdates"):
> - path="%s/iscsiadm" % (dir,)
> - if os.access(path, os.X_OK):
> - ISCSIADM=path
>
> def has_iscsi():
> find_iscsi_files()
> - if ISCSID == "" or ISCSIADM == "":
> + if ISCSID == "" or not has_libiscsi:
> return False
>
> log.info("ISCSID is %s" % (ISCSID,))
> - log.info("ISCSIADM is %s" % (ISCSIADM,))
>
> # make sure the module is loaded
> if not os.access("/sys/module/iscsi_tcp", os.X_OK):
> return False
> return True
>
> -class iscsiTarget:
> - def __init__(self, ipaddr, port=None, user=None, pw=None,
> - user_in=None, pw_in=None, discover=True, login=True):
> - # FIXME: validate ipaddr
> - self.ipaddr = ipaddr
> - if not port: # FIXME: hack hack hack
> - port = 3260
> - self.port = str(port)
> - self.user = user
> - self.password = pw
> - self.user_in = user_in
> - self.password_in = pw_in
> - self._portal = None
> - self._nodes = []
> - self.doDiscovery = discover
> - self.doLogin = login
> -
> - find_iscsi_files()
> -
> - def _getPortal(self):
> - if self._portal is None:
> - argv = [ "-m", "discovery", "-t", "st", "-p", self.ipaddr ]
> - log.debug("iscsiadm %s" %(string.join(argv),))
> - records = iutil.execWithCapture(ISCSIADM, argv)
> - records = records.strip()
> - for line in records.split("\n"):
> - log.debug(" %s" % (line,))
> - if not line or line.find("found!") != -1:
> - log.warn("no record found!")
> - continue
> - pnlist = line.split()
> - if len(pnlist) != 2:
> - log.warn("didn't get what we expected from iscsiadm")
> - continue
> - (portal, node) = pnlist
> - if portal.startswith(self.ipaddr):
> - self._portal = portal
> - self._nodes.append(node)
> - return self._portal
> - portal = property(_getPortal)
> -
> - def _getNode(self):
> - if len(self._nodes) == 0:
> - # _getPortal() fills the list, if possible.
> - self._getPortal()
> - return self._nodes
> - nodes = property(_getNode)
> -
> - def discover(self):
> - argv = [ "-m", "discovery", "-t", "st", "-p",
> - "%s:%s" % (self.ipaddr, self.port) ]
> - log.debug("iscsiadm %s" %(string.join(argv),))
> - rc = iutil.execWithRedirect(ISCSIADM, argv,
> - stdout = "/dev/tty5", stderr="/dev/tty5")
> - if rc != 0:
> - log.warn("iscsiadm failed to discover on %s" %(self.ipaddr,))
> - return False
> - return True
> -
> - def addNode(self, node):
> - if node is None or self.portal is None:
> - log.warn("unable to find portal information")
> - return
> -
> - argv = [ "-m", "node", "-T", node, "-p", self.portal,
> - "-o", "new" ]
> - log.debug("iscsiadm %s" %(string.join(argv),))
> - iutil.execWithRedirect(ISCSIADM, argv,
> - stdout = "/dev/tty5", stderr="/dev/tty5")
> -
> - def loginToNode(self, node):
> - if node is None or self.portal is None:
> - log.warn("unable to find portal information")
> - return
> -
> - argv = [ "-m", "node", "-T", node, "-p", self.portal, "--login" ]
> - log.debug("iscsiadm %s" %(string.join(argv),))
> - rc = iutil.execWithRedirect(ISCSIADM, argv,
> - stdout = "/dev/tty5", stderr="/dev/tty5")
> - if rc != 0:
> - log.warn("iscsiadm failed to login to %s" %(self.ipaddr,))
> - return False
> - return True
> -
> - def login(self):
> - if len(self.nodes) == 0 or self.portal is None:
> - log.warn("unable to find portal information")
> - return False
> -
> -
> - ret = False
> - for node in self.nodes:
> - if self.loginToNode(node):
> - ret = True
> - self.addNode(node)
> -
> - # we return True if there were any successful logins for our portal.
> - return ret
> -
> - def logout(self):
> - for node in self.nodes:
> - argv = [ "-m", "node", "-T", node, "-p", self.portal, "--logout" ]
> - log.debug("iscsiadm %s" %(string.join(argv),))
> - rc = iutil.execWithRedirect(ISCSIADM, argv,
> - stdout = "/dev/tty5", stderr="/dev/tty5")
> -
> -
> def randomIname():
> """Generate a random initiator name the same way as iscsi-iname"""
>
> - s = "iqn.2005-03.com.max:01."
> + s = "iqn.1994-05.com.rhel:01."
> m = md5.md5()
> u = os.uname()
> for i in u:
> @@ -182,249 +68,81 @@ def randomIname():
> s += dig[random.randrange(0, 32)]
> return s
>
> +def stabilize(intf = None):
> + # Wait for udev to create the devices for the just added disks
> + if intf:
> + w = intf.waitWindow(_("Scanning iSCSI nodes"),
> + _("Scanning iSCSI nodes"))
> + time.sleep(2)
> +
> + # ensure we have device nodes for our partitions
> + isys.flushDriveDict()
> + iutil.makeDriveDeviceNodes()
> +
> + if intf:
> + w.pop()
> +
> class iscsi(object):
> def __init__(self):
> - self.fwinfo = self._queryFirmware()
> - self.targets = []
> + self.nodes = []
> self._initiator = ""
> self.initiatorSet = False
> - self.oldInitiatorFile = None
> - self.iscsidStarted = False
> + self.started = False
>
> - if self.fwinfo and self.fwinfo.has_key("iface.initiatorname"):
> - self._initiator = self.fwinfo["iface.initiatorname"]
> - self.initiatorSet = True
> + if flags.ibft:
> + try:
> + initiatorname = libiscsi.get_firmware_initiator_name()
> + self._initiator = initiatorname
> + self.initiatorSet = True
> + except:
> + pass
>
> def _getInitiator(self):
> if self._initiator != "":
> return self._initiator
>
> - if self.fwinfo and self.fwinfo.has_key("iface.initiatorname"):
> - return self.fwinfo["iface.initiatorname"]
> - else:
> - return randomIname()
> + return randomIname()
>
> def _setInitiator(self, val):
> - if self._initiator != "" and val != self._initiator:
> + if self.initiatorSet and val != self._initiator:
> raise ValueError, "Unable to change iSCSI initiator name once set"
> if len(val) == 0:
> raise ValueError, "Must provide a non-zero length string"
> self._initiator = val
> - self.initiatorSet = True
>
> initiator = property(_getInitiator, _setInitiator)
>
> - def _queryFirmware(self):
> - # Example:
> - # [root elm3b87 ~]# iscsiadm -m fw
> - # iface.initiatorname = iqn.2007-05.com.ibm.beaverton.elm3b87:01
> - # iface.hwaddress = 00:14:5e:b3:8e:b2
> -
> - # iface.bootproto = DHCP
> - # or
> - # iface.bootproto = STATIC
> - # iface.ipaddress = 192.168.32.72
> - # iface.subnet_mask = 255.255.252.0
> - # iface.gateway = 192.168.35.254
> -
> - # node.name = iqn.1992-08.com.netapp:sn.84183797
> - # node.conn[0].address = 9.47.67.152
> - # node.conn[0].port = 3260
> -
> - find_iscsi_files()
> -
> - if not has_iscsi():
> + def _startIBFT(self, intf = None):
> + if not flags.ibft:
> return
>
> - retval = {}
> -
> - argv = [ "-m", "fw" ]
> - log.debug("queryFirmware: ISCSIADM is %s" % (ISCSIADM,))
> - result = iutil.execWithCapture(ISCSIADM, argv)
> - result = result.strip()
> -
> - if len(result) == 0 \
> - or result[0].find("iscsiadm -") != -1 \
> - or result[0].find("iscsiadm: ") != -1:
> - log.debug("queryFirmware: iscsiadm %s returns bad output: %s" %
> - (argv,result))
> -
> - # Try querying the node records instead
> - argv = [ "-m", "node", "-o", "show", "-S" ]
> - result = iutil.execWithCapture(ISCSIADM, argv)
> -
> - if len(result) == 0 \
> - or result[0].find("iscsiadm -") != -1 \
> - or result[0].find("iscsiadm: ") != -1:
> - log.debug("queryFirmware: iscsiadm %s returns bad output: %s" %
> - (argv,result))
> - return retval
> -
> - for line in result.split("\n"):
> - SPLIT = " = "
> - idx = line.find(SPLIT)
> - if idx != -1:
> - lhs = line[:idx]
> - rhs = line[idx+len(SPLIT):]
> - retval[lhs] = rhs
> -
> - return retval
> -
> - def _startIscsiDaemon(self):
> - psout = iutil.execWithCapture("/usr/bin/pidof", ["iscsid"])
> - if psout.strip() == "":
> - log.info("iSCSI startup")
> - iutil.execWithRedirect(ISCSID, [],
> - stdout="/dev/tty5", stderr="/dev/tty5")
> - self.iscsidStarted = True
> - time.sleep(2)
> -
> - def _stopIscsiDaemon(self):
> - result = iutil.execWithCapture(ISCSIADM, ["-k", "0"])
> - result.strip()
> - if result == "":
> + try:
> + found_nodes = libiscsi.discover_firmware()
> + except:
> + # an exception here means there is no ibft firmware, just return
> return
>
> - psout = iutil.execWithCapture("/usr/bin/pidof", ["iscsid"])
> - if psout.strip() != "":
> - log.info("iSCSI shutdown")
> - for t in self.targets:
> - t.logout()
> -
> - for pidstr in psout.split():
> - pid = string.atoi(pidstr)
> - log.info("killing %s %d" % (ISCSID, pid))
> + for node in found_nodes:
> + try:
> + node.login()
> + self.nodes.append(node)
> + except:
> + # FIXME, what to do when we cannot log in to a firmware
> + # provided node ??
> + pass
>
> - os.kill(pid, signal.SIGKILL)
> + stabilize(intf)
>
> - self.iscsidStarted = False
> -
> - def shutdown(self):
> - if not has_iscsi():
> + def startup(self, intf = None):
> + if self.started:
> return
>
> - if flags.test:
> - if self.oldInitiatorFile != None:
> - f = open(INITIATOR_FILE, "w")
> - for line in self.oldInitiatorFile:
> - f.write(line)
> - f.close ()
> - self.oldInitiatorFile = None
> - self._stopIscsiDaemon()
> -
> - def updateIscsidConf(self, values):
> - oldIscsidFile = []
> - try:
> - f = open(ISCSID_CONF, "r")
> - oldIscsidFile = f.readlines()
> - f.close()
> - except IOError, x:
> - if x.errno != errno.ENOENT:
> - raise RuntimeError, "Cannot open %s for read." % (ISCSID_CONF,)
> -
> - try:
> - f = open(ISCSID_CONF, "w")
> - except:
> - raise RuntimeError, "Cannot open %s for write." % (ISCSID_CONF,)
> -
> - lines = {}
> - for line in oldIscsidFile:
> - line = line.strip()
> - (k,v) = line.split('=')
> - k = k.strip()
> - v = v.strip()
> -
> - for k,v in values.items():
> - commentK = '#%s' % (k,)
> - if lines.has_key(commentK):
> - del lines[commentK]
> - lines[k] = v
> -
> - for k,v in lines.items():
> - f.write("%s = %s\n" % (k, v))
> - f.close()
> -
> - def loginToDefaultDrive(self):
> - find_iscsi_files()
> -
> - argv = [ "-m", "fw" ]
> - log.debug("iscsiadm %s" % (string.join(argv),))
> - result = iutil.execWithCapture(ISCSIADM, argv)
> - log.debug("iscsiadm result: %s" % (result,))
> -
> - result = result.strip()
> - result = string.split(result, '\n')
> - results = []
> - n = -1
> -
> - in_record = False
> - for x in range(0, len(result)):
> - line = result[x]
> - if line == '# BEGIN RECORD':
> - n += 1
> - results.append({})
> - in_record = True
> - continue
> - elif line == '# END RECORD':
> - in_record = False
> - continue
> - elif in_record:
> - try:
> - (k,v) = line.split(' = ')
> - results[n][k] = v
> - except ValueError:
> - pass
> -
> - for n in range(0, len(results)):
> - record = results[n]
> - replacements = {}
> - for k,v in record.items():
> - if '[0]' in k:
> - replacements[k] = k.replace('[0]','[%s]' % (n,))
> - for k0,k1 in replacements.items():
> - v = record[k0]
> - del record[k0]
> - record[k1] = v
> -
> - self.updateIscsidConf(record)
> -
> - if record.has_key('node.session.auth.username'):
> - username = record['node.session.auth.username']
> - else:
> - username = None
> -
> - if record.has_key('node.session.auth.password'):
> - password = record['node.session.auth.password']
> - else:
> - password = None
> -
> - t = iscsiTarget(ipaddr=record['node.conn[%s].address' % (n,)],
> - port=record['node.conn[%s].port' % (n,)],
> - user=username,
> - pw=password,
> - discover = False)
> - self.targets.append(t)
> -
> - def startIBFT(self):
> - # If there is a default drive in the iSCSI configuration, then
> - # automatically attach to it. Do this before testing the initiator
> - # name, because it is provided by the iBFT too
> -
> - if flags.ibft:
> - self.loginToDefaultDrive()
> -
> - def startup(self, intf = None):
> if not has_iscsi():
> return
>
> - if not self.initiatorSet:
> + if self._initiator == "":
> log.info("no initiator set")
> return
> - if flags.test:
> - if os.access(INITIATOR_FILE, os.R_OK):
> - f = open(INITIATOR_FILE, "r")
> - self.oldInitiatorFile = f.readlines()
> - f.close()
>
> if intf:
> w = intf.waitWindow(_("Initializing iSCSI initiator"),
> @@ -439,129 +157,94 @@ class iscsi(object):
> fd = os.open(INITIATOR_FILE, os.O_RDWR | os.O_CREAT)
> os.write(fd, "InitiatorName=%s\n" %(self.initiator))
> os.close(fd)
> + self.initiatorSet = True
>
> - if not os.path.isdir("/var/lib/iscsi"):
> - os.makedirs("/var/lib/iscsi", 0660)
> for dir in ['ifaces','isns','nodes','send_targets','slp','static']:
> fulldir = "/var/lib/iscsi/%s" % (dir,)
> if not os.path.isdir(fulldir):
> - os.makedirs(fulldir, 0660)
> + os.makedirs(fulldir, 0755)
>
> - self._startIscsiDaemon()
> - self.startIBFT()
> -
> - for t in self.targets:
> - if t.doDiscovery:
> - if not t.discover():
> - continue
> - if t.doLogin:
> - t.login()
> + log.info("iSCSI startup")
> + iutil.execWithRedirect(ISCSID, [],
> + stdout="/dev/tty5", stderr="/dev/tty5")
> + time.sleep(1)
>
> if intf:
> w.pop()
>
> + self._startIBFT(intf)
> + self.started = True
> +
> def addTarget(self, ipaddr, port="3260", user=None, pw=None,
> user_in=None, pw_in=None, intf=None):
> - if not self.iscsidStarted:
> - self.startup(intf)
> - if not self.iscsidStarted:
> - # can't start for some reason.... just fallback I guess
> - return
> -
> - commentUser = '#'
> - commentUser_in = '#'
> -
> - if user is not None or pw is not None:
> - commentUser = ''
> - if user is None:
> - raise ValueError, "user is required"
> - if pw is None:
> - raise ValueError, "pw is required"
> -
> - if user_in is not None or pw_in is not None:
> - commentUser_in = ''
> - if user_in is None:
> - raise ValueError, "user_in is required"
> - if pw_in is None:
> - raise ValueError, "pw_in is required"
> -
> - # If either a user/pw pair was specified or a user_in/pw_in was
> - # specified, then CHAP is specified.
> - if commentUser == '' or commentUser_in == '':
> - commentChap = ''
> - else:
> - commentChap = '#'
> -
> -
> - oldIscsidFile = []
> - try:
> - f = open(ISCSID_CONF, "r")
> - oldIscsidFile = f.readlines()
> - f.close()
> - except IOError, x:
> - if x.errno != errno.ENOENT:
> - raise RuntimeError, "Cannot open %s for read." % (ISCSID_CONF,)
> + authinfo = None
> + found = 0
> + logged_in = 0
>
> - try:
> - f = open(ISCSID_CONF, "w")
> - except:
> - raise RuntimeError, "Cannot open %s for write." % (ISCSID_CONF,)
> -
> - vals = {
> - "node.session.auth.authmethod = ": [commentChap, "CHAP"],
> - "node.session.auth.username = ": [commentUser, user],
> - "node.session.auth.password = ": [commentUser, pw],
> - "node.session.auth.username_in = ": [commentUser_in, user_in],
> - "node.session.auth.password_in = ": [commentUser_in, pw_in],
> - "discovery.sendtargets.auth.authmethod = ": [commentChap, "CHAP"],
> - "discovery.sendtargets.auth.username = ": [commentUser, user],
> - "discovery.sendtargets.auth.password = ": [commentUser, pw],
> - "discovery.sendtargets.auth.username_in = ":
> - [commentUser_in, user_in],
> - "discovery.sendtargets.auth.password_in = ":
> - [commentUser_in, pw_in],
> - }
> -
> - for line in oldIscsidFile:
> - s = line.strip()
> - # grab the cr/lf/cr+lf
> - nl = line[line.find(s)+len(s):]
> - found = False
> - for (k, (c, v)) in vals.items():
> - if line.find(k) != -1:
> - f.write("%s%s%s%s" % (c, k, v, nl))
> - found=True
> - del vals[k]
> - break
> - if not found:
> - f.write(line)
> -
> - for (k, (c, v)) in vals.items():
> - f.write("%s%s%s\n" % (c, k, v))
> - f.close ()
> -
> - t = iscsiTarget(ipaddr, port, user, pw, user_in, pw_in)
> - if not t.discover():
> - return
> - if not t.login():
> - return
> - self.targets.append(t)
> - return
> + if not has_iscsi():
> + raise IOError, _("iSCSI not available")
> + if self._initiator == "":
> + raise ValueError, _("No initiator name set")
> +
> + if user or pw or user_in or pw_in:
> + # Note may raise a ValueError
> + authinfo = libiscsi.chapAuthInfo(username=user, password=pw,
> + reverse_username=user_in,
> + reverse_password=pw_in)
> + self.startup(intf)
> +
> + # Note may raise an IOError
> + found_nodes = libiscsi.discover_sendtargets(address=ipaddr,
> + port=int(port),
> + authinfo=authinfo)
> + if found_nodes == None:
> + raise IOError, _("No iSCSI nodes discovered")
> +
> + if intf:
> + w = intf.waitWindow(_("Logging in to iSCSI nodes"),
> + _("Logging in to iSCSI nodes"))
> +
> + for node in found_nodes:
> + # skip nodes we already have
> + if node in self.nodes:
> + continue
> +
> + found = found + 1
> + try:
> + if (authinfo):
> + node.setAuth(authinfo)
> + node.login()
> + self.nodes.append(node)
> + logged_in = logged_in + 1
> + except:
> + # some nodes may require different credentials
> + pass
> +
> + if intf:
> + w.pop()
> +
> + if found == 0:
> + raise IOError, _("No new iSCSI nodes discovered")
> +
> + if logged_in == 0:
> + raise IOError, _("Could not log in to any of the discovered nodes")
> +
> + stabilize(intf)
>
> def writeKS(self, f):
> if not self.initiatorSet:
> return
> f.write("iscsiname %s\n" %(self.initiator,))
> - for t in self.targets:
> - f.write("iscsi --ipaddr %s --port %s" %(t.ipaddr, t.port))
> - if t.user:
> - f.write(" --user %s" %(t.user,))
> - if t.password:
> - f.write(" --password %s" %(t.password,))
> - if t.user_in:
> - f.write(" --reverse-user %s" % (t.user_in,))
> - if t.password_in:
> - f.write(" --reverse-password %s" % (t.password_in,))
> + for n in self.nodes:
> + f.write("iscsi --ipaddr %s --port %s" %(n.address, n.port))
> + auth = n.getAuth()
> + if auth:
> + f.write(" --user %s" % auth.username)
> + f.write(" --password %s" % auth.password)
> + if len(auth.reverse_username):
> + f.write(" --reverse-user %s" % auth.reverse_username)
> + if len(auth.reverse_password):
> + f.write(" --reverse-password %s" % auth.reverse_password)
> f.write("\n")
>
> def write(self, instPath):
> @@ -576,10 +259,10 @@ class iscsi(object):
> os.close(fd)
>
> # copy "db" files. *sigh*
> - if not os.path.isdir(instPath + "/var/lib/iscsi"):
> - os.makedirs(instPath + "/var/lib/iscsi", 0755)
> - for d in ("/var/lib/iscsi/nodes", "/var/lib/iscsi/send_targets"):
> - if os.path.isdir(d):
> - shutil.copytree(d, instPath + d)
> + if os.path.isdir(instPath + "/var/lib/iscsi"):
> + shutil.rmtree(instPath + "/var/lib/iscsi")
> + if os.path.isdir("/var/lib/iscsi"):
> + shutil.copytree("/var/lib/iscsi", instPath + "/var/lib/iscsi",
> + symlinks=True)
>
> # vim:tw=78:ts=4:et:sw=4
> diff --git a/iw/autopart_type.py b/iw/autopart_type.py
> index 531d456..e8692eb 100644
> --- a/iw/autopart_type.py
> +++ b/iw/autopart_type.py
> @@ -137,7 +137,6 @@ class PartitionTypeWindow(InstallWindow):
> rc = dialog.run()
> if rc == gtk.RESPONSE_CANCEL:
> break
> - return rc
>
> initiator = dxml.get_widget("iscsiInitiatorEntry").get_text()
> initiator.strip()
> @@ -155,35 +154,6 @@ class PartitionTypeWindow(InstallWindow):
> user_in = dxml.get_widget("userinEntry").get_text().strip()
> pw_in = dxml.get_widget("passinEntry").get_text().strip()
>
> - if len(user) == 0:
> - user = None
> - if len(pw) == 0:
> - pw = None
> - if len(user_in) == 0:
> - user_in = None
> - if len(pw_in) == 0:
> - pw_in = None
> -
> - if user is not None or pw is not None:
> - if user is None:
> - self.intf.messageWindow(_("Missing value"),
> - _("CHAP username is required if CHAP password is defined."))
> - continue
> - if pw is None:
> - self.intf.messageWindow(_("Missing value"),
> - _("CHAP password is required if CHAP username is defined."))
> - continue
> -
> - if user_in is not None or pw_in is not None:
> - if user_in is None:
> - self.intf.messageWindow(_("Missing value"),
> - _("Reverse CHAP username is required if reverse CHAP password is defined."))
> - continue
> - if pw_in is None:
> - self.intf.messageWindow(_("Missing value"),
> - _("Reverse CHAP password is required if reverse CHAP username is defined."))
> - continue
> -
> err = None
> try:
> idx = target.rfind(":")
> @@ -202,8 +172,15 @@ class PartitionTypeWindow(InstallWindow):
> self.intf.messageWindow(_("Error with Data"), "%s" %(err,))
> continue
>
> - self.anaconda.id.iscsi.addTarget(ip, port, user, pw, user_in, pw_in,
> - self.intf)
> + try:
> + self.anaconda.id.iscsi.addTarget(ip, port, user, pw, user_in, pw_in,
> + self.intf)
> + except ValueError, e:
> + self.intf.messageWindow(_("Error"), str(e))
> + continue
> + except IOError, e:
> + self.intf.messageWindow(_("Error"), str(e))
> + rc = gtk.RESPONSE_CANCEL
> break
>
> dialog.destroy()
> @@ -270,11 +247,14 @@ class PartitionTypeWindow(InstallWindow):
> dialog.destroy()
>
> if rc != gtk.RESPONSE_CANCEL:
> + w = self.intf.waitWindow(_("Rescanning disks"),
> + _("Rescanning disks"))
> partitioning.partitionObjectsInitialize(self.anaconda)
> createAllowedDrivesStore(self.diskset.disks,
> self.partitions.autoClearPartDrives,
> self.drivelist,
> self.anaconda.updateSrc)
> + w.pop()
>
>
> def getScreen(self, anaconda):
> diff --git a/kickstart.py b/kickstart.py
> index d1631ec..403fe41 100644
> --- a/kickstart.py
> +++ b/kickstart.py
> @@ -215,11 +215,7 @@ class AnacondaKSHandlers(KickstartHandlers):
> def doIscsiName(self, args):
> KickstartHandlers.doIscsiName(self, args)
> self.id.iscsi.initiator = self.ksdata.iscsiname
> -
> - self.id.iscsi.startIBFT()
> self.id.iscsi.startup()
> - # FIXME: flush the drive dict so we figure drives out again
> - isys.flushDriveDict()
>
> def doKey(self, args):
> KickstartHandlers.doKey(self, args)
> diff --git a/partitioning.py b/partitioning.py
> index d281d78..8630655 100644
> --- a/partitioning.py
> +++ b/partitioning.py
> @@ -32,7 +32,6 @@ def partitionObjectsInitialize(anaconda):
> # shut down all dm devices
> anaconda.id.diskset.closeDevices()
> anaconda.id.diskset.stopMdRaid()
> - anaconda.id.iscsi.shutdown()
> anaconda.id.zfcp.shutdown()
>
> # clean slate about drives
> diff --git a/scripts/upd-instroot b/scripts/upd-instroot
> index 097df60..a4ebe3f 100755
> --- a/scripts/upd-instroot
> +++ b/scripts/upd-instroot
> @@ -422,6 +422,7 @@ usr/$LIBDIR/libcrypto*
> usr/$LIBDIR/libbz2*
> usr/$LIBDIR/libdhcp*
> usr/$LIBDIR/libelf*
> +usr/$LIBDIR/libiscsi.so*
> usr/$LIBDIR/libncurses*
> usr/$LIBDIR/libnewt*
> usr/$LIBDIR/libnl*
> @@ -461,6 +462,7 @@ usr/$LIBDIR/python?.?/site-packages/rpmmodule.so
> usr/$LIBDIR/python?.?/site-packages/partedmodule.so
> usr/$LIBDIR/python?.?/site-packages/ixf86configmodule.so
> usr/$LIBDIR/python?.?/site-packages/xf86config.py
> +usr/$LIBDIR/python?.?/site-packages/libiscsimodule.so
> usr/$LIBDIR/python?.?/site-packages/libusermodule.so
> usr/$LIBDIR/python?.?/site-packages/*sqlite*
> usr/$LIBDIR/python?.?/site-packages/rhpl
> diff --git a/textw/partition_text.py b/textw/partition_text.py
> index 723af70..1fba143 100644
> --- a/textw/partition_text.py
> +++ b/textw/partition_text.py
> @@ -1675,7 +1675,7 @@ class PartitionTypeWindow:
> else:
> try:
> return self.addIscsiDriveDialog(screen)
> - except ValueError, e:
> + except (ValueError, IOError), e:
> ButtonChoiceWindow(screen, _("Error"), "%s" %(e,))
> return INSTALL_BACK
>
> @@ -1719,33 +1719,6 @@ class PartitionTypeWindow:
>
> (user, pw, user_in, pw_in) = entries[2:]
>
> - if len(user) == 0:
> - user = None
> - if len(pw) == 0:
> - pw = None
> - if len(user_in) == 0:
> - user_in = None
> - if len(pw_in) == 0:
> - pw_in = None
> -
> - if user is not None or pw is not None:
> - if user is None:
> - ButtonChoiceWindow(screen, _("Missing value"),
> - _("Username is required when password is present."))
> - if pw is None:
> - ButtonChoiceWindow(screen, _("Missing value"),
> - _("Password is required when username is present."))
> -
> - if user_in is not None or pw_in is not None:
> - if user_in is None:
> - ButtonChoiceWindow(screen, _("Missing value"),
> - _("Reverse username is required when"
> - "reverse password is present."))
> - if pw_in is None:
> - ButtonChoiceWindow(screen, _("Missing value"),
> - _("Reverse password is required when"
> - "reverse username is present."))
> -
> target = entries[0].strip()
> try:
> idx = target.rfind(":")
> diff --git a/upgrade.py b/upgrade.py
> index 933104f..5beb8a2 100644
> --- a/upgrade.py
> +++ b/upgrade.py
> @@ -138,6 +138,9 @@ def findExistingRoots(anaconda, upgradeany = 0):
> return [(anaconda.rootPath, 'ext2', "")]
> return []
>
> + # make ibft configured iscsi disks available
> + anaconda.id.iscsi.startup(anaconda.intf)
> +
> anaconda.id.diskset.openDevices()
> anaconda.id.partitions.getEncryptedDevices(anaconda.id.diskset)
>
> --
> 1.6.2.2
>
> _______________________________________________
> Anaconda-devel-list mailing list
> Anaconda-devel-list redhat com
> https://www.redhat.com/mailman/listinfo/anaconda-devel-list
--
Joel Andres Granados
Brno, Czech Republic, Red Hat.
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]