コード例 #1
0
 def test_validate_and_normalize_ip(self):
     ipv4 = "10.0.0.1"
     self.assertEqual(ipv4, validate_and_normalize_ip(ipv4))
     ipv6 = "fe80::204:61ff:fe9d:f156"
     self.assertEqual(ipv6, validate_and_normalize_ip(ipv6.upper()))
     hostname = "test.test.com"
     self.assertRaises(ValueError, validate_and_normalize_ip, hostname)
     hostname = "$blah#"
     self.assertRaises(ValueError, validate_and_normalize_ip, hostname)
コード例 #2
0
ファイル: test_utils.py プロジェクト: bigdig/swift
 def test_validate_and_normalize_ip(self):
     ipv4 = "10.0.0.1"
     self.assertEqual(ipv4, validate_and_normalize_ip(ipv4))
     ipv6 = "fe80::204:61ff:fe9d:f156"
     self.assertEqual(ipv6, validate_and_normalize_ip(ipv6.upper()))
     hostname = "test.test.com"
     self.assertRaises(ValueError,
                       validate_and_normalize_ip, hostname)
     hostname = "$blah#"
     self.assertRaises(ValueError,
                       validate_and_normalize_ip, hostname)
コード例 #3
0
ファイル: ringbuilder.py プロジェクト: gayana06/Thesis
def _parse_address(rest):
    if rest.startswith('['):
        # remove first [] for ip
        rest = rest.replace('[', '', 1).replace(']', '', 1)

    pos = 0
    while (pos < len(rest) and
           not (rest[pos] == 'R' or rest[pos] == '/')):
        pos += 1
    address = rest[:pos]
    rest = rest[pos:]

    port_start = address.rfind(':')
    if port_start == -1:
        raise ValueError('Invalid port in add value')

    ip = address[:port_start]
    try:
        port = int(address[(port_start + 1):])
    except (TypeError, ValueError):
        raise ValueError(
            'Invalid port %s in add value' % address[port_start:])

    # if this is an ipv6 address then we want to convert it
    # to all lowercase and use its fully expanded representation
    # to make searches easier
    ip = validate_and_normalize_ip(ip)

    return (ip, port, rest)
コード例 #4
0
ファイル: ringbuilder.py プロジェクト: Dynavisor/swift
def _parse_address(rest):
    if rest.startswith('['):
        # remove first [] for ip
        rest = rest.replace('[', '', 1).replace(']', '', 1)

    pos = 0
    while (pos < len(rest) and not (rest[pos] == 'R' or rest[pos] == '/')):
        pos += 1
    address = rest[:pos]
    rest = rest[pos:]

    port_start = address.rfind(':')
    if port_start == -1:
        raise ValueError('Invalid port in add value')

    ip = address[:port_start]
    try:
        port = int(address[(port_start + 1):])
    except (TypeError, ValueError):
        raise ValueError('Invalid port %s in add value' % address[port_start:])

    # if this is an ipv6 address then we want to convert it
    # to all lowercase and use its fully expanded representation
    # to make searches easier
    ip = validate_and_normalize_ip(ip)

    return (ip, port, rest)
コード例 #5
0
ファイル: ringbuilder.py プロジェクト: famenthol/openstack
def calculate_change_value(change_value, change, v_name, v_name_port):
    ip = ''
    if change_value and change_value[0].isdigit():
        i = 1
        while (i < len(change_value) and
               change_value[i] in '0123456789.'):
            i += 1
        ip = change_value[:i]
        change_value = change_value[i:]
    elif change_value and change_value.startswith('['):
        i = 1
        while i < len(change_value) and change_value[i] != ']':
            i += 1
        i += 1
        ip = change_value[:i].lstrip('[').rstrip(']')
        change_value = change_value[i:]
    if ip:
        change[v_name] = validate_and_normalize_ip(ip)
    if change_value.startswith(':'):
        i = 1
        while i < len(change_value) and change_value[i].isdigit():
            i += 1
        change[v_name_port] = int(change_value[1:i])
        change_value = change_value[i:]
    return change_value
コード例 #6
0
ファイル: ringbuilder.py プロジェクト: bebule/swift
def calculate_change_value(change_value, change, v_name, v_name_port):
    ip = ''
    if change_value and change_value[0].isdigit():
        i = 1
        while (i < len(change_value) and
               change_value[i] in '0123456789.'):
            i += 1
        ip = change_value[:i]
        change_value = change_value[i:]
    elif change_value and change_value.startswith('['):
        i = 1
        while i < len(change_value) and change_value[i] != ']':
            i += 1
        i += 1
        ip = change_value[:i].lstrip('[').rstrip(']')
        change_value = change_value[i:]
    if ip:
        change[v_name] = validate_and_normalize_ip(ip)
    if change_value.startswith(':'):
        i = 1
        while i < len(change_value) and change_value[i].isdigit():
            i += 1
        change[v_name_port] = int(change_value[1:i])
        change_value = change_value[i:]
    return change_value
