<div dir="ltr"><div class="gmail_extra">Hi Assaf, Thank you very much for the summary,</div><div class="gmail_extra"><br></div><div class="gmail_extra">Just a few questions, there are things I don&#39;t understand yet:</div>
<div class="gmail_extra"><br><div class="gmail_quote">2014/1/8 Assaf Muller <span dir="ltr">&lt;<a href="mailto:amuller@redhat.com" target="_blank">amuller@redhat.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Mid-thread summary:<br>
<br>
First some terminology so we&#39;re all on the same page:<br>
&#39;request&#39; - The setupNetworks that just arrived<br>
&#39;running config&#39; - If unified persistence is being used - All networking on the host as VDSM sees it<br>
&#39;expected&#39; - If unified persistence is being used - The running config after the effects of the request, but before the hook is ran<br>
<br></blockquote><div><br></div><div>correct</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I think we all agree that we have to expose the &#39;request&#39; to the hook.<br>
However, there&#39;s two different approaches:<br>
1) Allow the hook to rewrite parts of the request (For example, if two networks were sent, and the hook handled one of them, it could<br>
   then delete that network from the request, so VDSM will only continue to configure the 2nd network).<br></blockquote><div><br></div><div>In this case ,if the hook deleted the &quot;2nd network&quot;, VDSM couldn&#39;t handle the network config persistence anymore, right?,</div>
<div><br></div><div>I didn&#39;t expect this use case, I only expected tweaks, etc (before or after network setup), for example, setting special hardware</div><div>capabilities using ethtool or those kind of things.</div>
<div> <br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2) Toni&#39;s idea with marking devices as hook-configured. So if a network is over a bridge over a VLAN over a bond over three NICs, hooks<br>
   could configure only the NICs (For example) and VDSM would configure the rest, whereas the first idea means that the hook would<br>
   have to configure the entire network (Bridge, VLANs, bonds, and all 3 NICs) and then remove that network from the request.<br>
   The disadvantage of this method is that it would be harder to implement, and have references to the hooks flag throughout all of VDSM.<br>
<br></blockquote><div><br></div><div>You mean that if the hook marked a certain device as &quot;hook handled&quot; then, VDSM would just keep this information along with</div><div>the network config, etc... and won&#39;t do any setup, just config-keeping, right?</div>
<div> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Then there&#39;s the matter of IF to expose the &#39;running config&#39; and &#39;expected&#39;.<br>
<br>
My main argument is that it&#39;s very easy to expose to the hooks (But then why not expose other &#39;random&#39; data that is easy for VDSM to calculate?),<br>
and that we don&#39;t understand all usages for the setupNetworks hooks. I&#39;d rather we expose too much information than not enough and screw<br>
over hook writers.<br>
<br></blockquote><div><br></div><div>We have something important here, the hooks don&#39;t need to be python-written, they could be bash scripts, or any other thing... </div><div>that means that they wouldn&#39;t have access to get &quot;running config&quot;, but they could calculate &quot;expected&quot;.</div>
<div><br></div><div>So, my vote here goes for &quot;request&quot; + &quot;running config&quot;.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Either way, let&#39;s get some votes in a timely manner so we could manage to implement this for 3.4.<br>
<div class="im HOEnZb"><br></div></blockquote><div><br></div><div>Thanks Assaf! ;)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im HOEnZb">

