Question

I am learning about tools like Chef/Puppet/etc for the first time and was wondering how well (or poorly) they integrate with applications deployed on the cloud:

  • Why use Chef when there are vendor-specific APIs out there, as well as frameworks like JCloud which abstract even those APIs?
  • Is there a performance cost to using these configuration tools, or (once configured) do the nodes/machines just operate like any other (non-managed) machine on the cloud?
  • Can Chef be used to configure any technology thats out there, or does it provide a list of "supported vendors/systems"? Meaning, lets just say I have a bunch of Chef-configured PostgreSQL servers. Then the next day, some crazy new RDBMS comes out and I want to switch over to it. Do I need to wait for Chef to "support" this new system, or is Chef vendor-agnostic?

Thanks in advance!

Was it helpful?

Solution

Disclosure: I am one of the developers employed by Puppet Labs.

Why use Chef when there are vendor-specific APIs out there, as well as frameworks like JCloud which abstract even those APIs?

There are two reasons. One is that Chef, Puppet, and similar tools are like JCloud - they offer an abstraction over the specific cloud APIs. So, you use them for the same reason.

The other is that most cloud APIs are really about creating machines, and Chef, Puppet, and similar tools are really about configuration after the machine is created. The abstraction over the cloud API is more convenience than core focus.

Is there a performance cost to using these configuration tools, or do the nodes/machines just operate like any other (non-managed) machine on the cloud?

Is there a performance cost to using knife to create the machine? No, it is just like any other unmanaged node. If you create a machine without Chef installed it is just like a machine without Chef installed. The same is true on the Puppet side, etc.

(Keep in mind, Chef, Puppet and similar tools don't have any API that isn't present in the public cloud API. No sweetheart deals for us there. ;)

Can Chef be used to configure any technology thats out there, or does it provide a list of "supported vendors/systems"? Meaning, lets just say I have a bunch of Chef-configured PostgreSQL servers. Then the next day, some crazy new RDBMS comes out and I want to switch over to it. Do I need to wait for Chef to "support" this new system, or is Chef vendor-agnostic?

Chef, and Puppet, both have extensibility at their heart. The both have a set of things they can manage out of the box, and a community that contributes support for a whole pile of other stuff.

So, if a fancy new service comes along you might have some-but-not-all of the features that you could manage with either. (Both manage, for example, packages, files, services, and running arbitrary commands out of the box. That will do lots of what a random new service needs, even without a more detailed model for managing it.)

If you want more - to manage, for example, access control inside the database is a first class part of the model, you might have to wait for someone to write support for it in your product. (That someone can, obviously, be you. :)

So, you get basic support out of the box, and it is deliberately easy to build more on top of them.

None of the products are "vendor specific" in any meaningful sense, although they are both more effective on Unix than other platforms, and have more limited but still valuable support for Windows.

Almost everything here applies to other products in the space, also.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top