Exemple #1
0
def assert_valid_iscsi_portal(portal):
    if not isinstance(portal, util.string_types):
        raise ValueError("iSCSI portal (%s) is not a string" % portal)

    m = re.match(ISCSI_PORTAL_REGEX, portal)
    if m is None:
        raise ValueError("iSCSI portal (%s) is not in the format "
                         "(HOST:PORT)" % portal)

    host = m.group('host')
    if host.startswith('[') and host.endswith(']'):
        host = host[1:-1]
        if not util.is_valid_ipv6_address(host):
            raise ValueError("Invalid IPv6 address (%s) in iSCSI portal (%s)" %
                             (host, portal))

    try:
        port = int(m.group('port'))
    except ValueError:
        raise ValueError("iSCSI portal (%s) port (%s) is not an integer" %
                         (portal, m.group('port')))

    return host, port
Exemple #2
0
    def __init__(self, rfc4173):
        auth_m = None
        _rfc4173 = rfc4173
        if not rfc4173.startswith('iscsi:'):
            raise ValueError('iSCSI specification (%s) did not start with '
                             'iscsi:. iSCSI disks must be specified as '
                             'iscsi:[user:password[:initiatoruser:'******'initiatorpassword]@]'
                             'host:proto:port:lun:targetname' % _rfc4173)
        rfc4173 = rfc4173[6:]
        if '@' in rfc4173:
            if rfc4173.count('@') != 1:
                raise ValueError('Only one @ symbol allowed in iSCSI disk '
                                 'specification (%s). iSCSI disks must be '
                                 'specified as'
                                 'iscsi:[user:password[:initiatoruser:'******'initiatorpassword]@]'
                                 'host:proto:port:lun:targetname' % _rfc4173)
            auth, target = rfc4173.split('@')
            auth_m = RFC4173_AUTH_REGEX.match(auth)
            if auth_m is None:
                raise ValueError('Invalid authentication specified for iSCSI '
                                 'disk (%s). iSCSI disks must be specified as '
                                 'iscsi:[user:password[:initiatoruser:'******'initiatorpassword]@]'
                                 'host:proto:port:lun:targetname' % _rfc4173)
        else:
            target = rfc4173

        target_m = RFC4173_TARGET_REGEX.match(target)
        if target_m is None:
            raise ValueError('Invalid target specified for iSCSI disk (%s). '
                             'iSCSI disks must be specified as '
                             'iscsi:[user:password[:initiatoruser:'******'initiatorpassword]@]'
                             'host:proto:port:lun:targetname' % _rfc4173)

        if target_m.group('proto') and target_m.group('proto') != '6':
            LOG.warn('Specified protocol for iSCSI (%s) is unsupported, '
                     'assuming 6 (TCP)', target_m.group('proto'))

        if not target_m.group('host') or not target_m.group('targetname'):
            raise ValueError('Both host and targetname must be specified for '
                             'iSCSI disks')

        if auth_m:
            self.user = auth_m.group('user')
            self.password = auth_m.group('password')
            self.iuser = auth_m.group('initiatoruser')
            self.ipassword = auth_m.group('initiatorpassword')
        else:
            self.user = None
            self.password = None
            self.iuser = None
            self.ipassword = None

        self.host = target_m.group('host')
        self.proto = '6'
        self.lun = int(target_m.group('lun')) if target_m.group('lun') else 0
        self.target = target_m.group('targetname')

        try:
            self.port = int(target_m.group('port')) if target_m.group('port') \
                 else 3260

        except ValueError:
            raise ValueError('Specified iSCSI port (%s) is not an integer' %
                             target_m.group('port'))

        portal = '%s:%s' % (self.host, self.port)
        if self.host.startswith('[') and self.host.endswith(']'):
            self.host = self.host[1:-1]
            if not util.is_valid_ipv6_address(self.host):
                raise ValueError('Specified iSCSI IPv6 address (%s) is not '
                                 'valid' % self.host)
            portal = '[%s]:%s' % (self.host, self.port)
        assert_valid_iscsi_portal(portal)
        self.portal = portal
Exemple #3
0
 def test_is_valid_ipv6_address(self):
     self.assertFalse(util.is_valid_ipv6_address('192.168'))
     self.assertFalse(util.is_valid_ipv6_address('69.89.31.226'))
     self.assertFalse(util.is_valid_ipv6_address('254.254.254.254'))
     self.assertTrue(util.is_valid_ipv6_address('2001:db8::1'))
     self.assertTrue(util.is_valid_ipv6_address('::1'))
     self.assertTrue(
         util.is_valid_ipv6_address(
             '1200:0000:AB00:1234:0000:2552:7777:1313'))
     self.assertFalse(
         util.is_valid_ipv6_address('1200::AB00:1234::2552:7777:1313'))
     self.assertTrue(
         util.is_valid_ipv6_address('21DA:D3:0:2F3B:2AA:FF:FE28:9C5A'))
     self.assertFalse(
         util.is_valid_ipv6_address(
             '1200:0000:AB00:1234:O000:2552:7777:1313'))
     self.assertTrue(
         util.is_valid_ipv6_address('2002:4559:1FE2::4559:1FE2'))
     self.assertTrue(
         util.is_valid_ipv6_address('2002:4559:1fe2:0:0:0:4559:1fe2'))
     self.assertTrue(
         util.is_valid_ipv6_address(
             '2002:4559:1FE2:0000:0000:0000:4559:1FE2'))