Hi Daniel,<div><br></div><div>More comments inline. <br><br><div class="gmail_quote">On Wed, Jan 16, 2013 at 1:48 AM, Daniel P. Berrange <span dir="ltr"><<a href="mailto:berrange@redhat.com" target="_blank">berrange@redhat.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Tue, Jan 15, 2013 at 10:50:55PM -0800, Dan Wendlandt wrote:<br>
> > As an example, when configuring OpenVSwitch one of the pieces of<br>
> > information<br>
> > require is an 'interfaceid'. Previously the libvirt VIF driver set the<br>
> > interfaceid<br>
> > based on the vif['uuid'] field, since that is what quantum expected. This<br>
> > is not<br>
> > portable though. The correct approach is for nova.network.model to have an<br>
> > explicit 'ovs-interfaceid' field and the nova.network.quantumv2.api driver<br>
> > sets this based on the on vif['uuid']. The libvirt VIF driver can now<br>
> > configure<br>
> > OVS with any network driver, not simply Quantum. Similarly for things like<br>
> > the<br>
> > OVS bridge name, of the TAP device names, all of which previously had to be<br>
> > hardcoded to Quantum specific data. This extends to bridging, 801.qbh,<br>
> > etc,etc<br>
> ><br>
><br>
> I have no real concerns here with respect to these representations within<br>
> Nova.  Since you mentioned that you view this as not being libvirt<br>
> specific, would the VIF/Network model in nova/network/model.py be extended<br>
> with additional fields not currently represented in the spec (<br>
> <a href="http://wiki.openstack.org/LibvirtVIFDrivers" target="_blank">http://wiki.openstack.org/LibvirtVIFDrivers</a>) for platforms like XenServer<br>
> (plug into XenServer network UUIDs), vmware (plug into port group-id), a<br>
> hyper-v virtual network, etc?<br>
<br>
</div>Sure, if we find additional pieces of information are needed in the models,<br>
we may have to extend them further. I'm surprised that QUantum server actually<br>
has knowledge of the hypervisor specific concepts you mention above though.<br></blockquote><div><br></div><div>I'm confused, as my understanding of your proposal requires Quantum know this type of information.  Perhaps I'm missing something?  From the code review, you have comments like: </div>

<div><span style="background-color:rgb(255,255,255)"><font face="arial, helvetica, sans-serif"><br></font></span></div><div><span style="white-space:pre;background-color:rgb(255,255,255)"><font face="arial, helvetica, sans-serif"># TODO(berrange) temporary hack until Quantum can pass over the</font></span></div>

<div><span style="white-space:pre;background-color:rgb(255,255,255)"><font face="arial, helvetica, sans-serif"># name of the OVS bridge it is configured with</font></span></div><div><span style="white-space:pre;background-color:rgb(255,255,255)"><font face="arial, helvetica, sans-serif"><br>

</font></span></div><div><span style="white-space:pre;background-color:rgb(255,255,255)"><font face="arial, helvetica, sans-serif">and </font></span></div><div><span style="white-space:pre;background-color:rgb(255,255,255)"><font face="arial, helvetica, sans-serif"><br>

</font></span></div><div><span style="white-space:pre;background-color:rgb(255,255,255)"><font face="arial, helvetica, sans-serif"># TODO(berrange) Quantum should pass the bridge name</font></span></div><div><span style="white-space:pre;background-color:rgb(255,255,255)"><font face="arial, helvetica, sans-serif"># in another binding metadata field</font></span></div>

<div><span style="white-space:pre;background-color:rgb(255,255,255)"><font face="arial, helvetica, sans-serif"><br></font></span></div><div><font face="arial, helvetica, sans-serif"><span style="white-space:pre">In this case, the name of the bridge is a concept specific to certain linux hypervisors.  If I was using XenServer, the equivalent might be a Network UUID, or with ESX a port group uuid.  </span></font></div>

<div><font face="arial, helvetica, sans-serif"><span style="white-space:pre"><br></span></font></div><div><font face="arial, helvetica, sans-serif"><span style="white-space:pre">My current thinking is that Quantum shouldn't have to know such information either, but based on your comments, I was assuming this was a point of disagreement.  Can you clarify? </span></font></div>

<div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"> Surely over time nova will have to add<br>
> entirely new vif_types.  Since all Nova code for a given deployment will be<br>
> in sync, this is not a problem within Nova, but what if you deploy a newer<br>
> Quantum with an older Nova?  Let's say in "H" Nova introduces vif_type<br>
> "qbx" (presumably some "improved" for of VEPA :P) with requires a different<br>
> set of parameters to configure.  If a tenant is running an "H" version of<br>
> Quantum, with a Grizzly version of Nova, how does it know that it can't<br>
> specify vif-type qbx?<br>
<br>
</div>I mostly think that this is a documentation / deployment issue for<br>
admins to take care of. In the scenario you describe if you have an<br>
Hxxxx Quantum running with a Grizzly Nova, the admin should expect<br>
that they won't neccessarily be able to use latest pieces of Quantum.<br></blockquote><div><br></div><div>I think we both agree that using vif_type qbx would not work (and that this is reasonable).  That wasn't my question though.  My question was: If Quantum returns qbx, presumably the older Nova would error-out when provisioning the VM, so how does Quantum from the "H" series know that it is or is not OK to return vif-type "qbx"?   If we have to have an admin configure quantum with the set of vif_types the Nova install supports, where back to what we wanted to avoid: having to have an admin sync config between Nova + Quantum. </div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
<br>
><br>
> To me this points to an even larger question of how we handle heterogeneous<br>
> hosts.  A couple possible examples for discussion:<br>
> - Only the newer servers in your cloud have the fancy new NICs to support<br>
> the type of vif-plugging most desired by your quantum plugin.  for older<br>
> servers, the quantum plugin needs to use a legacy platform.<br>
> - Your identifier for indicating how a vif-should be plugged (e.g., a<br>
> xenserver network UUID) is specific to each cluster of servers, and your<br>
> quantum deployment spans many clusters.  How does the quantum server know<br>
> what value to provide?<br>
> - A quantum deployment spans hypervisors of multiple types (e.g., kvm,<br>
> xenserver, and esx) and the vif-type and values returned by the plugin need<br>
> to vary for different hypervisor platforms.<br>
><br>
> The above items are possible with the existing vif-plugging, since<br>
> different config flags can be passed to different nova-compute instances.<br>
><br>
> It seems like in the new model, we would need Nova to pass some information<br>
> to Quantum so that Quantum can make the right decision about what vif-type<br>
> and data to send.<br>
<br>
</div>Since the formal dependancy is really Nova -> Quantum, IMHO we should really<br>
just document that Nova must be at least as new as Quantum. Runing a Hxxxx<br>
Nova against a Grizzly Quantum should present no problems, only the reverse<br>
has issues.<br></blockquote><div><br></div><div>This isn't just about old vs. new versions.  See the example above about a deployment that spans multiple cluster for a hypervisor like XenServer or ESX, thereby requiring that a different identifier is passed back based on which cluster.  Or an even more extreme example (but one I've already seen in production with Quantum) is that there are multiple hypervisor types, so even the vif_type that would need to be passed back may well be different on different hypervisors.  </div>

