<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">Thanks for bringing this up Dmitry. See inline...</div><div class="gmail_quote"><br></div><div class="gmail_quote">On Tue, Nov 14, 2017 at 5:05 PM, Alex Schultz <span dir="ltr"><<a href="mailto:aschultz@redhat.com" target="_blank">aschultz@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="gmail-HOEnZb"><div class="gmail-h5">On Tue, Nov 14, 2017 at 8:10 AM, Dmitry Tantsur <<a href="mailto:dtantsur@redhat.com">dtantsur@redhat.com</a>> wrote:<br>
> Hi folks!<br>
><br>
> This was raised several times, now I want to bring it to the wider audience.<br>
> We're planning [1] to deprecate classic drivers in Queens and remove them in<br>
> Rocky. It was pointed at the Forum that we'd better provide an automatic<br>
> migration.<br>
><br>
> I'd like to hear your opinion on the options:<br>
><br>
> (1) Migration as part of 'ironic-dbsync upgrade'<br>
><br>
> Pros:<br>
> * nothing new to do for the operators<br>
><br>
> Cons:<br>
> * upgrade will fail completely, if for some nodes the matching hardware<br>
> types and/or interfaces are not enabled in ironic.conf<br>
><br></div></div></blockquote><div><br></div><div>ironic-dbsync upgrade has always (I think) been used to *only* update the database schema. Not change the actual data in the database. I don't think this is the right place to be doing this 'migration'.</div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="gmail-HOEnZb"><div class="gmail-h5">
> (2) A separate script for migration<br>
><br>
> Pros:<br>
> * can be done in advance (even while still on Pike)<br>
> * a failure won't fail the whole upgrade<br>
> * will rely on drivers enabled in actually running conductors, not on<br>
> ironic.conf<br>
><br>
> Cons:<br>
> * a new upgrade action before Rocky<br>
> * won't be available in packaging<br>
> * unclear how to update nodes that are in some process (e.g. cleaning), will<br>
> probably have to be run several times<br>
><br>
> (3) Migration as part of 'ironic-dbsync online_data_migration'<br>
><br>
> Pros:<br>
> * nothing new to do for the operators, similar to (1)<br>
> * probably a more natural place to do this than (1)<br>
> * can rely on drivers enabled in actually running conductors, not on<br>
> ironic.conf<br>
><br>
> Cons:<br>
> * data migration will fail, if for some nodes the matching hardware types<br>
> and/or interfaces are not enabled in ironic.conf<br>
><br></div></div></blockquote><div><br></div><div>The online_data_migration exists for situations just like this; migration of data :) So this is my vote. It is fine if the call fails, this lets the operators know that they will need to make changes. If we go with this, I envision it working something like:</div><div><br></div><div>Queens: deprecate classic drivers</div><div>Queens: 'ironic-dbsync online_data_migrations' is run (at any point in time, while ironic services are running). Among other things, it would migrate classic drivers to hardware types, failing if needed hardware types or interfaces are not enabled in the config file.</div><div>This must succeed before upgrading to Rocky</div><div>Rocky: if you try to upgrade to Rocky and the above Queens' ironic-dbsync online_data_migrations fails, you will not be able to upgrade.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="gmail-HOEnZb"><div class="gmail-h5">
<br>
</div></div>Rather than fail in various ways, why not do like what nova has with a<br>
pre-upgrade status check[0] and then just handle it in ironic-dbsync<br>
upgrade? This would allow operators to check prior to running the<br>
upgrade to understand what might need to be changed. Additionally the<br>
upgrade command itself could leverage the status check to fail nicely.<br>
<span class="gmail-"><br></span></blockquote><div><br></div><div>I like the idea of a status check, although I am doubtful that it is do-able in Queens, given the goals we have. But of course, that can be up for discussion etc.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-">
<br>
> (4) Do nothing, let operators handle the migration.<br>
><br>
<br>
</span>Please no.<br>
<span class="gmail-"><br>
><br>
> The most reasonable option for me seems (3), then (4). What do you think?<br>
><br>
<br>
</span>So this was chatted about in relation to some environment tooling we<br>
have where we currently have where older 'pxe_ipmitool' defined and<br>
this will need to switch to be 'ipmi'[1]. The issue with the hard<br>
cutover on this one is any tooling which may have been written that<br>
currently works with multiple openstack releases to generate the<br>
required json for ironic will now have to take that into account. I<br>
know in our case we'll be needing to support newton for longer so<br>
making the tooling openstack aware around this is just further<br>
tech-debt that we'll be creating. Is there a better solution that<br>
could be done either in ironic client or in the API to gracefully<br>
handle this transition for a longer period of time? I think this may<br>
be one of those decisions that has a far reaching impact on<br>
deployers/operators due changes they will have to make to support<br>
multiple versions or as they upgrade between versions and they aren't<br>
fully aware of yet as many may not be on Ocata. This change seems<br>
like it has a high UX impact and IMHO should be done very carefully.<br></blockquote><div><br></div><div><br></div><div>It seems to me that if this going to cause undue hardship, that we consider prolonging the deprecation period for eg. another cycle. I guess I'd like to get an idea of how long is reasonable, to handle this transition... How do we get more data points on this, or is Alex the representative for our users out there? :)</div><div><br></div><div>--ruby</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Thanks,<br>
-Alex<br>
<br>
[0] <a href="https://docs.openstack.org/nova/pike/cli/nova-status.html" rel="noreferrer" target="_blank">https://docs.openstack.org/<wbr>nova/pike/cli/nova-status.html</a><br>
[1] <a href="http://eavesdrop.openstack.org/irclogs/%23tripleo/%23tripleo.2017-11-14.log.html#t2017-11-14T15:36:45" rel="noreferrer" target="_blank">http://eavesdrop.openstack.<wbr>org/irclogs/%23tripleo/%<wbr>23tripleo.2017-11-14.log.html#<wbr>t2017-11-14T15:36:45</a><br>
<div class="gmail-HOEnZb"><div class="gmail-h5"><br>
<br>
> Dmitry<br>
><br>
> [1]<br>
> <a href="http://specs.openstack.org/openstack/ironic-specs/specs/approved/classic-drivers-future.html" rel="noreferrer" target="_blank">http://specs.openstack.org/<wbr>openstack/ironic-specs/specs/<wbr>approved/classic-drivers-<wbr>future.html</a><br>
><br>
> ______________________________<wbr>______________________________<wbr>______________<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.<wbr>openstack.org?subject:<wbr>unsubscribe</a><br>
> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/<wbr>cgi-bin/mailman/listinfo/<wbr>openstack-dev</a><br>
<br>
______________________________<wbr>______________________________<wbr>______________<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.<wbr>openstack.org?subject:<wbr>unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/<wbr>cgi-bin/mailman/listinfo/<wbr>openstack-dev</a><br>
</div></div></blockquote></div><br></div></div>