Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
 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))
Ejemplo n.º 3
0
 def expect_error():
     converter.parse_host_address(cidr)
Ejemplo n.º 4
0
 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))
Ejemplo n.º 5
0
 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))
Ejemplo n.º 6
0
 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))
Ejemplo n.º 7
0
 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))
Ejemplo n.º 8
0
 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())
Ejemplo n.º 9
0
 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))
Ejemplo n.º 10
0
 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))