<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">2013/12/13 Fox, Kevin M <span dir="ltr"><<a href="mailto:kevin.fox@pnnl.gov" target="_blank">kevin.fox@pnnl.gov</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Yeah, I think the extra nic is unnecessary too. There already is a working route to 169.254.169.254, and a metadata proxy -> server running on it.<br>
<br>
So... lets brainstorm for a minute and see if there are enough pieces already to do most of the work.<br>
<br>
We already have:<br>
  * An http channel out from private vm's, past network namespaces all the way to the node running the neutron-metadata-agent.<br>
<br>
We need:<br>
  * Some way to send a command, plus arguments to the vm to execute some action and get a response back.<br>
<br>
OpenStack has focused on REST api's for most things and I think that is a great tradition to continue. This allows the custom agent plugins to be written in any language that can speak http (All of them?) on any platform.<br>

<br>
A REST api running in the vm wouldn't be accessible from the outside though on a private network.<br>
<br>
Random thought, can some glue "unified guest agent" be written to bridge the gap?<br>
<br>
How about something like the following:<br>
<br>
The "unified guest agent" starts up, makes an http request to <a href="http://169.254.169.254/unified-agent/" target="_blank">169.254.169.254/unified-agent/</a><cnc_type_from_configfile>/connect<br>
If at any time the connection returns, it will auto reconnect.<br>
It will block as long as possible and the data returned will be an http request. The request will have a special header with a request id.<br>
The http request will be forwarded to localhost:<someportfromconfigfile> and the response will be posted to <a href="http://169.254.169.254/unified-agent/cnc_type/response/" target="_blank">169.254.169.254/unified-agent/cnc_type/response/</a><response_id><br>

<br>
The neutron-proxy-server would need to be modified slightly so that, if it sees a /unified-agent/<cnc_type>/* request it:<br>
looks in its config file, unified-agent section, and finds the ip/port to contact for a given <cnc_type>', and forwards the request to that server, instead of the regular metadata one.<br>
<br>
Once this is in place, savana or trove can have their webapi registered with the proxy as the server for the "savana" or "trove" cnc_type. They will be contacted by the clients as they come up, and will be able to make web requests to them, an get responses back.<br>

<br>
What do you think?<br>
<br>
Thanks,<br>
Kevin<br></blockquote><div><br></div><div>Kevin, frankly that sound like a _big_ overkill and wheel re-invention. The idea you propose is similar to HTTP long polling. It actually works in the browsers. But I think people use it not because it is very scalable, easy-implemented or something else. It is simply one of the few technologies available when you need to implement server push in the web.</div>
<div><br></div><div>In our use-case we don't have a limitation 'that must work with a bare browser on client side' and hence we can use technologies which much better suite to message passing like AMQP, STOMP or others. </div>
<div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
________________________________________<br>
From: Ian Wells [<a href="mailto:ijw.ubuntu@cack.org.uk">ijw.ubuntu@cack.org.uk</a>]<br>
Sent: Thursday, December 12, 2013 11:02 AM<br>
<div class="im HOEnZb">To: OpenStack Development Mailing List (not for usage questions)<br>
</div><div class="im HOEnZb">Subject: Re: [openstack-dev] Unified Guest Agent proposal<br>
<br>
</div><div class="im HOEnZb">On 12 December 2013 19:48, Clint Byrum <<a href="mailto:clint@fewbar.com">clint@fewbar.com</a><mailto:<a href="mailto:clint@fewbar.com">clint@fewbar.com</a>>> wrote:<br>
Excerpts from Jay Pipes's message of 2013-12-12 10:15:13 -0800:<br>
> On 12/10/2013 03:49 PM, Ian Wells wrote:<br>
> > On 10 December 2013 20:55, Clint Byrum <<a href="mailto:clint@fewbar.com">clint@fewbar.com</a><mailto:<a href="mailto:clint@fewbar.com">clint@fewbar.com</a>><br>
</div><div class="im HOEnZb">> > <mailto:<a href="mailto:clint@fewbar.com">clint@fewbar.com</a><mailto:<a href="mailto:clint@fewbar.com">clint@fewbar.com</a>>>> wrote:<br>
> I've read through this email thread with quite a bit of curiosity, and I<br>
> have to say what Ian says above makes a lot of sense to me. If Neutron<br>
> can handle the creation of a "management vNIC" that has some associated<br>
> iptables rules governing it that provides a level of security for guest<br>
> <-> host and guest <-> $OpenStackService, then the transport problem<br>
> domain is essentially solved, and Neutron can be happily ignorant (as it<br>
> should be) of any guest agent communication with anything else.<br>
><br>
<br>
Indeed I think it could work, however I think the NIC is unnecessary.<br>
<br>
Seems likely even with a second NIC that said address will be something<br>
like 169.254.169.254 (or the ipv6 equivalent?).<br>
<br>
There *is* no ipv6 equivalent, which is one standing problem.  Another is that (and admittedly you can quibble about this problem's significance) you need a router on a network to be able to get to 169.254.169.254 - I raise that because the obvious use case for multiple networks is to have a net which is *not* attached to the outside world so that you can layer e.g. a private DB service behind your app servers.<br>

<br>
Neither of these are criticisms of your suggestion as much as they are standing issues with the current architecture.<br>
--<br>
Ian.<br>
<br>
<br>
</div><div class="HOEnZb"><div class="h5">_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</div></div></blockquote></div><br></div></div>