예제 #1
0
파일: network_link.py 프로젝트: orviz/ooi
 def _get_os_network_ip(self, req, addr):
     if addr["OS-EXT-IPS:type"] == "fixed":
         return network.NetworkResource(title="network", id="fixed"), None
     else:
         floating_ips = self.os_helper.get_floating_ips(req)
         for ip in floating_ips:
             if addr["addr"] == ip["ip"]:
                 net = network.NetworkResource(
                     title="network",
                     id="%s/%s" % (network_api.FLOATING_PREFIX, ip["pool"]))
                 return net, ip["id"]
     raise exception.NetworkNotFound(resource_id=addr)
예제 #2
0
 def test_osnetwork_interface(self):
     c = compute.ComputeResource("foo",
                                 summary="This is a summary",
                                 id=uuid.uuid4().hex)
     n = network.NetworkResource("bar",
                                 summary="This is a summary",
                                 id=uuid.uuid4().hex)
     i = os_network.OSNetworkInterface(c,
                                       n,
                                       "00:01:02:03:04:05",
                                       "127.0.0.1",
                                       pool="foo")
     self.assertEqual('_'.join([c.id, n.id, "127.0.0.1"]), i.id)
     self.assertEqual(i.address, "127.0.0.1")
     self.assertEqual(i.interface, "eth0")
     self.assertEqual(i.mac, "00:01:02:03:04:05")
     self.assertEqual(i.state, "active")
     self.assertIsNone(i.gateway)
     self.assertEqual(network_link.NetworkInterface.kind, i.kind)
     self.assertEqual(2, len(i.mixins))
     self.assertIn(network_link.ip_network_interface, i.mixins)
     # FIXME(enolfc): this won't work without proper object comparison
     # self.assertIn(p, i.mixins)
     has_pool = False
     for m in i.mixins:
         if isinstance(m, os_network.OSFloatingIPPool):
             self.assertEqual(m.term, "foo")
             has_pool = True
             break
     self.assertTrue(has_pool)
     # contains kind and mixins attributes
     for att in network_link.NetworkInterface.kind.attributes:
         self.assertIn(att, i.attributes)
     for att in network_link.ip_network_interface.attributes:
         self.assertIn(att, i.attributes)
예제 #3
0
def _get_network_link_resources(link_list):
    """Create OCCI networkLink instances from json format

    :param link_list: provides by the cloud infrastructure
    """
    occi_network_resources = []
    if link_list:
        for l in link_list:
            compute_id = l['compute_id']
            mac = l.get('mac', None)
            net_pool = l.get('pool', None)
            ip = l.get('ip', None)
            state = l.get('state', None)
            ip_id = l.get('ip_id', None)
            net_id = l['network_id']
            n = network.NetworkResource(title="network", id=net_id)
            c = compute.ComputeResource(title="Compute", id=compute_id)
            iface = os_network.OSNetworkInterface(c,
                                                  n,
                                                  mac,
                                                  ip,
                                                  pool=net_pool,
                                                  ip_id=ip_id,
                                                  state=state)
            occi_network_resources.append(iface)
    return occi_network_resources
예제 #4
0
파일: network_link.py 프로젝트: orviz/ooi
    def create(self, req, body):
        parser = req.get_parser()(req.headers, req.body)
        scheme = {"category": network_link.NetworkInterface.kind}
        obj = parser.parse()
        validator = occi_validator.Validator(obj)
        validator.validate(scheme)

        attrs = obj.get("attributes", {})
        server_id = attrs.get("occi.core.source")
        net_id = attrs.get("occi.core.target")

        # net_id is something like "fixed" or "floating/<pool_name>"
        if net_id == "fixed":
            raise exception.Invalid()
        try:
            _, pool_name = net_id.split("/", 1)
        except ValueError:
            raise exception.NetworkPoolFound(pool=net_id)

        # Allocate IP
        ip = self.os_helper.allocate_floating_ip(req, pool_name)

        # Add it to server
        self.os_helper.associate_floating_ip(req, server_id, ip["id"])
        n = network.NetworkResource(title="network", id=net_id)
        c = compute.ComputeResource(title="Compute", id=server_id)
        l = os_network.OSNetworkInterface(c, n, "mac", ip["ip"])
        return collection.Collection(resources=[l])
예제 #5
0
 def test_getters(self):
     n = network.NetworkResource("foo",
                                 vlan="bar",
                                 label="baz",
                                 state="foobar")
     self.assertEqual("bar", n.vlan)
     self.assertEqual("baz", n.label)
     self.assertEqual("foobar", n.state)