コード例 #7
0
ファイル: ringbuilder.py プロジェクト: tipabu/swift
def calculate_change_value(change_value, change, v_name, v_name_port):
    ip = ""
    if change_value and change_value[0].isdigit():
        i = 1
        while i < len(change_value) and change_value[i] in "0123456789.":
            i += 1
        ip = change_value[:i]
        change_value = change_value[i:]
    elif change_value and change_value.startswith("["):
        i = 1
        while i < len(change_value) and change_value[i] != "]":
            i += 1
        i += 1
        ip = change_value[:i].lstrip("[").rstrip("]")
        change_value = change_value[i:]
    if ip:
        change[v_name] = validate_and_normalize_ip(ip)
    if change_value.startswith(":"):
        i = 1
        while i < len(change_value) and change_value[i].isdigit():
            i += 1
        change[v_name_port] = int(change_value[1:i])
        change_value = change_value[i:]
    return change_value
コード例 #8
0
ファイル: ringbuilder.py プロジェクト: BjoernT/swift
def _parse_set_info_values(argvish):

    new_cmd_format, opts, args = validate_args(argvish)

    # We'll either parse the all-in-one-string format or the
    # --options format,
    # but not both. If both are specified, raise an error.
    if not new_cmd_format:
        if len(args) % 2 != 0:
            print(Commands.search.__doc__.strip())
            exit(EXIT_ERROR)

        searches_and_changes = izip(islice(argvish, 0, len(argvish), 2),
                                    islice(argvish, 1, len(argvish), 2))

        for search_value, change_value in searches_and_changes:
            devs = builder.search_devs(parse_search_value(search_value))
            change = {}
            ip = ''
            if change_value and change_value[0].isdigit():
                i = 1
                while (i < len(change_value) and
                       change_value[i] in '0123456789.'):
                    i += 1
                ip = change_value[:i]
                change_value = change_value[i:]
            elif change_value and change_value.startswith('['):
                i = 1
                while i < len(change_value) and change_value[i] != ']':
                    i += 1
                i += 1
                ip = change_value[:i].lstrip('[').rstrip(']')
                change_value = change_value[i:]
            if ip:
                change['ip'] = validate_and_normalize_ip(ip)
            if change_value.startswith(':'):
                i = 1
                while i < len(change_value) and change_value[i].isdigit():
                    i += 1
                change['port'] = int(change_value[1:i])
                change_value = change_value[i:]
            if change_value.startswith('R'):
                change_value = change_value[1:]
                replication_ip = ''
                if change_value and change_value[0].isdigit():
                    i = 1
                    while (i < len(change_value) and
                           change_value[i] in '0123456789.'):
                        i += 1
                    replication_ip = change_value[:i]
                    change_value = change_value[i:]
                elif change_value and change_value.startswith('['):
                    i = 1
                    while i < len(change_value) and change_value[i] != ']':
                        i += 1
                    i += 1
                    replication_ip = \
                        change_value[:i].lstrip('[').rstrip(']')
                    change_value = change_value[i:]
                if replication_ip:
                    change['replication_ip'] = \
                        validate_and_normalize_ip(replication_ip)
                if change_value.startswith(':'):
                    i = 1
                    while i < len(change_value) and change_value[i].isdigit():
                        i += 1
                    change['replication_port'] = int(change_value[1:i])
                    change_value = change_value[i:]
            if change_value.startswith('/'):
                i = 1
                while i < len(change_value) and change_value[i] != '_':
                    i += 1
                change['device'] = change_value[1:i]
                change_value = change_value[i:]
            if change_value.startswith('_'):
                change['meta'] = change_value[1:]
                change_value = ''
            if change_value or not change:
                raise ValueError('Invalid set info change value: %s' %
                                 repr(argvish[1]))
            _set_info_values(devs, change)
    else:
        devs = builder.search_devs(parse_search_values_from_opts(opts))
        change = parse_change_values_from_opts(opts)
        _set_info_values(devs, change)
