<div dir="ltr">Kevin, <div><br></div><div>Just to make sure everyone understands what Fuel Agent is about. Fuel Agent is agnostic to image format. There are 3 possibilities for image format</div><div>1) DISK IMAGE contains GPT/MBR table and all partitions and metadata in case of md or lvm. That is just something like what you get when run 'dd if=/dev/sda of=disk_image.raw'</div><div>2) FS IMAGE contains fs. Disk contains some partitions which then could be used to create md device or volume group contains logical volumes. We then can put a file system over plain partition or md device or logical volume. This type of image is what you get when run 'dd if=/dev/sdaN of=fs_image.raw'</div><div>3) TAR IMAGE contains files. It is when you run 'tar cf tar_image.tar /'</div><div><br></div><div>Currently in Fuel we use FS images. Fuel Agent creates partitions, md and lvm devices and then downloads FS images and put them on partition devices (/dev/sdaN) or on lvm device (/dev/mapper/vgname/lvname) or md device (/dev/md0)</div><div><br></div><div>Fuel Agent is also able to install and configure grub. </div><div><br></div><div>Here is the code of Fuel Agent <a href="https://github.com/stackforge/fuel-web/tree/master/fuel_agent">https://github.com/stackforge/fuel-web/tree/master/fuel_agent</a></div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><div>Vladimir Kozhukalov</div></div></div>
<br><div class="gmail_quote">On Tue, Dec 9, 2014 at 8:41 PM, Fox, Kevin M <span dir="ltr"><<a href="mailto:Kevin.Fox@pnnl.gov" target="_blank">Kevin.Fox@pnnl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">We've been interested in Ironic as a replacement for Cobbler for some of our systems and have been kicking the tires a bit recently.<br>
<br>
While initially I thought this thread was probably another "Fuel not playing well with the community" kind of thing, I'm not thinking that any more. Its deeper then that.<br>
<br>
Cloud provisioning is great. I really REALLY like it. But one of the things that makes it great is the nice, pretty, cute, uniform, standard "hardware" the vm gives the user. Ideally, the physical hardware would behave the same. But,<br>
“No Battle Plan Survives Contact With the Enemy”.  The sad reality is, most hardware is different from each other. Different drivers, different firmware, different different different.<br>
<br>
One way the cloud enables this isolation is by forcing the cloud admin's to install things and deal with the grungy hardware to make the interface nice and clean for the user. For example, if you want greater mean time between failures of nova compute nodes, you probably use a raid 1. Sure, its kind of a pet kind of thing todo, but its up to the cloud admin to decide what's "better", buying more hardware, or paying for more admin/user time. Extra hard drives are dirt cheep...<br>
<br>
So, in reality Ironic is playing in a space somewhere between "I want to use cloud tools to deploy hardware, yay!" and "ewww.., physical hardware's nasty. you have to know all these extra things and do all these extra things that you don't have to do with a vm"... I believe Ironic's going to need to be able to deal with this messiness in as clean a way as possible.  But that's my opinion. If the team feels its not a valid use case, then we'll just have to use something else for our needs. I really really want to be able to use heat to deploy whole physical distributed systems though.<br>
<br>
Today, we're using software raid over two disks to deploy our nova compute. Why? We have some very old disks we recovered for one of our clouds and they fail often. nova-compute is pet enough to benefit somewhat from being able to swap out a disk without much effort. If we were to use Ironic to provision the compute nodes, we need to support a way to do the same.<br>
<br>
We're looking into ways of building an image that has a software raid presetup, and expand it on boot. This requires each image to be customized for this case though. I can see Fuel not wanting to provide two different sets of images, "hardware raid" and "software raid", that have the same contents in them, with just different partitioning layouts... If we want users to not have to care about partition layout, this is also not ideal...<br>
<br>
Assuming Ironic can be convinced that these features really would be needed, perhaps the solution is a middle ground between the pxe driver and the agent?<br>
<br>
Associate partition information at the flavor level. The admin can decide the best partitioning layout for a given hardware... The user doesn't have to care any more. Two flavors for the same hardware could be "4 9's" or "5 9's" or something that way.<br>
Modify the agent to support a pxe style image in addition to full layout, and have the agent partition/setup raid and lay down the image into it.<br>
Modify the agent to support running grub2 at the end of deployment.<br>
<br>
Or at least make the agent plugable to support adding these options.<br>
<br>
This does seem a bit backwards from the way the agent has been going. the pxe driver was kind of linux specific. the agent is not... So maybe that does imply a 3rd driver may be beneficial... But it would be nice to have one driver, the agent, in the end that supports everything.<br>
<br>
Anyway, some things to think over.<br>
<br>
Thanks,<br>
Kevin<br>
________________________________________<br>
From: Jim Rollenhagen [<a href="mailto:jim@jimrollenhagen.com">jim@jimrollenhagen.com</a>]<br>
Sent: Tuesday, December 09, 2014 7:00 AM<br>
To: OpenStack Development Mailing List (not for usage questions)<br>
Subject: Re: [openstack-dev] [Ironic] Fuel agent proposal<br>
<div class="HOEnZb"><div class="h5"><br>
On Tue, Dec 09, 2014 at 04:01:07PM +0400, Vladimir Kozhukalov wrote:<br>
> Just a short explanation of Fuel use case.<br>
><br>
> Fuel use case is not a cloud. Fuel is a deployment tool. We install OS on<br>
> bare metal servers and on VMs<br>
> and then configure this OS using Puppet. We have been using Cobbler as our<br>
> OS provisioning tool since the beginning of Fuel.<br>
> However, Cobbler assumes using native OS installers (Anaconda and<br>
> Debian-installer). For some reasons we decided to<br>
> switch to image based approach for installing OS.<br>
><br>
> One of Fuel features is the ability to provide advanced partitioning<br>
> schemes (including software RAIDs, LVM).<br>
> Native installers are quite difficult to customize in the field of<br>
> partitioning<br>
> (that was one of the reasons to switch to image based approach). Moreover,<br>
> we'd like to implement even more<br>
> flexible user experience. We'd like to allow user to choose which hard<br>
> drives to use for root FS, for<br>
> allocating DB. We'd like user to be able to put root FS over LV or MD<br>
> device (including stripe, mirror, multipath).<br>
> We'd like user to be able to choose which hard drives are bootable (if<br>
> any), which options to use for mounting file systems.<br>
> Many many various cases are possible. If you ask why we'd like to support<br>
> all those cases, the answer is simple:<br>
> because our users want us to support all those cases.<br>
> Obviously, many of those cases can not be implemented as image internals,<br>
> some cases can not be also implemented on<br>
> configuration stage (placing root fs on lvm device).<br>
><br>
> As far as those use cases were rejected to be implemented in term of IPA,<br>
> we implemented so called Fuel Agent.<br>
<br>
This is *precisely* why I disagree with adding this driver.<br>
<br>
Nearly every feature that is listed here has been talked about before,<br>
within the Ironic community. Software RAID, LVM, user choosing the<br>
partition layout. These were reected from IPA because they do not fit in<br>
*Ironic*, not because they don't fit in IPA.<br>
<br>
If the Fuel team can convince enough people that Ironic should be<br>
managing pets, then I'm almost okay with adding this driver (though I<br>
still think adding those features to IPA is the right thing to do).<br>
<br>
// jim<br>
<br>
> Important Fuel Agent features are:<br>
><br>
> * It does not have REST API<br>
> * it has executable entry point[s]<br>
> * It uses local json file as it's input<br>
> * It is planned to implement ability to download input data via HTTP (kind<br>
> of metadata service)<br>
> * It is designed to be agnostic to input data format, not only Fuel format<br>
> (data drivers)<br>
> * It is designed to be agnostic to image format (tar images, file system<br>
> images, disk images, currently fs images)<br>
> * It is designed to be agnostic to image compression algorithm (currently<br>
> gzip)<br>
> * It is designed to be agnostic to image downloading protocol (currently<br>
> local file and HTTP link)<br>
><br>
> So, it is clear that being motivated by Fuel, Fuel Agent is quite<br>
> independent and generic. And we are open for<br>
> new use cases.<br>
><br>
> According Fuel itself, our nearest plan is to get rid of Cobbler because<br>
> in the case of image based approach it is huge overhead. The question is<br>
> which tool we can use instead of Cobbler. We need power management,<br>
> we need TFTP management, we need DHCP management. That is<br>
> exactly what Ironic is able to do. Frankly, we can implement power/TFTP/DHCP<br>
> management tool independently, but as Devananda said, we're all working on<br>
> the same problems,<br>
> so let's do it together.  Power/TFTP/DHCP management is where we are<br>
> working on the same problems,<br>
> but IPA and Fuel Agent are about different use cases. This case is not just<br>
> Fuel, any mature<br>
> deployment case require advanced partition/fs management. However, for me<br>
> it is OK, if it is easily possible<br>
> to use Ironic with external drivers (not merged to Ironic and not tested on<br>
> Ironic CI).<br>
><br>
> AFAIU, this spec <a href="https://review.openstack.org/#/c/138115/" target="_blank">https://review.openstack.org/#/c/138115/</a> does not assume<br>
> changing Ironic API and core.<br>
> Jim asked about how Fuel Agent will know about advanced disk partitioning<br>
> scheme if API is not<br>
> changed. The answer is simple: Ironic is supposed to send a link to<br>
> metadata service (http or local file)<br>
> where Fuel Agent can download input json data.<br>
><br>
> As Roman said, we try to be pragmatic and suggest something which does not<br>
> break anything. All changes<br>
> are supposed to be encapsulated into a driver. No API and core changes. We<br>
> have resources to support, test<br>
> and improve this driver. This spec is just a zero step. Further steps are<br>
> supposed to improve driver<br>
> so as to make it closer to Ironic abstractions.<br>
><br>
> For Ironic that means widening use cases and user community. But, as I<br>
> already said,<br>
> we are OK if Ironic does not need this feature.<br>
><br>
> Vladimir Kozhukalov<br>
><br>
> On Tue, Dec 9, 2014 at 1:09 PM, Roman Prykhodchenko <<br>
> <a href="mailto:rprikhodchenko@mirantis.com">rprikhodchenko@mirantis.com</a>> wrote:<br>
><br>
> > It is true that IPA and FuelAgent share a lot of functionality in common.<br>
> > However there is a major difference between them which is that they are<br>
> > intended to be used to solve a different problem.<br>
> ><br>
> > IPA is a solution for provision-use-destroy-use_by_different_user use-case<br>
> > and is really great for using it for providing BM nodes for other OS<br>
> > services or in services like Rackspace OnMetal. FuelAgent itself serves for<br>
> > provision-use-use-…-use use-case like Fuel or TripleO have.<br>
> ><br>
> > Those two use-cases require concentration on different details in first<br>
> > place. For instance for IPA proper decommissioning is more important than<br>
> > advanced disk management, but for FuelAgent priorities are opposite because<br>
> > of obvious reasons.<br>
> ><br>
> > Putting all functionality to a single driver and a single agent may cause<br>
> > conflicts in priorities and make a lot of mess inside both the driver and<br>
> > the agent. Actually previously changes to IPA were blocked right because of<br>
> > this conflict of priorities. Therefore replacing FuelAgent by IPA in where<br>
> > FuelAgent is used currently does not seem like a good option because come<br>
> > people (and I’m not talking about Mirantis) might loose required features<br>
> > because of different priorities.<br>
> ><br>
> > Having two separate drivers along with two separate agents for those<br>
> > different use-cases will allow to have two independent teams that are<br>
> > concentrated on what’s really important for a specific use-case. I don’t<br>
> > see any problem in overlapping functionality if it’s used differently.<br>
> ><br>
> ><br>
> > P. S.<br>
> > I realise that people may be also confused by the fact that FuelAgent is<br>
> > actually called like that and is used only in Fuel atm. Our point is to<br>
> > make it a simple, powerful and what’s more important a generic tool for<br>
> > provisioning. It is not bound to Fuel or Mirantis and if it will cause<br>
> > confusion in the future we will even be happy to give it a different and<br>
> > less confusing name.<br>
> ><br>
> > P. P. S.<br>
> > Some of the points of this integration do not look generic enough or nice<br>
> > enough. We look pragmatic on the stuff and are trying to implement what’s<br>
> > possible to implement as the first step. For sure this is going to have a<br>
> > lot more steps to make it better and more generic.<br>
> ><br>
> ><br>
> > On 09 Dec 2014, at 01:46, Jim Rollenhagen <<a href="mailto:jim@jimrollenhagen.com">jim@jimrollenhagen.com</a>> wrote:<br>
> ><br>
> ><br>
> ><br>
> > On December 8, 2014 2:23:58 PM PST, Devananda van der Veen <<br>
> > <a href="mailto:devananda.vdv@gmail.com">devananda.vdv@gmail.com</a>> wrote:<br>
> ><br>
> > I'd like to raise this topic for a wider discussion outside of the<br>
> > hallway<br>
> > track and code reviews, where it has thus far mostly remained.<br>
> ><br>
> > In previous discussions, my understanding has been that the Fuel team<br>
> > sought to use Ironic to manage "pets" rather than "cattle" - and doing<br>
> > so<br>
> > required extending the API and the project's functionality in ways that<br>
> > no<br>
> > one else on the core team agreed with. Perhaps that understanding was<br>
> > wrong<br>
> > (or perhaps not), but in any case, there is now a proposal to add a<br>
> > FuelAgent driver to Ironic. The proposal claims this would meet that<br>
> > teams'<br>
> > needs without requiring changes to the core of Ironic.<br>
> ><br>
> > <a href="https://review.openstack.org/#/c/138115/" target="_blank">https://review.openstack.org/#/c/138115/</a><br>
> ><br>
> ><br>
> > I think it's clear from the review that I share the opinions expressed in<br>
> > this email.<br>
> ><br>
> > That said (and hopefully without derailing the thread too much), I'm<br>
> > curious how this driver could do software RAID or LVM without modifying<br>
> > Ironic's API or data model. How would the agent know how these should be<br>
> > built? How would an operator or user tell Ironic what the<br>
> > disk/partition/volume layout would look like?<br>
> ><br>
> > And before it's said - no, I don't think vendor passthru API calls are an<br>
> > appropriate answer here.<br>
> ><br>
> > // jim<br>
> ><br>
> ><br>
> > The Problem Description section calls out four things, which have all<br>
> > been<br>
> > discussed previously (some are here [0]). I would like to address each<br>
> > one,<br>
> > invite discussion on whether or not these are, in fact, problems facing<br>
> > Ironic (not whether they are problems for someone, somewhere), and then<br>
> > ask<br>
> > why these necessitate a new driver be added to the project.<br>
> ><br>
> ><br>
> > They are, for reference:<br>
> ><br>
> > 1. limited partition support<br>
> ><br>
> > 2. no software RAID support<br>
> ><br>
> > 3. no LVM support<br>
> ><br>
> > 4. no support for hardware that lacks a BMC<br>
> ><br>
> > #1.<br>
> ><br>
> > When deploying a partition image (eg, QCOW format), Ironic's PXE deploy<br>
> > driver performs only the minimal partitioning necessary to fulfill its<br>
> > mission as an OpenStack service: respect the user's request for root,<br>
> > swap,<br>
> > and ephemeral partition sizes. When deploying a whole-disk image,<br>
> > Ironic<br>
> > does not perform any partitioning -- such is left up to the operator<br>
> > who<br>
> > created the disk image.<br>
> ><br>
> > Support for arbitrarily complex partition layouts is not required by,<br>
> > nor<br>
> > does it facilitate, the goal of provisioning physical servers via a<br>
> > common<br>
> > cloud API. Additionally, as with #3 below, nothing prevents a user from<br>
> > creating more partitions in unallocated disk space once they have<br>
> > access to<br>
> > their instance. Therefor, I don't see how Ironic's minimal support for<br>
> > partitioning is a problem for the project.<br>
> ><br>
> > #2.<br>
> ><br>
> > There is no support for defining a RAID in Ironic today, at all,<br>
> > whether<br>
> > software or hardware. Several proposals were floated last cycle; one is<br>
> > under review right now for DRAC support [1], and there are multiple<br>
> > call<br>
> > outs for RAID building in the state machine mega-spec [2]. Any such<br>
> > support<br>
> > for hardware RAID will necessarily be abstract enough to support<br>
> > multiple<br>
> > hardware vendor's driver implementations and both in-band creation (via<br>
> > IPA) and out-of-band creation (via vendor tools).<br>
> ><br>
> > Given the above, it may become possible to add software RAID support to<br>
> > IPA<br>
> > in the future, under the same abstraction. This would closely tie the<br>
> > deploy agent to the images it deploys (the latter image's kernel would<br>
> > be<br>
> > dependent upon a software RAID built by the former), but this would<br>
> > necessarily be true for the proposed FuelAgent as well.<br>
> ><br>
> > I don't see this as a compelling reason to add a new driver to the<br>
> > project.<br>
> > Instead, we should (plan to) add support for software RAID to the<br>
> > deploy<br>
> > agent which is already part of the project.<br>
> ><br>
> > #3.<br>
> ><br>
> > LVM volumes can easily be added by a user (after provisioning) within<br>
> > unallocated disk space for non-root partitions. I have not yet seen a<br>
> > compelling argument for doing this within the provisioning phase.<br>
> ><br>
> > #4.<br>
> ><br>
> > There are already in-tree drivers [3] [4] [5] which do not require a<br>
> > BMC.<br>
> > One of these uses SSH to connect and run pre-determined commands. Like<br>
> > the<br>
> > spec proposal, which states at line 122, "Control via SSH access<br>
> > feature<br>
> > intended only for experiments in non-production environment," the<br>
> > current<br>
> > SSHPowerDriver is only meant for testing environments. We could<br>
> > probably<br>
> > extend this driver to do what the FuelAgent spec proposes, as far as<br>
> > remote<br>
> > power control for cheap always-on hardware in testing environments with<br>
> > a<br>
> > pre-shared key.<br>
> ><br>
> > (And if anyone wonders about a use case for Ironic without external<br>
> > power<br>
> > control ... I can only think of one situation where I would rationally<br>
> > ever<br>
> > want to have a control-plane agent running inside a user-instance: I am<br>
> > both the operator and the only user of the cloud.)<br>
> ><br>
> ><br>
> > ----------------<br>
> ><br>
> > In summary, as far as I can tell, all of the problem statements upon<br>
> > which<br>
> > the FuelAgent proposal are based are solvable through incremental<br>
> > changes<br>
> > in existing drivers, or out of scope for the project entirely. As<br>
> > another<br>
> > software-based deploy agent, FuelAgent would duplicate the majority of<br>
> > the<br>
> > functionality which ironic-python-agent has today.<br>
> ><br>
> > Ironic's driver ecosystem benefits from a diversity of<br>
> > hardware-enablement<br>
> > drivers. Today, we have two divergent software deployment drivers which<br>
> > approach image deployment differently: "agent" drivers use a local<br>
> > agent to<br>
> > prepare a system and download the image; "pxe" drivers use a remote<br>
> > agent<br>
> > and copy the image over iSCSI. I don't understand how a second driver<br>
> > which<br>
> > duplicates the functionality we already have, and shares the same goals<br>
> > as<br>
> > the drivers we already have, is beneficial to the project.<br>
> ><br>
> > Doing the same thing twice just increases the burden on the team; we're<br>
> > all<br>
> > working on the same problems, so let's do it together.<br>
> ><br>
> > -Devananda<br>
> ><br>
> ><br>
> > [0]<br>
> > <a href="https://blueprints.launchpad.net/ironic/+spec/ironic-python-agent-partition" target="_blank">https://blueprints.launchpad.net/ironic/+spec/ironic-python-agent-partition</a><br>
> ><br>
> > [1] <a href="https://review.openstack.org/#/c/107981/" target="_blank">https://review.openstack.org/#/c/107981/</a><br>
> ><br>
> > [2]<br>
> ><br>
> > <a href="https://review.openstack.org/#/c/133828/11/specs/kilo/new-ironic-state-machine.rst" target="_blank">https://review.openstack.org/#/c/133828/11/specs/kilo/new-ironic-state-machine.rst</a><br>
> ><br>
> ><br>
> > [3]<br>
> ><br>
> > <a href="http://git.openstack.org/cgit/openstack/ironic/tree/ironic/drivers/modules/snmp.py" target="_blank">http://git.openstack.org/cgit/openstack/ironic/tree/ironic/drivers/modules/snmp.py</a><br>
> ><br>
> > [4]<br>
> ><br>
> > <a href="http://git.openstack.org/cgit/openstack/ironic/tree/ironic/drivers/modules/iboot.py" target="_blank">http://git.openstack.org/cgit/openstack/ironic/tree/ironic/drivers/modules/iboot.py</a><br>
> ><br>
> > [5]<br>
> ><br>
> > <a href="http://git.openstack.org/cgit/openstack/ironic/tree/ironic/drivers/modules/ssh.py" target="_blank">http://git.openstack.org/cgit/openstack/ironic/tree/ironic/drivers/modules/ssh.py</a><br>
> ><br>
> ><br>
> > ------------------------------------------------------------------------<br>
> ><br>
> > _______________________________________________<br>
> > OpenStack-dev mailing list<br>
> > <a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
> > <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
> ><br>
> ><br>
> ><br>
> > _______________________________________________<br>
> > OpenStack-dev mailing list<br>
> > <a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
> > <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
> ><br>
> ><br>
> ><br>
> > _______________________________________________<br>
> > OpenStack-dev mailing list<br>
> > <a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
> > <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
> ><br>
> ><br>
<br>
> _______________________________________________<br>
> OpenStack-dev mailing list<br>
> <a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br>
<br>
_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br>
_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</div></div></blockquote></div><br></div>