Live data from Hacker News

Moving away from Puppet: SaltStack or Ansible?

ryandlane.com

171–180 of 182 posts

Re: Moving away from Puppet: SaltStack or Ansible?

#171
post #83

I wish that Ansible would work with orchestrating Docker containers. Here's my thought - Docker is replacing the use case for using Ansible/Chef/Puppet for a lot of people. It is far too easy to build portable docker machines and deploy them on bare metal. For me, the use case of provisioning a softlayer server and then setting it up using Ansible/Chef is no longer present. However, the problem of orchestrating a bun…

You might be interested in the Openstack deployment tooling called 'tripleo'[1] which has similar questions and has avoided all the current config management tools. The general gist is that what you're describing can be done using tools like Cloudformation/Heat or the newly minted Terraform, since they can both orchestrate the hardware/cloud resources and pass data in/out of the guests. [1] https://wiki.openstack.org…

thanks for this - but it looks to be tied to openstack, while I'm looking for something that leverages docker

Re: Moving away from Puppet: SaltStack or Ansible?

#172

I wish that Ansible would work with orchestrating Docker containers. Here's my thought - Docker is replacing the use case for using Ansible/Chef/Puppet for a lot of people. It is far too easy to build portable docker machines and deploy them on bare metal. For me, the use case of provisioning a softlayer server and then setting it up using Ansible/Chef is no longer present. However, the problem of orchestrating a bun…

Yep, it does to a great degree now - read http://www.ansible.com/blog/2014/02/12/installing-and-buildi... and can also be used to deploy containers. As various "clouds" for Docker spawn up the various cloud modules will also be able to talk to these things.

thanks for this. this is great, but could you build a more sophisticated example with port mapping, volume bind mapping and passing of variables to containers?

if you look at a fairly trivial fig.yml, you'll know what I mean. This is what enables a fairly common usecase (e.g. wordpress docker -> mysql docker) to be setup fairly quickly.

Re: Moving away from Puppet: SaltStack or Ansible?

#173
post #166

Earlier quoted context omitted.

Salt's REAT protocol uses the CurveCP crypto library, so yes, this is being addressed.

So, is being addressed not has been addressed? Is REAT the future of Salt? The most relevant I could find wasn't very clear: https://groups.google.com/forum/#!topic/salt-users/nh8MqRiHV... As far as I can tell RAET is still optional/Beta?: http://docs.saltstack.com/en/latest/topics/releases/2014.7.0... I tried finding out if CVEs had been assigned to the AES/RSA issues, but as far as I can tell there weren't any CVEs…

Yeah, good questions for sure. I'd suggest asking on the SaltStack IRC channel which is very active and helpful.

http://www.saltstack.com/community/

Re: Moving away from Puppet: SaltStack or Ansible?

#174

Everybody seems to be taking about moving away from Puppet lately. Maybe I just don't do anything sufficiently complex with it, but I've never had any problems or gripes with Puppet. 99% of the time it seems like the thing I want to do has already been done in a well-written module on the forge. The author seems to cite two main reasons for wanting to move away from Puppet: their codebase was large and badly structur…

There's definitely more reasons. I didn't want to detract too much from the topic of the blog post when I wrote it, since the post is already obscenely long. Puppet doesn't have native support for a lot of things, which require us to either implement it in puppet's DSL, or in custom ruby, which the upstream won't take. For instance: git, gems, pip, virtualenv, npm, etc. etc.. Puppet doesn't have looping. I'm always t…

Native support for things is irrelevant cause you can use modules from forge, and the community is the largest of all other CM tools around, so I hardly believe that you lack something there.

Actually, you can circumvent lack of looping with defined types and calling them with array. In my opinion if you need loops in your infrastructure code you're doing something wrong.

Saddest thing is that from all the people who brag about migrating away from puppet online nobody actually mentioned some of the drawbacks that are REAL and present - and not even discussed in Puppet community - like lack of simple search function vs complexity of exported resources... that means that people are moving away for reasons different then functionality alone...

Another real issue is the slowness of compile process, which happens on the master. But it's OK for "smaller" deployments - like if you don't go above 10-20k nodes.

Re: Moving away from Puppet: SaltStack or Ansible?

#175

Earlier quoted context omitted.

I think it's something that can be improved, yes. I'm not sure it's a bug, and I'm not sure it's really all that slow. We're talking about 0.5 seconds and maybe it could get down to 0.4? If you dig into the module I'm not sure what you would change. (Again, a fine discussion for ansible-devel probably? How would you solve it?) In your case, managing a list of 80 users to be sure there or not, I might have suggested p…

As a comparison, Salt checks the users, groups, ssh keys, etc. in under 1 second. Ansible to do the same set of actions was taking nearly 2 minutes. This was just to check, not even to take action. So, yeah, the majority of time in an initial run is waiting on apt/yum, when nothing is changing the majority of the time is spent on checking things. When you're making config management a part of your application's deplo…

CM tools are not supposed to do the deployment but configuration and management of environment. You should do deployments with a tool like Jenkins.

Re: Moving away from Puppet: SaltStack or Ansible?

#176
post #131

Earlier quoted context omitted.

