<div dir="ltr">Ramesh,<div><br></div><div>I thought about your points over night, and then looked at our in-tree driver code from stable/kilo and asked myself, "what if this driver was out of tree?" They'd all have broken -- for very similar reasons as what I encountered with my demo driver.<div><br></div><div>When we split the boot and deploy interfaces, we kept compatibility only at the boundary between ConductorManager and the Driver class. That's all we set out to do, because that's all we defined the interface to be. I can accept that, but I'd like us to think about whether the driver interface:</div></div><div>a) is merely the interfaces defined in ironic/drivers/base.py, as we previously defined, or</div><div>b) also includes one or more of the hardware-agnostic interface implementations (eg, PXEBoot, AgentDeploy, AgentRAID, inspector.Inspector)</div><div><br></div><div>As recent experience has taught me, these classes provide essential primitives for building new hardware drivers. If we want to support development of hardware drivers out of tree, but we don't want to include (b) in our definition of the API, then we are signalling that such drivers must be implemented entirely out of tree (iow, they're not allowed to borrow *any* functionality from ironic/drivers/modules/*).</div><div><br></div><div>And if we're signalling that, and someone goes and implements such a driver and then later wants to propose it upstream -- how will we feel about accepting a completely alternative implementation of, say, the pxe boot driver?</div><div><br></div><div>Curious what others think...</div><div>-deva<br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Oct 5, 2015 at 11:35 PM, Ramakrishnan G <span dir="ltr"><<a href="mailto:rameshg87.openstack@gmail.com" target="_blank">rameshg87.openstack@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><br></div>Well it's nice to fix, but I really don't know if we should be fixing it.  As discussed in one of the Ironic meetings before, we might need to define what is our driver API or SDK or DDK or whatever we choose to call it .  Please see inline for my thoughts.<div><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Tue, Oct 6, 2015 at 5:54 AM, Devananda van der Veen <span dir="ltr"><<a href="mailto:devananda.vdv@gmail.com" target="_blank">devananda.vdv@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">tldr; the boot / deploy interface split we did broke an out of tree driver. I've proposed a patch. We should get a fix into stable/liberty too.<div><br></div><div>Longer version...</div><div><br></div><div>I was rebasing my AMTTool driver [0] on top of master because the in-tree one still does not work for me, only to discover that my driver suddenly failed to deploy. I have filed this bug</div><div>  <a href="https://bugs.launchpad.net/ironic/+bug/1502980" target="_blank">https://bugs.launchpad.net/ironic/+bug/1502980</a><br></div><div>because we broke at least one out of tree driver (mine). I highly suspect we've broken many other out of tree drivers that relied on either the PXEDeploy or AgentDeploy interfaces that were present in Kilo release. Both classes in Liberty are making explicit calls to "task.driver.boot" -- and kilo-era driver classes did not define this interface.</div></div></blockquote><div><br></div><div><br></div></span><div>I would like to think more about what really our driver API is ? We have a couple of well defined interfaces in ironic/drivers/base.py which people may follow, implement an out-of-tree driver, make it a stevedore entrypoint and get it working with Ironic. </div><div><br></div><div>But </div><div><br></div><div>1) Do we promise them that in-tree implementations of these interfaces will always exist.  For example in boot/deploy work done in Liberty, we removed the class PxeDeploy [1].  It actually got broken down to PXEBoot and ISCSIDeploy.  In the first place, do we guarantee that they will exist for ever in the same place with the same name ? :)<br></div><div><br></div><div>2) Do we really promise the in-tree implementations of these interfaces will behave the same way ? For example, the broken stuff AgentDeploy which is an implementation of our DeployInterface.  Do we guarantee that this implementation will always keep doing what ever it was every time code is rebased ?</div><div><br></div><div>[1] <a href="https://review.openstack.org/#/c/166513/19/ironic/drivers/modules/pxe.py" target="_blank">https://review.openstack.org/#/c/166513/19/ironic/drivers/modules/pxe.py</a></div><span class=""><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div><br></div><div>I worked out a patch for the AgentDeploy driver and have proposed it here:</div><div>  <a href="https://review.openstack.org/#/c/231215/1" target="_blank">https://review.openstack.org/#/c/231215/1</a></div><div><br></div><div>I'd like to ask folks to review it quickly -- we should fix this ASAP and backport it to stable/liberty before the next release, if possible. We should also make a similar fix for the PXEDeploy class. If anyone gets to this before I do, please reply here and let me know so we don't duplicate effort.</div></div></blockquote><div><br></div><div><br></div></span><div>This isn't going to be as same as above as there is no longer a PXEDeploy class any more.  We might need to create a new class PXEDeploy which probably inherits from ISCSIDeploy and has task.driver.boot worked around in the same way as the above patch.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class=""><div dir="ltr"><div><br></div><div>Also, Jim already spotted something in the review that is a bit concerning. It seems like the IloVirtualMediaAgentVendorInterface class expects the driver it is attached to *not* to have a boot interface and *not* to call boot.clean_up_ramdisk. Conversely, other drivers may be expecting AgentVendorInterface to call boot.clean_up_ramdisk -- since that was its default behavior in Kilo. I'm not sure what the right way to fix this is, but I lean towards updating the in-tree driver so we remain backwards-compatible for out of tree drivers.</div><div><br></div><div><br></div><div>-Devananda<br></div><div><br></div><div>[0] <a href="https://github.com/devananda/ironic/tree/new-amt-driver" target="_blank">https://github.com/devananda/ironic/tree/new-amt-driver</a></div><div><br></div></div>
<br></span>__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br></blockquote></div><br></div></div></div>
<br>__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br></blockquote></div><br></div>