예제 #6
0
파일: test_network.py 프로젝트: orviz/ooi
    def test_index(self, m_float, m_build):
        res = network.NetworkResource(title="foo",
                                      id="foo",
                                      state="active",
                                      mixins=[network.ip_network])
        res_fixed = network.NetworkResource(title="fixed",
                                            id="fixed",
                                            state="active",
                                            mixins=[network.ip_network])

        m_float.return_value = [res]
        m_build.return_value = res_fixed
        ret = self.controller.index(None)
        self.assertIsInstance(ret, collection.Collection)
        self.assertEqual([res, res_fixed], ret.resources)
        m_float.assert_called_with(None)
        m_build.assert_called_with("fixed")
예제 #7
0
def _create_network_link(addr, comp):
    if addr["OS-EXT-IPS:type"] == "floating":
        net_id = network_api.FLOATING_PREFIX
    else:
        net_id = network_api.FIXED_PREFIX
    net = network.NetworkResource(title="network", id=net_id)
    return os_network.OSNetworkInterface(comp, net,
                                         addr["OS-EXT-IPS-MAC:mac_addr"],
                                         addr["addr"])
예제 #8
0
 def test_network(self):
     id = uuid.uuid4().hex
     n = network.NetworkResource("foo", summary="This is a summary", id=id)
     self.assertEqual("foo", n.title)
     self.assertEqual(id, n.id)
     self.assertEqual("This is a summary", n.summary)
     self.assertIsNone(n.vlan)
     self.assertIsNone(n.label)
     self.assertIsNone(n.state)
예제 #9
0
def _build_network(name, prefix=None):
    if prefix:
        network_id = '/'.join([prefix, name])
    else:
        network_id = name
    return network.NetworkResource(title=name,
                                   id=network_id,
                                   state="active",
                                   mixins=[network.ip_network])
예제 #10
0
파일: compute.py 프로젝트: A1ve5/ooi
def _create_network_link(addr, comp, net_id, type_ip):
    if type_ip == "floating":
        net = ip_reservation.IPReservation(title="network",
                                           address=None,
                                           id=net_id)
    else:
        net = network.NetworkResource(title="network", id=net_id)
    return os_network.OSNetworkInterface(comp, net,
                                         addr["OS-EXT-IPS-MAC:mac_addr"],
                                         addr["addr"])
예제 #11
0
 def test_setters(self):
     c = compute.ComputeResource("foo",
                                 summary="This is a summary",
                                 id=uuid.uuid4().hex)
     n = network.NetworkResource("bar",
                                 summary="This is a summary",
                                 id=uuid.uuid4().hex)
     l = network_link.NetworkInterface([], c, n)
     l.mac = "00:00:00:00:00:00"
     self.assertEqual("00:00:00:00:00:00",
                      l.attributes["occi.networkinterface.mac"].value)
예제 #12
0
 def test_networkinterface(self):
     c = compute.ComputeResource("foo",
                                 summary="This is a summary",
                                 id=uuid.uuid4().hex)
     n = network.NetworkResource("bar",
                                 summary="This is a summary",
                                 id=uuid.uuid4().hex)
     l = network_link.NetworkInterface([], c, n)
     self.assertEqual(c, l.source)
     self.assertEqual(n, l.target)
     self.assertIsNone(l.interface)
     self.assertIsNone(l.mac)
     self.assertIsNone(l.state)
예제 #13
0
파일: network_link.py 프로젝트: orviz/ooi
    def index(self, req):
        floating_ips = self.os_helper.get_floating_ips(req)
        occi_link_resources = []
        for ip in floating_ips:
            if ip["instance_id"]:
                net_id = "%s/%s" % (network_api.FLOATING_PREFIX, ip["pool"])
                n = network.NetworkResource(title="network", id=net_id)
                c = compute.ComputeResource(title="Compute",
                                            id=ip["instance_id"])
                # TODO(enolfc): get the MAC?
                iface = os_network.OSNetworkInterface(c, n, "mac", ip["ip"])
                occi_link_resources.append(iface)

        return collection.Collection(resources=occi_link_resources)
예제 #14
0
 def test_getters(self):
     c = compute.ComputeResource("foo",
                                 summary="This is a summary",
                                 id=uuid.uuid4().hex)
     n = network.NetworkResource("bar",
                                 summary="This is a summary",
                                 id=uuid.uuid4().hex)
     i = os_network.OSNetworkInterface(c, n, "00:01:02:03:04:05",
                                       "127.0.0.1")
     i.attributes["occi.networkinterface.address"].value = "192.163.1.2"
     self.assertEqual("192.163.1.2", i.address)
     i.attributes["occi.networkinterface.gateway"].value = "192.163.1.1"
     self.assertEqual("192.163.1.1", i.gateway)
     i.attributes["occi.networkinterface.allocation"].value = "static"
     self.assertEqual("static", i.allocation)