The cool kids have a new fad so you're not cool unless you dump puppet. No technical reason at all as near as I can see. Its pretty much the same as "Perl hate", why do we hate Perl? No reason at all, other then being cool means hating Perl! Very middle school social dynamic. My puppet manifests is 16K. My modules is larger but I've got some large files stuck in there (long story) There are meta questions like: What…

I have a category on my blog dedicated to LDAP: http://ryandlane.com/blog/category/ldap/ I used it very heavily at Wikimedia and had very nice integration with Puppet. In general I think it's good to avoid LDAP if possible. It adds a point of failure and assuming you're not managing thousands of users (we were handling about 5k users in Wikimedia Labs), it's generally more work than managing users in Salt/Ansible/Pup…

PIP support is built into puppet, not sure about other stuff but since you missed this one there's a chance u missed others too.

So basically you don't have any valid technical points against puppet other then Salt seems easier for you to use. Which is ok.

Re: Moving away from Puppet: SaltStack or Ansible?

#177
post #21

Earlier quoted context omitted.

My take is that this "newer generation" of tools seems to focus on combining configuration management with orchestration. Chef and Puppet let you define the static state of the world but leave it up to you to figure out how to transition when something needs to change. On the other hand, Ansible works well as simply a remote task runner (like Fabric). Salt is the one I have least experience with, but I had a conversa…

I'm not finding the new generation term particularly meaningful. One thing that was somewhat unique about Ansible was it was designed for rolling updates as the initial use case, and the desire to solve deployment problems rather than just CM problems. Everybody tends to view orchestration differently, so see our take: http://www.ansible.com/blog/orchestration-you-keep-using-tha... and http://www.ansible.com/blog/201…

Yeah that sounds reasonable. Thanks for the orchestration link, I hadn't seen that post.

Re: Moving away from Puppet: SaltStack or Ansible?

#178
Please note that I have only had experience with Salt and fabric.

Salt falls short of what you want in the corner cases:

- We've found it's darn hard to upgrade. (To be clear, we'd like to upgrade by transitioning the master to a new VM; for one, this means things are clean (we can provision our salt-master through a fabric script), but it also allows us to change the amount of memory available.) The minions, when disconnected, do not reconnect to the hostname in their config: instead, they endlessly reconnect to the IP that the DNS resolved to when they were started. You can't simply change a DNS record and have the minions move. Please note that we're a bit behind in releases (we're using 0.17.2, IIRC) because of the difficulty of upgrading.

- YAML was a terrible choice for "state" files, in my opinion. State files contain lists of commands to execute on a remote host being configured: trying to specify args to functions in YAML is awkward.

- I'm of the opinion that the master-minion relationship is backwards. I'd be much more interested in something that connected to the minion. In particular, this would help with upgrading (the minion is controlled by two masters for a short period).

- The command line utilities are prone to user error: they return success during failure, they return no output and success because your states took too long to run, and it got bored. You can look up the job ID, but it's painful.

- The errors are utterly useless. In particular, Jinja rendering errors tend to reference incorrect locations in files, returning nonsense such as use of an undefined variable on a blank line.

- The output is useless too: you get a (very) verbose listing of everything that succeeded or failed. Telling if anything failed is the trick: it's buried in all the successes. (Terminal find is my friend here, but still, you have to be careful to watch out for boundaries between runs and not read an old run's output.) As discussed, the return code won't help you here.

- AFAICT, you need to be a particular user, and there is really no ACLs to speak of. All of our Salt stuff currently runs as a single user. People inevitably step on each others' toes.

- Non-responsive nodes are not mentioned in the output: they're the same as if they didn't exist! This results in some really wacky stuff happening. If you have variables that are lists of machines, the machine simply won't be in the list. This means if you need N of some type of machine, that list will be empty. (This often then triggers the aforementioned unreadable jinja error output, if you assume the list to be non-empty.)

- There is little capability for actual processing on the master itself. Sometimes, you need to coordinate the actions of several nodes together, such as generating keys for each node, and then distributing all keys to all nodes.

Re: Moving away from Puppet: SaltStack or Ansible?

#180

Earlier quoted context omitted.

This doesn't have to be the case. All resources in Ansible are declarative models of state, that get informed, and have idempotent properties. So it's just like any CMS. However if you want to write a deployment script, it also lets you, rather than fighting it kicking and screaming :) Also, when you want to just push and run a script versus using one of the 234 other modules, it's there - http://docs.ansible.com/scr…

I don't see the point of managing state at all. If it's stateful you're doing it wrong, and likely deploying it wrong too. And if that's the case I don't see the point of a level of indirection outside the shell script. But that might be just me :) I talk a bit more about this here: https://www.youtube.com/watch?v=zVUPmmUU3yY but it's quite heavily edited and a little out of date.

This comment is disturbing because it assumes there is a wrong way to do things. In fact, the point of managing state is to react to the changing state of different resources (ie. services in a service-oriented architecture, the physical or virtual systems they run on, the networks that connect them, etc.) and to automatically resolve failures through known and tested state-migrations. If you missed that, you're in no position to be calling people wrong. Further, anyone wrapping bash in python and calling it elegant is insane.
Post reply on HN