@stacksofplates said in What is DevOps?:

@scottalanmiller said in What is DevOps?:

@stacksofplates said in What is DevOps?:

@scottalanmiller said in What is DevOps?:

@stacksofplates said in What is DevOps?:

@scottalanmiller said in What is DevOps?:

@stacksofplates said in What is DevOps?:

@scottalanmiller said in What is DevOps?:

@stacksofplates said in What is DevOps?:

@scottalanmiller said in What is DevOps?:

Two very common SDI tools are Ansible and Salt, but two that are extremely different. Ansible works purely through agents that run on individual servers. Salt uses a central console to control agents. This oversimplifies both, but gives us an idea of the diversity in the way that different systems work.

A common way for smaller shops to work with Ansible is to install agents locally and those agents do nothing more than pull their own configurations from a central Git repository. In this way, in order to manage individual systems, all that needs to be done is for the correct state definition to be stored in the right Git repo. Ansible handles the rest. It looks for updates and applies them when they appear. This is a pure "pull" structure.

Salt works differently. The Salt Master can push commands, almost instantly, to Salt Minions (endpoints.) With salt you can issue traditional commands in real time and see the responses in real time on the master. This makes Salt very powerful for monitoring, in addition to control. State configurations are stored on the Salt Master, rather than on a separate change repository, and when applied can be pushed out instantly to all nodes that are currently online, no need to wait for a polling interval. This is a pure "push" structure.

Ansible is all push through SSH (they have some kind of pull mechanism but I don't think anyone uses it), it doesn't use any agents at all. You can also run commands directly with Ansible. Ad hoc commands are a big help with Ansible, it fixes the weird workarounds you have to use to get sudo to work with remote SSH commands.

Now you just run

ansible host -m shell -a "whatever you need to do" -b -K

One of their big selling points is that you can do pure push, all agent, no server 🙂

It doesn't use any agents at all. It's all Python. There is no "server" like with Puppet (there is a server in the sense that there is one or multiple machines you do everything from), but there is a machine(s) you push from to other machines.

Servers are typically pull, not push.

No. Agents are pull. The server holds the configs and the agent checks in and pulls the config. Ansible is push and specifically states that on their website.

Not necessarily. Salt is an agent but push. The agent doesn't pull. At least not by default.

It's the exception then. Chef and Puppet both pull. I really like the pull system for CM. I use Ansible for orchestration.

Yup. The push is their huge selling point. No other major player does it. And no open ports either. Doesn't need SSH which is huge.

How does the agent know to interact? Just heartbeat every few seconds?

Open connection. They always talk.