<div dir="ltr"><p>Hi all.<br></p><p>Hardware nodes consoles have some specific: limited number of</p>
<p>concurrent console sessions (often to 1) that can be established.<br>
</p>
<p>There are some issues (described below) due to conflict between</p>
<p>distributed ironic conductors services and local console processes.</p>
<p>This affect only case with local console processes, currently</p>
<p>shellinabox and socat for example.</p>
<p>There are some possible "global" solutions:</p>
<p>1) Pluggable internal task API [1], currently rejected by community;</p>
<p>2) Non-pluggable internal task API that uses external service (there<br>
</p>
<p>is not necessary service currently in OpenStack);</p>
<p>3) Custom distributed process management based on ssh access</p>
<p>between ironic conductor hosts (looks like a hack);</p>
<p>4) New console interface drivers which implements tasks management</p>
<p>internally (like "k8s_shellinabox", "k8s_socat").<br>
</p>
<p>And partial solutions (some of them proposed below) are possible.</p>
<p>In multi-conductor environment ironic conductor process can be</p>
<p>died/stopped/blocked (removed) or started/restarted (added).</p>
<p>Possible cases:</p>
<p>1) Conductor removed</p>
<p>a) gracefully stopped. Some daemon processes like shellinabox</p>
<p>for consoles can continue to run. This issue can be fixed currently</p>
<p>as separate bug.</p>
<p>b) died/killed. Daemon processes can continue to run. This issue can</p>
<p>be fixed only by distributed tasks management ("global" solutions above).</p>
<p>c) all host with conductor died. No fix needed.</p>
<p>2) Conductor added/restarted</p>
<p>New conductor try to start processes for enabled consoles, but currently</p>
<p>processes on conductor hosts that works with these nodes before not</p>
<p>stopped [2]. I see two possible solution for this issue:</p>
<p>1) "Untakeover" periodic task for stopping console processes.</p>
<p>For this solution we should not stop non-local consoles. <br>
</p>
<p>2) Do not stop process on old conductor. Use redefined RPC routing</p>
<p>(based on saved into DB conductor that started console) on API side</p>
<p>for set console and wait stopping via API. This routing should also</p>
<p>ignore dead conductors.</p><p><br></p><p>If you have some ideas please leave comments.<br>
</p>
<br><p>[1] <a href="https://review.openstack.org/#/c/431605/">https://review.openstack.org/#/c/431605/</a></p>
<p>[2] <a href="https://bugs.launchpad.net/ironic/+bug/1632192">https://bugs.launchpad.net/ironic/+bug/1632192</a></p><p><br></p><p>Yuriy Zveryanskyy</p><p><br></p></div>