Review: Puppet vs. Chef vs. Ansible vs. Salt
The leading configuration management and orchestration tools take different paths to server automationFollow @pvenezia
A Web UI is available for Ansible in the form of AnsibleWorks AWX, but AWX doesn't tie directly into the CLI. This means that configuration elements present in the CLI will not appear in the Web UI unless a synchronization pass is run. You can use that included synchronization tool to keep them in line, but it will need to be run on a scheduled basis. The Web UI itself is functional, but is not as complete as the CLI, so you will find yourself working between the two in general use, or just using the CLI.
Salt is similar to Ansible in that it's a CLI-based tool that utilizes a push method of client communication. It can be installed through Git or through the package management system on masters and clients. Clients will make a request of a master server, which when accepted on the master allows that minion to be controlled.
Salt can communicate with clients through general SSH, but the scalability is greatly enhanced through the use of client agents called minions. Also, Salt includes an asynchronous file server to speed up file serving to minions, which is all part of Salt's focus on high scalability.
As with Ansible, you can issue commands to minions directly from the CLI, such as to start services or install packages, or you can use YAML configuration files, called "states," to handle more complex tasks. There are also "pillars," which are centrally located sets of data that states can access while running.
You can request configuration information -- such as kernel version or network interface details -- from minions directly from the CLI. Minions can be delineated through the use of inventory elements, called "grains," which makes it easy to issue commands to a particular type of server without relying on configured groups. For instance, in a single CLI direction, you could target every minion that is running a particular kernel version.
Like Puppet, Chef, and Ansible, Salt offers a large number of modules to address specific software, operating systems, and cloud services. Custom modules can be written in Python or PyDSL. Salt does offer Windows management as well as Unix, but is more at home with Unix and Linux systems.
Salt's Web UI, Halite, is very new and not as complete as the Web UIs for the other systems. It offers views of event logs and minion status, and has the ability to run commands on minions, but little else. This tool is under active development and promises to improve significantly, but for the time being it's bare-bones and buggy.
Salt's biggest advantage is its scalability and resiliency. You can have multiple levels of masters, resulting in a tiered arrangement that both distributes load and increases redundancy. Upstream masters can control downstream masters and their minions. Another benefit is the peering system that allows minions to ask questions of masters, which can then derive answers from other servers to complete the picture. This can be handy if data needs to be looked up in a real-time database in order to complete a configuration of a minion.