This is an introductory post to Salt.
I have been looking around the internet and I could not find a place with well organized content about Salt that would help people get started with this technology faster and easier. When I need to grasp a new concept, approach or software product, fist I look at what problem the approach/technology solves, the related terminology and how can I get hands on experience. I will follow exactly this approach to present Salt here.
What is Salt?
Fast and scalable systems management software for data center automation, any cloud orchestration, server provisioning and configuration management. Salt also can be thought as an alternative solution to Chef and Puppet, a well-known Configuration Management (CM) tools. According to the official Salt documentation, Salt is:
1. A configuration management system, capable of maintaining remote nodes in defined states (for example, ensuring that specific packages are installed and specific services are running);
2. A distributed remote execution system used to execute commands and query data on remote nodes, either individually or by arbitrary selection criteria.
Terminology and Concept
Master – A central Salt daemon from which commands can be issued to listening minions.
Masterless – A minion which does not require a Salt master to operate. All configuration is local.
Minion – A server running a Salt minion daemon which can listen to commands from a master and perform the requested tasks. Generally, minions are servers which are to be controlled using Salt.
Pillar – A simple key-value store for user-defined data to be made available to a minion. Often used to store and distribute sensitive data to minions.
Grain – A key-value pair which contains a fact about a system, such as its hostname, network addresses. See also:targeting with grains.
State Declaration – A data structure which contains a unique ID and describes one or more states of a system such as ensuring that a package is installed or a user is defined. See also: highstate structure.
Highdata – The data structure in a SLS file the represents a set of state declarations. See also: state layers.
Highstate – The collection of states to be applied to a system. See also: state layers.
Low State – The collection of processed states after requisites and order are evaluated. See also: state layers.
Jinja – A template language which allows variables and simple logic to be dynamically inserted into static text files when they are rendered. See also: Salt's Jinja documentation
.
Top File – Determines which SLS files should be applied to various systems and organizes those groups of systems into environments. See also: top file, list of master top modules.
Further Reading
You can find Salt’s documentation here.