<div><br></div><div>This is possible today with the existing vif-plugging mechanism, since the equivalent of a vif-type + bridge name are configured on each hypervisor, and thus can differ for different clusters or different hypervisor types.  Its not clear to me how this would work with the existing mechanisms.  </div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
><br>
> One other minor comment and question:<br>
><br>
> I noticed the "filtered" value in the spec.  The current description seems<br>
> to be a bit of a deviation from the rest of the spec, as<br>
> it explicitly describes the behavior of the quantum plugin, not the<br>
> configuration value for the virt layer (which I'm guessing<br>
> is implicitly the inverse, such that if this value is true, we do NOT<br>
> configure filtering on the VIF).<br>
<br>
</div></div>It is a subtle distinction, but I guess I don't think of the data as soley<br>
being "what is the required VIF configuration", but rather "what information<br>
is required todo VIF configuration". As such knowing whether Quantum has<br>
applied filtering falls within scope.<br></blockquote><div><br></div><div>Yes, but 'filtering' as a term seems very broad.  Here's a made-up example: what if the quantum plugin performs L3/L4 filtering (e.g., security groups) but did not have the ability to prevent mac/arp spoofing, and instead wanted the virt layer to handle that.  To me, having values that explicitly state what Quantum wants the virt layer to do would be more clear and less likely to run into problems in the future.  I'm guessing the current definition is use to map closely to whether to push down any <filterref> arguments to libvirt? I'm just trying to think about how the concept would apply to other platforms.  </div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
> And one last item that I was curious about:  I noticed that one part of<br>
> VIF-configuration that is not part of the spec currently is information<br>
> about the Vif-driver mechanism (e.g., in libivrt, choosing model=virtio and<br>
> specifying a <driver> element, or on esx, choosing e1000 vs. vmxnet).  Is<br>
> your thinking on this would be that it is even though it is vif-config from<br>
> a compute perspective, its value is unlikely to depend on quantum and thus<br>
> can still just be configured as a Nova config value for the virt layer<br>
> (e.g., libvirt_use_virtio_for_bridges')?<br>
<br>
</div>Although it is not clearly distinguished in the libvirt XML, you have to<br>
consider the guest config as having two distinct groups of information. In<br>
one group there is the machine hardware specification, and in the other<br>
group there is the host resource mapping. There is no dependancy between<br>
the two groups. So the choice of NIC hardware model is completely unrelated<br>
to the way you plug a VIF into the host network & as such it is not relevant<br>
to Quantum<br></blockquote><div><br></div><div>I actually agree with you completely here.  I was more just trying to make sure I understood your reasoning.  </div><div><br></div><div>Dan</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div class="HOEnZb"><div class="h5"><br>
Regards,<br>
Daniel<br>
--<br>
|: <a href="http://berrange.com" target="_blank">http://berrange.com</a>      -o-    <a href="http://www.flickr.com/photos/dberrange/" target="_blank">http://www.flickr.com/photos/dberrange/</a> :|<br>
|: <a href="http://libvirt.org" target="_blank">http://libvirt.org</a>              -o-             <a href="http://virt-manager.org" target="_blank">http://virt-manager.org</a> :|<br>
|: <a href="http://autobuild.org" target="_blank">http://autobuild.org</a>       -o-         <a href="http://search.cpan.org/~danberr/" target="_blank">http://search.cpan.org/~danberr/</a> :|<br>
|: <a href="http://entangle-photo.org" target="_blank">http://entangle-photo.org</a>       -o-       <a href="http://live.gnome.org/gtk-vnc" target="_blank">http://live.gnome.org/gtk-vnc</a> :|<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>Dan Wendlandt <div>Nicira, Inc: <a href="http://www.nicira.com" target="_blank">www.nicira.com</a><br><div>twitter: danwendlandt<br>

~~~~~~~~~~~~~~~~~~~~~~~~~~~<br></div></div>
</div>