예제 #15
0
 def test_getters(self):
     c = compute.ComputeResource("foo",
                                 summary="This is a summary",
                                 id=uuid.uuid4().hex)
     n = network.NetworkResource("bar",
                                 summary="This is a summary",
                                 id=uuid.uuid4().hex)
     l = network_link.NetworkInterface([],
                                       c,
                                       n,
                                       interface="eth1",
                                       mac="00:01:02:03:04:05",
                                       state="foo")
     self.assertEqual("eth1", l.interface)
     self.assertEqual("00:01:02:03:04:05", l.mac)
     self.assertEqual("foo", l.state)
예제 #16
0
 def _build_os_net_iface(self, req, server_id, addr):
     ip_id = pool = None
     if addr["OS-EXT-IPS:type"] == "fixed":
         net_id = network_api.FIXED_PREFIX
     else:
         net_id = network_api.FLOATING_PREFIX
         floating_ips = self.os_helper.get_floating_ips(req)
         for ip in floating_ips:
             if addr["addr"] == ip["ip"]:
                 ip_id = ip["id"]
                 pool = ip["pool"]
                 break
         else:
             raise exception.NetworkNotFound(resource_id=addr)
     c = compute.ComputeResource(title="Compute", id=server_id)
     n = network.NetworkResource(title="network", id=net_id)
     # TODO(enolfc): get the MAC?
     return os_network.OSNetworkInterface(c, n, "mac", addr["addr"],
                                          ip_id, pool)
예제 #17
0
    def create(self, req, body):
        parser = req.get_parser()(req.headers, req.body)
        scheme = {
            "category": network_link.NetworkInterface.kind,
            "optional_mixins": [
                os_network.OSFloatingIPPool,
            ]
        }
        obj = parser.parse()
        validator = occi_validator.Validator(obj)
        validator.validate(scheme)

        attrs = obj.get("attributes", {})
        _, net_id = helpers.get_id_with_kind(
            req,
            attrs.get("occi.core.target"),
            network.NetworkResource.kind)
        _, server_id = helpers.get_id_with_kind(
            req,
            attrs.get("occi.core.source"),
            compute.ComputeResource.kind)

        # net_id is something like "fixed" or "floating"
        if net_id == network_api.FIXED_PREFIX:
            raise exception.Invalid()
        elif net_id != network_api.FLOATING_PREFIX:
            raise exception.NetworkNotFound(resource_id=net_id)

        pool_name = None
        if os_network.OSFloatingIPPool.scheme in obj["schemes"]:
            pool_name = obj["schemes"][os_network.OSFloatingIPPool.scheme][0]
        # Allocate IP
        ip = self.os_helper.allocate_floating_ip(req, pool_name)

        # Add it to server
        self.os_helper.associate_floating_ip(req, server_id, ip["ip"])
        n = network.NetworkResource(title="network", id=net_id)
        c = compute.ComputeResource(title="Compute", id=server_id)
        l = os_network.OSNetworkInterface(c, n, "mac", ip["ip"])
        return collection.Collection(resources=[l])
예제 #18
0
파일: test_openstack.py 프로젝트: orviz/ooi
 def test_osnetwork_interface(self):
     c = compute.ComputeResource("foo",
                                 summary="This is a summary",
                                 id=uuid.uuid4().hex)
     n = network.NetworkResource("bar",
                                 summary="This is a summary",
                                 id=uuid.uuid4().hex)
     i = os_network.OSNetworkInterface(c, n, "00:01:02:03:04:05",
                                       "127.0.0.1")
     self.assertEqual('_'.join([c.id, "127.0.0.1"]), i.id)
     self.assertEqual(i.address, "127.0.0.1")
     self.assertEqual(i.interface, "eth0")
     self.assertEqual(i.mac, "00:01:02:03:04:05")
     self.assertEqual(i.state, "active")
     self.assertIsNone(i.gateway)
     self.assertEqual(network_link.NetworkInterface.kind, i.kind)
     self.assertIn(network_link.ip_network_interface, i.mixins)
     # contains kind and mixins attributes
     for att in network_link.NetworkInterface.kind.attributes:
         self.assertIn(att, i.attributes)
     for att in network_link.ip_network_interface.attributes:
         self.assertIn(att, i.attributes)
예제 #19
0
파일: compute.py 프로젝트: tdviet/ooi
def _create_network_link(addr, comp, net_id):
    net = network.NetworkResource(title="network", id=net_id)
    return os_network.OSNetworkInterface(comp, net,
                                         addr["OS-EXT-IPS-MAC:mac_addr"],
                                         addr["addr"])
예제 #20
0
 def test_setters(self):
     n = network.NetworkResource("foo")
     n.vlan = "bar"
     self.assertEqual("bar", n.attributes["occi.network.vlan"].value)
     n.label = "baz"
     self.assertEqual("baz", n.attributes["occi.network.label"].value)