[Openstack] [Quantum][Nova] requested_id and port spec

Nati Ueno nati.ueno at gmail.com
Tue Jul 31 05:28:55 UTC 2012


Hi  Matt, Yong, Dan and folks

> Matt
Thank you for your comment in launchpad
https://bugs.launchpad.net/nova/+bug/1031096

Quantum team get consensus in a Netstack meeting today to propose
 port-id for requested networks. I took the job.
At first, i thought i can write extension for this. But as you say
 we should add port-id for the core API which is only used for quantum API 2.0.
My WIP code is like [1]. This change keep backward compatibility.

> Yong, Dan
Matt said "you'd be breaking API compatibility and thus the API spec."

This work will change API, so some consensus in community is needed to
add port_id.
I wanna discuss about the spec in this thread.
If the community rejects this addition, I'll implement fixed_ip one
 ( see previous my message )

[1] WIP code for adding port_id ( Not tested)

+    def _get_port(self, port_id):
+        if FLAGS.network_api_class !=
+        "nova.network.quantumv2.api.API":
+            msg = _("Unknown argment : port_id")
+            raise exc.HTTPBadRequest(explanation=msg)
+
+        if port_id and not utils.is_uuid_like(port_id):
+            msg = _("Bad port format: port uuid is "
+                    "not in proper format "
+                    "(%s)") % port_id
+            raise exc.HTTPBadRequest(explanation=msg)
+        try:
+            port = quantumv2.get_client(context).list_networks(**search_opts)
+            if port.device_id:
+                raise Exception("Port id %s is already used" % port_id)
+            return port
+        except Exception as e:
+            msg = _("This port_id can't used "
+                    "(%s)") % port_id
+            raise exc.HTTPBadRequest(explanation=msg)
+
     def _get_requested_networks(self, requested_networks):
         """Create a list of requested networks from the networks attribute."""
         networks = []
         for network in requested_networks:
             try:
+                port_id = network.get('port_id', None)
+                if port_id:
+                    port = self._get_port()
+                    network['uuid'] = port.network_id
+                    network['fixed_ip'] = port.fixed_ip
+

Thank you in advance
Nachi Ueno

>> Hi Nachi,
>> It is seemingly a way to make it work, but I think we are thinking to
>> provide 'port-id' or just 'port' to specify the top resource in quantum API.
>> fix ip is not one.
>>
>> Besides, Port can be assigned to more than one fixed IP.
>
>Ah, It it true.
>OK I'll implement port id version.
>
>> Imagine in horizon, we created many networks, ports and subnets, but when
>> booting a VM, we use a fixed_ip to specify our resource indirectly.
>
>> By the way, we should use openstack-dev at list.openstack.org
>
>Sorry, I changed my mail address recently. But  launchpad rejects new
>mail to receive.
>I'll find way to fix this.
>
>Thanks
>
>
>Nachi
>
>> Thanks
>> Yong Sheng Gong
>>
>> -----netstack-bounces+gongysh=cn.ibm.com at lists.launchpad.net wrote: -----
>> To: openstack at lists.openstack.org, netstack at lists.launchpad.net
>> From: Nachi Ueno
>> Sent by: netstack-bounces+gongysh=cn.ibm.com at lists.launchpad.net
>> Date: 07/31/2012 08:33AM
>> Subject: [Netstack] [Quantum][Nova] requested_id and port spec
>>
>> Hi Dan,folks
>>
>> As we talked in netstack IRC meetins, I submit this as bug.
>> https://bugs.launchpad.net/nova/+bug/1031096
>>
>> I tried to write this, but  the code looks very ugly in order to keep
>> backward compatibility.
>> So I wanna propose an alternative design.
>> In this design, we will use fixed_ip as a temporary identifier of the port.
>>
>> 1. create port
>>    fixed_ip assigned
>>
>> 2. specify  the fixed_ip in nova boot
>>
>> 3. If the fixed_ip is specified,
>>   nova.network.quantumv2.api.API will check existing port who use the
>> fixed_ip.
>>
>>   if there are existing port and device_id is None
>>       use the port_id.
>>
>>   if there are no existing port.
>>        create new port with the fixed_ip
>>
>> This approach needs no client side change.
>>
>> Thank you in advance
>> Nachi Ueno
>>
>> --
>> Mailing list: https://launchpad.net/~netstack
>> Post to     : netstack at lists.launchpad.net
>> Unsubscribe : https://launchpad.net/~netstack
>> More help   : https://help.launchpad.net/ListHelp
>>
>--
>Nachi Ueno
>email:nati.ueno at gmail.com
>twitter:http://twitter.com/nati




More information about the Openstack mailing list