def get_host(cls, cli, _id, force_create=False, tenant=None): if isinstance(_id, six.string_types) and ('.' in _id or ':' in _id): # it looks like an ip address, find or create the host address, prefix, netmask = converter.parse_host_address(_id) ports = UnityHostIpPortList(cli=cli, address=address) # since tenant is not supported by all kinds of system. So we # should avoid send the tenant request if tenant is None tenant = None if tenant is None else UnityTenant.get(cli, tenant) ports = [port for port in ports if port.host.tenant == tenant] if len(ports) == 1: ret = ports[0].host elif force_create: log.info('cannot find an existing host with ip {}. ' 'create a new host "{}" to attach it.' .format(address, address)) host_type = (HostTypeEnum.SUBNET if netmask else HostTypeEnum.HOST_MANUAL) host_name = ('{}_{}'.format(address, netmask) if netmask else address) host = cls.create(cli, host_name, host_type=host_type, tenant=tenant) if ':' in address: # ipv6 host.add_ip_port(address, v6_prefix_length=prefix) else: # ipv4 host.add_ip_port(address, netmask=netmask) ret = host.update() else: ret = None else: ret = cls.get(cli=cli, _id=_id) return ret
def test_url_to_mask_ipv6_prefix_65(self): cidr = '2001:db8:a0b:12f0::/65' address, prefix, mask = converter.parse_host_address(cidr) assert_that(address, equal_to('2001:db8:a0b:12f0::')) assert_that(mask, equal_to('ffff:ffff:ffff:ffff:8000:0000:0000:0000')) assert_that(prefix, equal_to(65))
def expect_error(): converter.parse_host_address(cidr)
def test_parse_host_address_7_bit(self): cidr = '10.244.211.30/7' address, prefix, mask = converter.parse_host_address(cidr) assert_that(address, equal_to('10.244.211.30')) assert_that(mask, equal_to('254.0.0.0')) assert_that(prefix, equal_to(7))
def test_parse_host_address_ipv6_cidr2(self): cidr = '[2001:db8:a0b:12f0::/64]' address, prefix, mask = converter.parse_host_address(cidr) assert_that(address, equal_to('2001:db8:a0b:12f0::')) assert_that(mask, equal_to('ffff:ffff:ffff:ffff:0000:0000:0000:0000')) assert_that(prefix, equal_to(64))
def test_parse_host_address_29_bit(self): cidr = '10.244.211.30/30' address, prefix, mask = converter.parse_host_address(cidr) assert_that(address, equal_to('10.244.211.30')) assert_that(mask, equal_to('255.255.255.252')) assert_that(prefix, equal_to(30))
def test_parse_host_address_normal(self): cidr = '10.244.211.30/24' address, prefix, mask = converter.parse_host_address(cidr) assert_that(address, equal_to('10.244.211.30')) assert_that(mask, equal_to('255.255.255.0')) assert_that(prefix, equal_to(24))
def test_parse_host_address_no_ip(self): cidr = 'abc.com/32' address, prefix, mask = converter.parse_host_address(cidr) assert_that(address, 'abc.com') assert_that(prefix, none()) assert_that(mask, none())
def test_url_to_host_suffix(self): cidr = '10.0.0.1/32' address, prefix, mask = converter.parse_host_address(cidr) assert_that(address, equal_to('10.0.0.1')) assert_that(prefix, equal_to(32))
def test_parse_host_address_ipv6(self): ipv6 = '2001:db8:a0b:12f0::1%eth0' address, prefix, netmask = converter.parse_host_address(ipv6) assert_that(address, equal_to('2001:db8:a0b:12f0::1%eth0')) assert_that(prefix, equal_to(None)) assert_that(netmask, equal_to(None))