<br>
Assaf Muller, Cloud Networking Engineer<br>
Red Hat<br>
<br>
</div><div class="im HOEnZb">----- Original Message -----<br>
From: &quot;Adam Litke&quot; &lt;<a href="mailto:alitke@redhat.com">alitke@redhat.com</a>&gt;<br>
To: &quot;Miguel Angel&quot; &lt;<a href="mailto:miguelangel@ajo.es">miguelangel@ajo.es</a>&gt;<br>
Cc: <a href="mailto:dsulliva@redhat.com">dsulliva@redhat.com</a>, <a href="mailto:arch@ovirt.org">arch@ovirt.org</a>, <a href="mailto:vdsm-devel@fedorahosted.org">vdsm-devel@fedorahosted.org</a><br>
</div><div class="im HOEnZb">Sent: Monday, January 6, 2014 3:32:07 PM<br>
Subject: Re: [vdsm] Smarter network_setup hooks<br>
<br>
</div><div class="HOEnZb"><div class="h5">On 04/01/14 20:08 +0100, Miguel Angel wrote:<br>
&gt;Hi Adam<br>
&gt;<br>
&gt;Thanks for the feedback<br>
&gt;<br>
&gt;2014/1/3 Adam Litke &lt;<a href="mailto:alitke@redhat.com">alitke@redhat.com</a>&gt;<br>
&gt;<br>
&gt;&gt; On 03/01/14 12:20 +0000, Dan Kenigsberg wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; Recently, Miguel Angel Ajo (CCed) has added a nice functionality to the<br>
&gt;&gt;&gt; implementation of setupNetworks in Vdsm: two hook points where added:<br>
&gt;&gt;&gt; before and after the setupNetworks verb takes place.<br>
&gt;&gt;&gt; [....]<br>
&gt;&gt;<br>
&gt;&gt; Seems like a logical thing to do.  What specific mechanism do you<br>
&gt;&gt; suggest for passing the JSON strings to the hook script?  If passed as<br>
&gt;&gt; arguments to the hook script we would need to consider shell escaping<br>
&gt;&gt; and argv length restrictions.<br>
&gt;&gt;<br>
&gt;&gt; As for the libvirt domain xml we pass to other hooks, we write a temporary<br>
&gt;file<br>
&gt;and we set an environment variable pointing to it before calling the script<br>
&gt;<br>
&gt;<br>
&gt;&gt; What about writing these out to a special file and adding a new<br>
&gt;&gt; getContext() call to the hooking module.  A script that is unconcerned<br>
&gt;&gt; with the context would not require any changes.  But a script that<br>
&gt;&gt; wants access would simply do:<br>
&gt;&gt;<br>
&gt;&gt;    ctx = hooking.getContext()<br>
&gt;&gt;<br>
&gt;&gt; and ctx would be the contents of the special file already decoded into<br>
&gt;&gt; a native Python object for easy consumption.  This could easily be<br>
&gt;&gt; extended to any hook which may want to provide some context to<br>
&gt;&gt; implementors.<br>
&gt;&gt;<br>
&gt;<br>
&gt;That would be nice, so scripts written in python wouldn&#39;t need to look for,<br>
&gt;and parse<br>
&gt;the file.<br>
&gt;<br>
&gt;This is an example of a simple hook:<br>
&gt;<br>
&gt;<a href="http://gerrit.ovirt.org/#/c/20330/7/tests/functional/networkTests.py" target="_blank">http://gerrit.ovirt.org/#/c/20330/7/tests/functional/networkTests.py</a>  (look<br>
&gt;inside the ValidatesHook decorator)<br>
&gt;<br>
&gt;<br>
&gt;It&#39;d be quite simplified. We would also need a &quot;setContext()...&quot; to update<br>
&gt;context with changes.<br>
<br>
Yeah seems reasonable.  Then hook scripts can become much simpler and<br>
easier to read and write:<br>
<br>
ctx = hooking.getContext()<br>
ctx[&#39;foo&#39;] = &#39;bar&#39;<br>
hooking.setContext(ctx)<br>
<br>
&gt;<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; One more question comes to mind:  Are there any pieces of information<br>
&gt;&gt; that we would need to redact from the context (passwords or other<br>
&gt;&gt; sensitive information)?<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;I think there is no sensitive information as far as I know.<br>
&gt;<br>
&gt;Greetings,<br>
&gt;Miguel Ángel.<br>
</div></div><div class="HOEnZb"><div class="h5">_______________________________________________<br>
vdsm-devel mailing list<br>
<a href="mailto:vdsm-devel@lists.fedorahosted.org">vdsm-devel@lists.fedorahosted.org</a><br>
<a href="https://lists.fedorahosted.org/mailman/listinfo/vdsm-devel" target="_blank">https://lists.fedorahosted.org/mailman/listinfo/vdsm-devel</a><br>
</div></div></blockquote></div><br></div></div>