コード例 #9
0
def _parse_set_info_values(argvish):

    new_cmd_format, opts, args = validate_args(argvish)

    # We'll either parse the all-in-one-string format or the
    # --options format,
    # but not both. If both are specified, raise an error.
    if not new_cmd_format:
        if len(args) % 2 != 0:
            print(Commands.search.__doc__.strip())
            exit(EXIT_ERROR)

        searches_and_changes = izip(islice(argvish, 0, len(argvish), 2),
                                    islice(argvish, 1, len(argvish), 2))

        for search_value, change_value in searches_and_changes:
            devs = builder.search_devs(parse_search_value(search_value))
            change = {}
            ip = ''
            if len(change_value) and change_value[0].isdigit():
                i = 1
                while (i < len(change_value)
                       and change_value[i] in '0123456789.'):
                    i += 1
                ip = change_value[:i]
                change_value = change_value[i:]
            elif len(change_value) and change_value[0] == '[':
                i = 1
                while i < len(change_value) and change_value[i] != ']':
                    i += 1
                i += 1
                ip = change_value[:i].lstrip('[').rstrip(']')
                change_value = change_value[i:]
            if ip:
                change['ip'] = validate_and_normalize_ip(ip)
            if change_value.startswith(':'):
                i = 1
                while i < len(change_value) and change_value[i].isdigit():
                    i += 1
                change['port'] = int(change_value[1:i])
                change_value = change_value[i:]
            if change_value.startswith('R'):
                change_value = change_value[1:]
                replication_ip = ''
                if len(change_value) and change_value[0].isdigit():
                    i = 1
                    while (i < len(change_value)
                           and change_value[i] in '0123456789.'):
                        i += 1
                    replication_ip = change_value[:i]
                    change_value = change_value[i:]
                elif len(change_value) and change_value[0] == '[':
                    i = 1
                    while i < len(change_value) and change_value[i] != ']':
                        i += 1
                    i += 1
                    replication_ip = \
                        change_value[:i].lstrip('[').rstrip(']')
                    change_value = change_value[i:]
                if replication_ip:
                    change['replication_ip'] = \
                        validate_and_normalize_ip(replication_ip)
                if change_value.startswith(':'):
                    i = 1
                    while i < len(change_value) and change_value[i].isdigit():
                        i += 1
                    change['replication_port'] = int(change_value[1:i])
                    change_value = change_value[i:]
            if change_value.startswith('/'):
                i = 1
                while i < len(change_value) and change_value[i] != '_':
                    i += 1
                change['device'] = change_value[1:i]
                change_value = change_value[i:]
            if change_value.startswith('_'):
                change['meta'] = change_value[1:]
                change_value = ''
            if change_value or not change:
                raise ValueError('Invalid set info change value: %s' %
                                 repr(argvish[1]))
            _set_info_values(devs, change)
    else:
        devs = builder.search_devs(parse_search_values_from_opts(opts))
        change = parse_change_values_from_opts(opts)
        _set_info_values(devs, change)
コード例 #10
0
ファイル: ringbuilder.py プロジェクト: iloveyou416068/swift-1
def _parse_set_info_values(argvish):

    new_cmd_format, opts, args = validate_args(argvish)

    # We'll either parse the all-in-one-string format or the
    # --options format,
    # but not both. If both are specified, raise an error.
    if not new_cmd_format:
        if len(args) % 2 != 0:
            print(Commands.search.__doc__.strip())
            exit(EXIT_ERROR)

        searches_and_changes = izip(islice(argvish, 0, len(argvish), 2), islice(argvish, 1, len(argvish), 2))

        for search_value, change_value in searches_and_changes:
            devs = builder.search_devs(parse_search_value(search_value))
            change = {}
            ip = ""
            if len(change_value) and change_value[0].isdigit():
                i = 1
                while i < len(change_value) and change_value[i] in "0123456789.":
                    i += 1
                ip = change_value[:i]
                change_value = change_value[i:]
            elif len(change_value) and change_value[0] == "[":
                i = 1
                while i < len(change_value) and change_value[i] != "]":
                    i += 1
                i += 1
                ip = change_value[:i].lstrip("[").rstrip("]")
                change_value = change_value[i:]
            if ip:
                change["ip"] = validate_and_normalize_ip(ip)
            if change_value.startswith(":"):
                i = 1
                while i < len(change_value) and change_value[i].isdigit():
                    i += 1
                change["port"] = int(change_value[1:i])
                change_value = change_value[i:]
            if change_value.startswith("R"):
                change_value = change_value[1:]
                replication_ip = ""
                if len(change_value) and change_value[0].isdigit():
                    i = 1
                    while i < len(change_value) and change_value[i] in "0123456789.":
                        i += 1
                    replication_ip = change_value[:i]
                    change_value = change_value[i:]
                elif len(change_value) and change_value[0] == "[":
                    i = 1
                    while i < len(change_value) and change_value[i] != "]":
                        i += 1
                    i += 1
                    replication_ip = change_value[:i].lstrip("[").rstrip("]")
                    change_value = change_value[i:]
                if replication_ip:
                    change["replication_ip"] = validate_and_normalize_ip(replication_ip)
                if change_value.startswith(":"):
                    i = 1
                    while i < len(change_value) and change_value[i].isdigit():
                        i += 1
                    change["replication_port"] = int(change_value[1:i])
                    change_value = change_value[i:]
            if change_value.startswith("/"):
                i = 1
                while i < len(change_value) and change_value[i] != "_":
                    i += 1
                change["device"] = change_value[1:i]
                change_value = change_value[i:]
            if change_value.startswith("_"):
                change["meta"] = change_value[1:]
                change_value = ""
            if change_value or not change:
                raise ValueError("Invalid set info change value: %s" % repr(argvish[1]))
            _set_info_values(devs, change)
    else:
        devs = builder.search_devs(parse_search_values_from_opts(opts))
        change = parse_change_values_from_opts(opts)
        _set_info_values(devs, change)