<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Mar 24, 2017 at 6:43 PM, Martin Sivak <span dir="ltr">&lt;<a href="mailto:msivak@redhat.com" target="_blank">msivak@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">&gt; 2: you can have more api gateways (e.g. more apis) tailored for every<br>
&gt; frontend. I don&#39;t think we need this - the current API serves us pretty well<br>
&gt; in every FE Im involved in. The only thing which I miss is the data<br>
&gt; aggregation.<br>
<br>
</span>So it does not serve us well. Aggregation of data is one the usual<br>
points of using the gateway.<br>
Yes microservices are affected by this indeed, but so are we because<br>
implementing the aggregation directly in the current engine API layer<br>
is hard.<br>
<span class=""><br>
&gt; So I would go back to the original topic of this thread - do some small<br>
&gt; change which has a chance to be merged to the project and helps us where it<br>
&gt; hurts.<br></span></blockquote><div><br></div><div>I&#39;m wondering if very specific additional REST API calls can suffice.</div><div>For example, a &#39;Get VM + disks + NIC&#39; API call seems reasonable to add for the various clients who commonly need it.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
<br>
</span>Can a simple HTTP/2 to HTTP/AJP gateway be the simplest solution? Our<br>
Apache might even have a module for it already.<br></blockquote><div><br></div><div>Current Apache used has only experimental module for it.</div><div>Undertow is supposed to have a better support. I wonder when/if we can drop Apache...</div><div>Y.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
That way you can multiplex all the REST calls using a single tcp<br>
connection (and a single SSL negotiation).<br>
<br>
A custom SSO enabled service like that might be even better as it<br>
would be able to skip the authentication<br>
layers too and that would lower the engine load. But I am not sure it<br>
is possible with the current codebase.<br>
<span class="HOEnZb"><font color="#888888"><br>
Martin<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Fri, Mar 24, 2017 at 4:22 PM, Tomas Jelinek &lt;<a href="mailto:tjelinek@redhat.com">tjelinek@redhat.com</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; On Fri, Mar 24, 2017 at 3:58 PM, Martin Sivak &lt;<a href="mailto:msivak@redhat.com">msivak@redhat.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; &gt; I feel like every REST API I&#39;ve ever worked with has had the aggregation<br>
&gt;&gt; &gt; +<br>
&gt;&gt; &gt; projection problem. It&#39;s like we&#39;re trying to use REST as a replacement<br>
&gt;&gt; &gt; for<br>
&gt;&gt; &gt; SQL -- but the logic that executes the &quot;SQL&quot; lives in a browser now, and<br>
&gt;&gt; &gt; it<br>
&gt;&gt; &gt; used to live on a server close to the DB. And REST isn&#39;t expressive for<br>
&gt;&gt; &gt; selecting data like SQL is.<br>
&gt;&gt;<br>
&gt;&gt; The current industry solution I know about is called API gateway..<br>
&gt;&gt; most of the big players have internal API with lots of low level stuff<br>
&gt;&gt; and then couple of external API gateways tailored to what the client<br>
&gt;&gt; needs.<br>
&gt;&gt;<br>
&gt;&gt; <a href="http://microservices.io/patterns/apigateway.html" rel="noreferrer" target="_blank">http://microservices.io/<wbr>patterns/apigateway.html</a> (check the backend<br>
&gt;&gt; for frontend section)<br>
&gt;&gt;<br>
&gt;&gt; This trend is also visible when you think about services that offer<br>
&gt;&gt; API gateway management and billing like<br>
&gt;&gt; <a href="https://aws.amazon.com/api-gateway/" rel="noreferrer" target="_blank">https://aws.amazon.com/api-<wbr>gateway/</a> or our very own<br>
&gt;&gt; <a href="https://www.3scale.net/" rel="noreferrer" target="_blank">https://www.3scale.net/</a><br>
&gt;<br>
&gt;<br>
&gt; right, but the api gateway solves 2 problems:<br>
&gt;<br>
&gt; 1: if you have a microservice architecture it is hard for frontend to talk<br>
&gt; to 20 different moving services. So the gateway hides this complexity behind<br>
&gt; it. This is not the problem we have.<br>
&gt;<br>
&gt; 2: you can have more api gateways (e.g. more apis) tailored for every<br>
&gt; frontend. I don&#39;t think we need this - the current API serves us pretty well<br>
&gt; in every FE Im involved in. The only thing which I miss is the data<br>
&gt; aggregation.<br>
&gt;<br>
&gt; So I would go back to the original topic of this thread - do some small<br>
&gt; change which has a chance to be merged to the project and helps us where it<br>
&gt; hurts.<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Martin<br>
&gt;&gt;<br>
&gt;&gt; On Fri, Mar 24, 2017 at 3:47 PM, Greg Sheremeta &lt;<a href="mailto:gshereme@redhat.com">gshereme@redhat.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt; &gt; I feel like every REST API I&#39;ve ever worked with has had the aggregation<br>
&gt;&gt; &gt; +<br>
&gt;&gt; &gt; projection problem. It&#39;s like we&#39;re trying to use REST as a replacement<br>
&gt;&gt; &gt; for<br>
&gt;&gt; &gt; SQL -- but the logic that executes the &quot;SQL&quot; lives in a browser now, and<br>
&gt;&gt; &gt; it<br>
&gt;&gt; &gt; used to live on a server close to the DB. And REST isn&#39;t expressive for<br>
&gt;&gt; &gt; selecting data like SQL is.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; There must be some industry solution to this &quot;I want to do SQL over<br>
&gt;&gt; &gt; REST&quot;<br>
&gt;&gt; &gt; problem.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Fri, Mar 24, 2017 at 5:54 AM, Martin Sivak &lt;<a href="mailto:msivak@redhat.com">msivak@redhat.com</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt; for quite some time I have been more or less involved in development<br>
&gt;&gt; &gt;&gt; &gt; of<br>
&gt;&gt; &gt;&gt; &gt; various UIs for oVirt based entirely on the oVirt&#39;s REST API ranging<br>
&gt;&gt; &gt;&gt; &gt; from<br>
&gt;&gt; &gt;&gt; &gt; the quite mature moVirt [1] through some cockpit extensions to a<br>
&gt;&gt; &gt;&gt; &gt; young<br>
&gt;&gt; &gt;&gt; &gt; and<br>
&gt;&gt; &gt;&gt; &gt; experimental user portal replacement [2].<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; oVirt optimizer has the same issue..<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt; 2: add some tiny service which would just accept a list of queries,<br>
&gt;&gt; &gt;&gt; &gt; execute<br>
&gt;&gt; &gt;&gt; &gt; them locally (but using real HTTP requests) and return in one bulk. A<br>
&gt;&gt; &gt;&gt; &gt; naive<br>
&gt;&gt; &gt;&gt; &gt; implementation just to give a sense of what I mean of this would be a<br>
&gt;&gt; &gt;&gt; &gt; shell<br>
&gt;&gt; &gt;&gt; &gt; script getting list of strings like<br>
&gt;&gt; &gt;&gt; &gt; &quot;<a href="https://localhost/ovirt-engine/api/vms/123/sessions" rel="noreferrer" target="_blank">https://localhost/ovirt-<wbr>engine/api/vms/123/sessions</a>&quot; iterate over<br>
&gt;&gt; &gt;&gt; &gt; them<br>
&gt;&gt; &gt;&gt; &gt; and<br>
&gt;&gt; &gt;&gt; &gt; do a curl request for each, mangle the results into one string and<br>
&gt;&gt; &gt;&gt; &gt; return<br>
&gt;&gt; &gt;&gt; &gt; (credits for this idea to msivak). Easy to implement, possibility to<br>
&gt;&gt; &gt;&gt; &gt; add<br>
&gt;&gt; &gt;&gt; &gt; also projections later to save some bandwidth. But the API would<br>
&gt;&gt; &gt;&gt; &gt; anyway<br>
&gt;&gt; &gt;&gt; &gt; be<br>
&gt;&gt; &gt;&gt; &gt; hammered by bunch of queries, only the network roundtrip would be<br>
&gt;&gt; &gt;&gt; &gt; saved.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; The biggest cost for (especially mobile) clients is the cost of<br>
&gt;&gt; &gt;&gt; establishing new SSL connection. SSL is also pretty expensive on the<br>
&gt;&gt; &gt;&gt; server side.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; So running the aggregation service on the ovirt-engine machine (behind<br>
&gt;&gt; &gt;&gt; Apache) means the client will do a single SSL request with list of N<br>
&gt;&gt; &gt;&gt; urls and the local &quot;reverse-proxy&quot; will perform single authentication<br>
&gt;&gt; &gt;&gt; and N plain HTTP requests (or even better - AJP). It won&#39;t remove any<br>
&gt;&gt; &gt;&gt; time from the actual command run time, but it will reduce protocol<br>
&gt;&gt; &gt;&gt; overhead.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; I think this is the simplest first step that requires almost no change<br>
&gt;&gt; &gt;&gt; to existing infrastructure.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; --<br>
&gt;&gt; &gt;&gt; Martin Sivak<br>
&gt;&gt; &gt;&gt; SLA / oVirt<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; On Fri, Mar 24, 2017 at 10:20 AM, Tomas Jelinek &lt;<a href="mailto:tjelinek@redhat.com">tjelinek@redhat.com</a>&gt;<br>
&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt; &gt; Hi All,<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; for quite some time I have been more or less involved in development<br>
&gt;&gt; &gt;&gt; &gt; of<br>
&gt;&gt; &gt;&gt; &gt; various UIs for oVirt based entirely on the oVirt&#39;s REST API ranging<br>
&gt;&gt; &gt;&gt; &gt; from<br>
&gt;&gt; &gt;&gt; &gt; the quite mature moVirt [1] through some cockpit extensions to a<br>
&gt;&gt; &gt;&gt; &gt; young<br>
&gt;&gt; &gt;&gt; &gt; and<br>
&gt;&gt; &gt;&gt; &gt; experimental user portal replacement [2].<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; One issue we hit over and over again is the missing data aggregation.<br>
&gt;&gt; &gt;&gt; &gt; In<br>
&gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt; &gt;&gt; &gt; 3.x era we used to use in moVirt the detail=something<br>
&gt;&gt; &gt;&gt; &gt; api to get the disks and nics of the VM, something like:<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; GET /ovirt-engine/api/vms<br>
&gt;&gt; &gt;&gt; &gt; Accept: application/json; detail=disks<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; This allowed us to store this data in local database leading to great<br>
&gt;&gt; &gt;&gt; &gt; user<br>
&gt;&gt; &gt;&gt; &gt; experience. Since this feature has been removed in 4.x API [3]<br>
&gt;&gt; &gt;&gt; &gt; we needed to retire to a different solution. When the VM detail is<br>
&gt;&gt; &gt;&gt; &gt; selected<br>
&gt;&gt; &gt;&gt; &gt; by the user, start loading the disks and nics and hope the user<br>
&gt;&gt; &gt;&gt; &gt; will not be fast enough to see the delay. The UX is slightly worse<br>
&gt;&gt; &gt;&gt; &gt; bug<br>
&gt;&gt; &gt;&gt; &gt; kinda<br>
&gt;&gt; &gt;&gt; &gt; acceptable.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; We hit this issue harder in the new user portal [2], because we<br>
&gt;&gt; &gt;&gt; &gt; already<br>
&gt;&gt; &gt;&gt; &gt; have<br>
&gt;&gt; &gt;&gt; &gt; the VM cached and show the whole VM in one screen. So, if you pick<br>
&gt;&gt; &gt;&gt; &gt; it,<br>
&gt;&gt; &gt;&gt; &gt; you<br>
&gt;&gt; &gt;&gt; &gt; will get it&#39;s details immediately.<br>
&gt;&gt; &gt;&gt; &gt; But, since you don&#39;t have all the details, we need to do an<br>
&gt;&gt; &gt;&gt; &gt; additional<br>
&gt;&gt; &gt;&gt; &gt; call<br>
&gt;&gt; &gt;&gt; &gt; (two actually) to load this data and they start to appear later.<br>
&gt;&gt; &gt;&gt; &gt; So, something which would be very fast and smooth starts to feel<br>
&gt;&gt; &gt;&gt; &gt; sluggish.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Recently, we hit this issue again which forced us to sacrifice the UX<br>
&gt;&gt; &gt;&gt; &gt; even<br>
&gt;&gt; &gt;&gt; &gt; more - it is the &quot;console in use&quot; feature of user portal.<br>
&gt;&gt; &gt;&gt; &gt; The use case is this:<br>
&gt;&gt; &gt;&gt; &gt; - if the console is already taken by some user, there are<br>
&gt;&gt; &gt;&gt; &gt; complications<br>
&gt;&gt; &gt;&gt; &gt; if<br>
&gt;&gt; &gt;&gt; &gt; other current user tryes to take it as well (will avoid details about<br>
&gt;&gt; &gt;&gt; &gt; settings and permissins involved, but long story short, the user will<br>
&gt;&gt; &gt;&gt; &gt; probably not be allowed to connect to it. The &quot;probably&quot; is the key<br>
&gt;&gt; &gt;&gt; &gt; here<br>
&gt;&gt; &gt;&gt; &gt; since we can not do any intelligent decision in advance, we can only<br>
&gt;&gt; &gt;&gt; &gt; warn<br>
&gt;&gt; &gt;&gt; &gt; the user that the console is taken).<br>
&gt;&gt; &gt;&gt; &gt; - in the current GWT user portal, if the VM&#39;s console is taken, it is<br>
&gt;&gt; &gt;&gt; &gt; shown<br>
&gt;&gt; &gt;&gt; &gt; on the VM&#39;s &quot;box&quot; that &quot;console is taken&quot;. This was a highly<br>
&gt;&gt; &gt;&gt; &gt; requested<br>
&gt;&gt; &gt;&gt; &gt; feature<br>
&gt;&gt; &gt;&gt; &gt; - to get this information using the current REST API, we need to go<br>
&gt;&gt; &gt;&gt; &gt; to<br>
&gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt; &gt;&gt; &gt; /vms/&lt;vmid&gt;/sessions subcollection. To get this for all VMs, it would<br>
&gt;&gt; &gt;&gt; &gt; be<br>
&gt;&gt; &gt;&gt; &gt; doing N queries per poll which we can not afford<br>
&gt;&gt; &gt;&gt; &gt; - so the current PR [4] will probably end up to only check it on the<br>
&gt;&gt; &gt;&gt; &gt; attempt<br>
&gt;&gt; &gt;&gt; &gt; to connect to the console warning the user. Maybe it will be also<br>
&gt;&gt; &gt;&gt; &gt; shown<br>
&gt;&gt; &gt;&gt; &gt; in<br>
&gt;&gt; &gt;&gt; &gt; Vm details. But the UX in case the user will look for a VM which has<br>
&gt;&gt; &gt;&gt; &gt; free<br>
&gt;&gt; &gt;&gt; &gt; console will suffer significantly (e.g. try one by one until some<br>
&gt;&gt; &gt;&gt; &gt; opens<br>
&gt;&gt; &gt;&gt; &gt; or<br>
&gt;&gt; &gt;&gt; &gt; look at details one by one to see if the warning appears (with a<br>
&gt;&gt; &gt;&gt; &gt; delay))<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; I understand that embedding the details of the VM to the response<br>
&gt;&gt; &gt;&gt; &gt; comes<br>
&gt;&gt; &gt;&gt; &gt; with<br>
&gt;&gt; &gt;&gt; &gt; a cost, namely:<br>
&gt;&gt; &gt;&gt; &gt; - performance hit<br>
&gt;&gt; &gt;&gt; &gt; - complexity of the API code<br>
&gt;&gt; &gt;&gt; &gt; - the &quot;cleanness&quot; of REST suffers<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; But I think we should seriously consider to provide some option to<br>
&gt;&gt; &gt;&gt; &gt; data<br>
&gt;&gt; &gt;&gt; &gt; aggregation.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; I know this has been discussed many times with no result, but I think<br>
&gt;&gt; &gt;&gt; &gt; it<br>
&gt;&gt; &gt;&gt; &gt; is<br>
&gt;&gt; &gt;&gt; &gt; time to bring this topic up again. I&#39;ll try to summarize the (failed)<br>
&gt;&gt; &gt;&gt; &gt; attempts tried so far:<br>
&gt;&gt; &gt;&gt; &gt; - the detail=&lt;something&gt; parameter with ad-hoc embedding of data.<br>
&gt;&gt; &gt;&gt; &gt; This<br>
&gt;&gt; &gt;&gt; &gt; has<br>
&gt;&gt; &gt;&gt; &gt; been there and removed in 4.0 [3]<br>
&gt;&gt; &gt;&gt; &gt; - the DoctorREST project - e.g. a proxy above the current api. The<br>
&gt;&gt; &gt;&gt; &gt; idea<br>
&gt;&gt; &gt;&gt; &gt; was<br>
&gt;&gt; &gt;&gt; &gt; to create a service which will be independent of the engine itself,<br>
&gt;&gt; &gt;&gt; &gt; will<br>
&gt;&gt; &gt;&gt; &gt; locally poll the engine&#39;s REST, store all data in local (mongo)DB and<br>
&gt;&gt; &gt;&gt; &gt; provide a rich api with aggregations and projections and push<br>
&gt;&gt; &gt;&gt; &gt; notifications.<br>
&gt;&gt; &gt;&gt; &gt; This polling of everything to get the data to DoctorREST proved to be<br>
&gt;&gt; &gt;&gt; &gt; pretty<br>
&gt;&gt; &gt;&gt; &gt; costy, so also a more invasive approach of pushing data from engine<br>
&gt;&gt; &gt;&gt; &gt; to<br>
&gt;&gt; &gt;&gt; &gt; doctor has been discused [5]. None of this two approaches have been<br>
&gt;&gt; &gt;&gt; &gt; accepted<br>
&gt;&gt; &gt;&gt; &gt; (too complicated, too invasive).<br>
&gt;&gt; &gt;&gt; &gt; - writing some custom ad-hoc servlet serving only a purpose of one<br>
&gt;&gt; &gt;&gt; &gt; frontend<br>
&gt;&gt; &gt;&gt; &gt; - this is actually there for the dashboard, but it is not a generic<br>
&gt;&gt; &gt;&gt; &gt; solution<br>
&gt;&gt; &gt;&gt; &gt; for the other frontends and we really should not develop custom<br>
&gt;&gt; &gt;&gt; &gt; &quot;APIs&quot;<br>
&gt;&gt; &gt;&gt; &gt; for<br>
&gt;&gt; &gt;&gt; &gt; every frontend<br>
&gt;&gt; &gt;&gt; &gt; - there were some other proposals discussed (some 3th party solutions<br>
&gt;&gt; &gt;&gt; &gt; etc)<br>
&gt;&gt; &gt;&gt; &gt; but I think none of them made it even to a PoC<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; So, now I would try again and try small to get at least some benefit.<br>
&gt;&gt; &gt;&gt; &gt; I<br>
&gt;&gt; &gt;&gt; &gt; see<br>
&gt;&gt; &gt;&gt; &gt; 2 paths we could try:<br>
&gt;&gt; &gt;&gt; &gt; 1: embed something which burns us immediatly, e.g. the /sessions into<br>
&gt;&gt; &gt;&gt; &gt; VMs. I<br>
&gt;&gt; &gt;&gt; &gt; really liked the ;detail=sessions approach, could we move it back?<br>
&gt;&gt; &gt;&gt; &gt; 2: add some tiny service which would just accept a list of queries,<br>
&gt;&gt; &gt;&gt; &gt; execute<br>
&gt;&gt; &gt;&gt; &gt; them locally (but using real HTTP requests) and return in one bulk. A<br>
&gt;&gt; &gt;&gt; &gt; naive<br>
&gt;&gt; &gt;&gt; &gt; implementation just to give a sense of what I mean of this would be a<br>
&gt;&gt; &gt;&gt; &gt; shell<br>
&gt;&gt; &gt;&gt; &gt; script getting list of strings like<br>
&gt;&gt; &gt;&gt; &gt; &quot;<a href="https://localhost/ovirt-engine/api/vms/123/sessions" rel="noreferrer" target="_blank">https://localhost/ovirt-<wbr>engine/api/vms/123/sessions</a>&quot; iterate over<br>
&gt;&gt; &gt;&gt; &gt; them<br>
&gt;&gt; &gt;&gt; &gt; and<br>
&gt;&gt; &gt;&gt; &gt; do a curl request for each, mangle the results into one string and<br>
&gt;&gt; &gt;&gt; &gt; return<br>
&gt;&gt; &gt;&gt; &gt; (credits for this idea to msivak). Easy to implement, possibility to<br>
&gt;&gt; &gt;&gt; &gt; add<br>
&gt;&gt; &gt;&gt; &gt; also projections later to save some bandwidth. But the API would<br>
&gt;&gt; &gt;&gt; &gt; anyway<br>
&gt;&gt; &gt;&gt; &gt; be<br>
&gt;&gt; &gt;&gt; &gt; hammered by bunch of queries, only the network roundtrip would be<br>
&gt;&gt; &gt;&gt; &gt; saved.<br>
&gt;&gt; &gt;&gt; &gt; 3: any other simple approaches?<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; I honestly prefer the first approach. It is not beautiful, it is not<br>
&gt;&gt; &gt;&gt; &gt; REST-ful, but it is easy to implement, very pragmatic and useful.<br>
&gt;&gt; &gt;&gt; &gt; What do you think?<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Thank you and sorry for the long mail :)<br>
&gt;&gt; &gt;&gt; &gt; Tomas<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; [1]: <a href="https://github.com/oVirt/moVirt" rel="noreferrer" target="_blank">https://github.com/oVirt/<wbr>moVirt</a><br>
&gt;&gt; &gt;&gt; &gt; [2]: <a href="https://github.com/oVirt/ovirt-web-ui" rel="noreferrer" target="_blank">https://github.com/oVirt/<wbr>ovirt-web-ui</a><br>
&gt;&gt; &gt;&gt; &gt; [3]: <a href="https://gerrit.ovirt.org/#/c/61260" rel="noreferrer" target="_blank">https://gerrit.ovirt.org/#/c/<wbr>61260</a><br>
&gt;&gt; &gt;&gt; &gt; [4]: <a href="https://github.com/oVirt/ovirt-web-ui/pull/106/" rel="noreferrer" target="_blank">https://github.com/oVirt/<wbr>ovirt-web-ui/pull/106/</a><br>
&gt;&gt; &gt;&gt; &gt; [5]: <a href="https://gerrit.ovirt.org/#/c/45233/" rel="noreferrer" target="_blank">https://gerrit.ovirt.org/#/c/<wbr>45233/</a><br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; ______________________________<wbr>_________________<br>
&gt;&gt; &gt;&gt; &gt; Devel mailing list<br>
&gt;&gt; &gt;&gt; &gt; <a href="mailto:Devel@ovirt.org">Devel@ovirt.org</a><br>
&gt;&gt; &gt;&gt; &gt; <a href="http://lists.ovirt.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.ovirt.org/<wbr>mailman/listinfo/devel</a><br>
&gt;&gt; &gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt; &gt;&gt; Devel mailing list<br>
&gt;&gt; &gt;&gt; <a href="mailto:Devel@ovirt.org">Devel@ovirt.org</a><br>
&gt;&gt; &gt;&gt; <a href="http://lists.ovirt.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.ovirt.org/<wbr>mailman/listinfo/devel</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; --<br>
&gt;&gt; &gt; Greg Sheremeta, MBA<br>
&gt;&gt; &gt; Red Hat, Inc.<br>
&gt;&gt; &gt; Sr. Software Engineer<br>
&gt;&gt; &gt; <a href="mailto:gshereme@redhat.com">gshereme@redhat.com</a><br>
&gt;<br>
&gt;<br>
______________________________<wbr>_________________<br>
Devel mailing list<br>
<a href="mailto:Devel@ovirt.org">Devel@ovirt.org</a><br>
<a href="http://lists.ovirt.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.ovirt.org/<wbr>mailman/listinfo/devel</a><br>
</div></div></blockquote></div><br></div></div>