<span id="docs-internal-guid-e3c1fc46-2bfa-867a-b880-883e2f04ef5f"><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">I'd like to raise this topic for a wider discussion outside of the hallway track and code reviews, where it has thus far mostly remained.</span></p><br><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">In previous discussions, my understanding has been that the Fuel team sought to use Ironic to manage "pets" rather than "cattle" - and doing so required extending the API and the project's functionality in ways that no one else on the core team agreed with. Perhaps that understanding was wrong (or perhaps not), but in any case, there is now a proposal to add a FuelAgent driver to Ironic. The proposal claims this would meet that teams' needs without requiring changes to the core of Ironic.</span></p><br><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><a href="https://review.openstack.org/#/c/138115/" style="text-decoration:none"><span style="font-family:Arial;color:rgb(63,81,181);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">https://review.openstack.org/#/c/138115/</span></a></p><br><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">The Problem Description section calls out four things, which have all been discussed previously (some are here [0]). I would like to address each one, invite discussion on whether or not these are, in fact, problems facing Ironic (not whether they are problems for someone, somewhere), and then ask why these necessitate a new driver be added to the project. </span></p><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap"><br></span></p><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">They are, for reference:</span></p><br><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">1. limited partition support</span></p><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">2. no software RAID support</span></p><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">3. no LVM support</span></p><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">4. no support for hardware that lacks a BMC</span></p><div><span><br></span></div><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">#1.</span></p><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">When deploying a partition image (eg, QCOW format), Ironic's PXE deploy driver performs only the minimal partitioning necessary to fulfill its mission as an OpenStack service: respect the user's request for root, swap, and ephemeral partition sizes. When deploying a whole-disk image, Ironic does not perform any partitioning -- such is left up to the operator who created the disk image.</span></p><br><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">Support for arbitrarily complex partition layouts is not required by, nor does it facilitate, the goal of provisioning physical servers via a common cloud API. Additionally, as with #3 below, nothing prevents a user from creating more partitions in unallocated disk space once they have access to their instance. Therefor, I don't see how Ironic's minimal support for partitioning is a problem for the project.</span></p><br><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">#2.</span></p><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">There is no support for defining a RAID in Ironic today, at all, whether software or hardware. Several proposals were floated last cycle; one is under review right now for DRAC support [1], and there are multiple call outs for RAID building in the state machine mega-spec [2]. Any such support for hardware RAID will necessarily be abstract enough to support multiple hardware vendor's driver implementations and both in-band creation (via IPA) and out-of-band creation (via vendor tools).</span></p><br><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">Given the above, it may become possible to add software RAID support to IPA in the future, under the same abstraction. This would closely tie the deploy agent to the images it deploys (the latter image's kernel would be dependent upon a software RAID built by the former), but this would necessarily be true for the proposed FuelAgent as well.</span></p><br><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">I don't see this as a compelling reason to add a new driver to the project. Instead, we should (plan to) add support for software RAID to the deploy agent which is already part of the project.</span></p><div><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap"><br></span></div><div><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap"><p dir="ltr" style="font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;white-space:normal;line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">#3.</span></p><p dir="ltr" style="font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;white-space:normal;line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">LVM volumes can easily be added by a user (after provisioning) within unallocated disk space for non-root partitions. I have not yet seen a compelling argument for doing this within the provisioning phase.</span></p><div><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap"><br></span></div></span></div><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">#4.</span></p><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">There are already in-tree drivers [3] [4] [5] which do not require a BMC. One of these uses SSH to connect and run pre-determined commands. Like the spec proposal, which states at line 122, "Control via SSH access feature intended only for experiments in non-production environment," the current SSHPowerDriver is only meant for testing environments. We could probably extend this driver to do what the FuelAgent spec proposes, as far as remote power control for cheap always-on hardware in testing environments with a pre-shared key.</span></p><br><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">(And if anyone wonders about a use case for Ironic without external power control ... I can only think of one situation where I would rationally ever want to have a control-plane agent running inside a user-instance: I am both the operator and the only user of the cloud.)</span></p><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><br></p><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">----------------</span></p><br><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">In summary, as far as I can tell, all of the problem statements upon which the FuelAgent proposal are based are solvable through incremental changes in existing drivers, or out of scope for the project entirely. As another software-based deploy agent, FuelAgent would duplicate the majority of the functionality which ironic-python-agent has today.</span></p><br><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">Ironic's driver ecosystem benefits from a diversity of hardware-enablement drivers. Today, we have two divergent software deployment drivers which approach image deployment differently: "agent" drivers use a local agent to prepare a system and download the image; "pxe" drivers use a remote agent and copy the image over iSCSI. I don't understand how a second driver which duplicates the functionality we already have, and shares the same goals as the drivers we already have, is beneficial to the project.</span></p><br><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">Doing the same thing twice just increases the burden on the team; we're all working on the same problems, so let's do it together.</span></p><br><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">-Devananda</span></p><br><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap"> </span></p><br><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">[0] </span><a href="https://blueprints.launchpad.net/ironic/+spec/ironic-python-agent-partition" style="text-decoration:none"><span style="font-family:Arial;color:rgb(63,81,181);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">https://blueprints.launchpad.net/ironic/+spec/ironic-python-agent-partition</span></a></p><div><span><br></span></div><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">[1] </span><a href="https://review.openstack.org/#/c/107981/" style="text-decoration:none"><span style="font-family:Arial;color:rgb(63,81,181);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">https://review.openstack.org/#/c/107981/</span></a></p><br><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">[2] </span><span style="text-decoration:underline;font-family:Arial;color:rgb(63,81,181);vertical-align:baseline;white-space:pre-wrap"><a href="https://review.openstack.org/#/c/133828/11/specs/kilo/new-ironic-state-machine.rst" style="text-decoration:none">https://review.openstack.org/#/c/133828/11/specs/kilo/new-ironic-state-machine.rst</a></span></p><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><br></p><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">[3] </span><a href="http://git.openstack.org/cgit/openstack/ironic/tree/ironic/drivers/modules/snmp.py" style="text-decoration:none"><span style="font-family:Arial;color:rgb(63,81,181);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">http://git.openstack.org/cgit/openstack/ironic/tree/ironic/drivers/modules/snmp.py</span></a></p><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">[4] </span><a href="http://git.openstack.org/cgit/openstack/ironic/tree/ironic/drivers/modules/iboot.py" style="text-decoration:none"><span style="font-family:Arial;color:rgb(63,81,181);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">http://git.openstack.org/cgit/openstack/ironic/tree/ironic/drivers/modules/iboot.py</span></a></p><p dir="ltr" style="line-height:1.5;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Arial;vertical-align:baseline;white-space:pre-wrap">[5] </span><a href="http://git.openstack.org/cgit/openstack/ironic/tree/ironic/drivers/modules/ssh.py" style="text-decoration:none"><span style="font-family:Arial;color:rgb(63,81,181);text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">http://git.openstack.org/cgit/openstack/ironic/tree/ironic/drivers/modules/ssh.py</span></a></p><br><br><br><br></span>