[openstack-dev] [Neutron] Find the compute host on which a VM runs
Mathieu Rohon
mathieu.rohon at gmail.com
Mon Nov 25 09:29:46 UTC 2013
On Thu, Nov 21, 2013 at 6:03 PM, Aaron Rosen <arosen at nicira.com> wrote:
>
>
>
> On Thu, Nov 21, 2013 at 8:12 AM, Robert Kukura <rkukura at redhat.com> wrote:
>>
>> On 11/21/2013 04:20 AM, Stefan Apostoaie wrote:
>> > Hello again,
>> >
>> > I studied the portbindings extension (the quantum.db.portbindings_db and
>> > quantum.extensions.portbindings modules). However it's unclear for me
>> > who sets the portbindings.HOST_ID attribute. I ran some tests with OVS:
>> > called quantum port-create command and
>> > the OVSQuantumPluginV2.create_port method got called and it had
>> > 'binding:host_id': <object object at <memory_address>>. If I print out
>> > the port object I have 'binding:host_id': None.
>> >
>> > What other plugins are doing:
>> > 1. extend the quantum.db.portbindings_db.PortBindingMixin class
>> > 2. call the _process_portbindings_create_and_update method in
>> > create/update port
>>
>> Take look at how the ML2 plugin handles port binding and uses
>> binding:host_id with its set of registered MechanismDrivers. It does not
>> use the mixin class because the values of binding:vif_type and other
>> portbinding attributes vary depending on what MechanismDriver binds the
>> port.
>>
> Hi Bob,
>
> I don't want to reopen a can of worms here but I'm still wondering why
> neutron needs to know the location where ports are (I understand it makes
> sense to have some metadata for network ports (i.e dhcp) as to which agent
> they are mapped to) but not really for ports that are mapped to instances.
>
> For example, in the ML2 case there are agents running on all the hypervisors
> so the agent knows which compute node he is running on and can determine the
> ports on that compute node himself by looking in the ovsdb interface table
> (i.e: external_ids : {attached-mac="fa:16:3e:92:2b:53",
> iface-id="d7bf8418-e4ad-4dd7-8dda-a3c430ef4d9f", iface-status=active,
> vm-id="a9be8cff-87f6-49a0-b355-a53ec1579b56"}) . Where the iface-id is the
> neutron port-id and the vm-id is the nova-instance id. nova-compute puts
> this information in there.
Hi Aaron,
Port-binding is very helpfull for the l2-population mechanism driver, to be able
to create the forwading table for each agent, and to be able to
implement partial-mesh,
where broadcast packet are only sent in tunnel that is concerned by
this packet, not
in every tunnel.
Moreover, there were some bug on live-migration, where the previous
compute-node/agent
send a update_device_down, although it doesn't own the port anymore.
With port_binding,
we can filter the message, and change the status only if the agent own the port.
>
> I also wonder about the merrit of having neutron return which vif_type nova
> should use. Right now most plugins just return:
> {pbin.VIF_TYPE: pbin.VIF_TYPE_OVS} . It seems to me that the
> agent/nova-compute host should know what type of vif plugging to use based
> on the type of node he is (and how he has been configured). I don't think
> neutron should know this information imo.
If you create a port on a compute-node that doesn't have a
ovs-agent, but only has a lb-agent, Neutron will know that, and,
thanks to mechanism
drivers, it will ask nova to create the VM with the good VIF_TYPE(
VIF_TYPE_BRIDGE )
so that this VM can communicate with other VM in its network, but with
another agent type.
Mathieu
> I think I have been missing the reason why we have the port-binding
> extension for a while now . Sorry if I've already brought this up in the
> past. Would you mind shedding some light on this again?
>
> Thanks,
>
> Aaron
>
>
>>
>> In fact, you may want to consider implementing an ML2 MechanismDriver
>> rather than a entire new monolithic plugin - it will save you a lot of
>> work, initially and in the longer term!
>>
>> > What I cannot find is where the portbindings.HOST_ID attribute is being
>> > set.
>>
>> Its set by nova, either on port creation, or as an update to an existing
>> port. See allocate_for_instance() and
>> _populate_neutron_extension_values() in nova/network/neutronv2/api.py.
>>
>> -Bob
>>
>> >
>> > Regards,
>> > Stefan
>> >
>> >
>> > On Fri, Nov 15, 2013 at 10:57 PM, Mark McClain
>> > <mark.mcclain at dreamhost.com <mailto:mark.mcclain at dreamhost.com>> wrote:
>> >
>> > Stefan-
>> >
>> > Your workflow is very similar to many other plugins. You’ll want to
>> > look at implementing the port binding extension in your plugin. The
>> > port binding extension allows Nova to inform Neutron of the host
>> > where the VM is running.
>> >
>> > mark
>> >
>> > On Nov 15, 2013, at 9:55 AM, Stefan Apostoaie <iosstef at gmail.com
>> > <mailto:iosstef at gmail.com>> wrote:
>> >
>> > > Hello,
>> > >
>> > > I'm creating a Neutron/Quantum plugin to work with a networking
>> > controller that takes care of the configuration of the virtual
>> > networks. Basically what we are doing is receive the API calls and
>> > forward them to our controller to run the required configuration on
>> > the compute hosts.
>> > > What I need to know when a create_port call is made to my plugin
>> > is on which compute host the VM is created (so that our controller
>> > will run the configuration on that host). Is there a way to find out
>> > this information from the plugin?
>> > >
>> > > Regards,
>> > > Stefan Apostoaie
>> > > _______________________________________________
>> > > OpenStack-dev mailing list
>> > > OpenStack-dev at lists.openstack.org
>> > <mailto:OpenStack-dev at lists.openstack.org>
>> > > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>> >
>> >
>> > _______________________________________________
>> > OpenStack-dev mailing list
>> > OpenStack-dev at lists.openstack.org
>> > <mailto:OpenStack-dev at lists.openstack.org>
>> > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>> >
>> >
>> >
>> >
>> > _______________________________________________
>> > OpenStack-dev mailing list
>> > OpenStack-dev at lists.openstack.org
>> > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>> >
>>
>>
>> _______________________________________________
>> OpenStack-dev mailing list
>> OpenStack-dev at lists.openstack.org
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
More information about the OpenStack-dev
mailing list