neulab/tldr huggingface dataset:
Test Updates Consistency Testing Another testing script has been added. A bug was found in pillar when many minions generated pillar data at the same time. The new consist.py script is the tests directory was created to reproduce bugs where data should always be consistent.
Many Fixes To get a good idea for the number of bugfixes this release offers take a look at the closed tickets for 0.10.2, this is a very substantial update:
https://github.com/saltstack/salt/issues?milestone=24&page=1&state=closed
Master and Minion Stability Fixes As Salt deployments grow new ways to break Salt are discovered. 0.10.2 comes with a number of fixes for the minions and master greatly improving Salt stability.
Salt 0.10.3 Release Notes release 2012-09-30
The latest taste of Salt has come, this release has many fixes and feature additions. Modifications have been made to make ZeroMQ connections more reliable, the beginning of the ACL system is in place, a new command line parsing system has been added, dynamic module distribution has become more environment aware, the new master_finger option and many more!
Major Features ACL System The new ACL system has been introduced. The ACL system allows for system users other than root to execute salt commands. Users can be allowed to execute specific commands in the same way that minions are opened up to the peer system.
The configuration value to open up the ACL system is called client_acl and is configured like so:
client_acl: fred: - test..* - pkg.list_pkgs
Where fred is allowed access to functions in the test module and to the pkg.list_pkgs function.
Master Finger Option The master_finger option has been added to improve the security of minion provisioning. The master_finger option allows for the fingerprint of the master public key to be set in the configuration file to double verify that the master is valid. This option was added in response to a motivation to pre-authenticate the master when provisioning new minions to help prevent man in the middle attacks in some situations.
Salt Key Fingerprint Generation The ability to generate fingerprints of keys used by Salt has been added to salt-key. The new option finger accepts the name of the key to generate and display a fingerprint for.
Will display the fingerprints for the master public and private keys.
Parsing System Pedro Algavio, aka s0undt3ch, has added a substantial update to the command line parsing system that makes the help message output much cleaner and easier to search through. Salt parsers now have --versions-report besides usual --version info which you can provide when reporting any issues found.
Key Generation We have reduced the requirements needed for salt-key to generate minion keys.  You're no longer required to have salt configured and its common directories created just to generate keys. This might prove useful if you're batch creating keys to pre-load on minions.
Startup States A few configuration options have been added which allow for states to be run when the minion daemon starts. This can be a great advantage when deploying with Salt because the minion can apply states right when it first runs. To use startup states set the startup_states configuration option on the minion to highstate.
New Exclude Declaration Some users have asked about adding the ability to ensure that other sls files or ids are excluded from a state run. The exclude statement will delete all of the data loaded from the specified sls file or will delete the specified id:
Max Open Files While we're currently unable to properly handle ZeroMQ's abort signals when the max open files is reached, due to the way that's handled on ZeroMQ's, we have minimized the chances of this happening without at least warning the user.
More State Output Options Some major changes have been made to the state output system. In the past state return data was printed in a very verbose fashion and only states that failed or made changes were printed by default. Now two options can be passed to the master and minion configuration files to change the behavior of the state output. State output can be set to verbose (default) or non-verbose with the state_verbose option:
It is noteworthy that the state_verbose option used to be set to False by default but has been changed to True by default in 0.10.3 due to many requests for the change.
Te next option to be aware of new and called state_output. This option allows for the state output to be set to full (default) or terse.
The full output is the standard state output, but the new terse output will print only one line per state making the output much easier to follow when executing a large state system.
state_output: terse
state.file.append Improvements The salt state file.append() tries not to append existing text. Previously the matching check was being made line by line. While this kind of check might be enough for most cases, if the text being appended was multi-line, the check would not work properly. This issue is now properly handled, the match is done as a whole ignoring any white space addition or removal except inside commas.  For those thinking that, in order to properly match over multiple lines, salt will load the whole file into memory, that's not true. For most cases this is not important but an erroneous order to read a 4GB file, if not properly handled, like salt does, could make salt chew that amount of memory.  Salt has a buffered file reader which will keep in memory a maximum of 256KB and iterates over the file in chunks of 32KB to test for the match, more than enough, if not, explain your usage on a ticket. With this change, also salt.modules.file.contains(), salt.modules.file.contains_regex(), salt.modules.file.contains_glob() and salt.utils.find now do the searching and/or matching using the buffered chunks approach explained above.
Two new keyword arguments were also added, makedirs, and source.  The first, makedirs will create the necessary directories in order to append to the specified file, of course, it only applies if we're trying to append to a non-existing file on a non-existing directory:
/tmp/salttest/file-append-makedirs: file.append: text: foo makedirs: True
The second, source, allows one to append the contents of a file instead of specifying the text.
/tmp/salttest/file-append-source:
file.append: - source: salt://testfile
Security Fix A timing vulnerability was uncovered in the code which decrypts the AES messages sent over the network. This has been fixed and upgrading is strongly recommended.
Salt 0.10.4 Release Notes release 2012-10-23
Salt 0.10.4 is a monumental release for the Salt team, with two new module systems, many additions to allow granular access to Salt, improved platform support and much more.
This release is also exciting because we have been able to shorten the release cycle back to under a month. We are working hard to keep up the aggressive pace and look forward to having releases happen more frequently!
This release also includes a serious security fix and all users are very strongly recommended to upgrade. As usual, upgrade the master first, and then the minion to ensure that the process is smooth.
Major Features External Authentication System The new external authentication system allows for Salt to pass through authentication to any authentication system to determine if a user has permission to execute a Salt command. The Unix PAM system is the first supported system with more to come!
The external authentication system allows for specific users to be granted access to execute specific functions on specific minions. Access is configured in the master configuration file, and uses the new access control system:
external_auth: pam: thatch: - 'web*': - test.* - network.*
The configuration above allows the user thatch to execute functions in the test and network modules on minions that match the web* target.
Access Control System All Salt systems can now be configured to grant access to non-administrative users in a granular way. The old configuration continues to work. Specific functions can be opened up to specific minions from specific users in the case of external auth and client ACLs, and for specific minions in the case of the peer system.
Access controls are configured like this:
client_acl: fred: - web\*: - pkg.list_pkgs - test.* - apache.*
Target by Network A new matcher has been added to the system which allows for minions to be targeted by network. This new matcher can be called with the -S flag on the command line and is available in all places that the matcher system is available. Using it is simple:
$ salt -S '192.168.1.0/24' test.ping $ salt -S '192.168.1.100' test.ping
Nodegroup Nesting Previously a nodegroup was limited by not being able to include another nodegroup, this restraint has been lifted and now nodegroups will be expanded within other nodegroups with the N@ classifier.
Salt Key Delete by Glob The ability to delete minion keys by glob has been added to salt-key.  To delete all minion keys whose minion name starts with 'web':
$ salt-key -d 'web*'
Master Tops System The external_nodes system has been upgraded to allow for modular subsystems to be used to generate the top file data for a highstate run.
The external_nodes option still works but will be deprecated in the future in favor of the new master_tops option.
Example of using master_tops:
Next Level Solaris Support A lot of work has been put into improved Solaris support by Romeo Theriault.  Packaging modules (pkgadd/pkgrm and pkgutil) and states, cron support and user and group management have all been added and improved upon. These additions along with SMF (Service Management Facility) service support and improved Solaris grain detection in 0.10.3 add up to Salt becoming a great tool to manage Solaris servers with.
Security A vulnerability in the security handshake was found and has been repaired, old minions should be able to connect to a new master, so as usual, the master should be updated first and then the minions.
Pillar Updates The pillar communication has been updated to add some extra levels of verification so that the intended minion is the only one allowed to gather the data. Once all minions and the master are updated to salt 0.10.4 please activate pillar 2 by changing the pillar_version in the master config to 2. This will be set to 2 by default in a future release.
Salt 0.10.5 Release Notes release 2012-11-15
Salt 0.10.5 is ready, and comes with some great new features. A few more interfaces have been modularized, like the outputter system. The job cache system has been made more powerful and can now store and retrieve jobs archived in external databases. The returner system has been extended to allow minions to easily retrieve data from a returner interface.
As usual, this is an exciting release, with many noteworthy additions!
Major Features External Job Cache The external job cache is a system which allows for a returner interface to also act as a job cache. This system is intended to allow users to store job information in a central location for longer periods of time and to make the act of looking up information from jobs executed on other minions easier.
Currently the external job cache is supported via the mongo and redis returners:
ext_job_cache: redis redis.host: salt
Once the external job cache is turned on the new ret module can be used on the minions to retrieve return information from the job cache. This can be a great way for minions to respond and react to other minions.
OpenStack Additions OpenStack integration with Salt has been moving forward at a blistering pace.  The new nova, glance, and keystone modules represent the beginning of ongoing OpenStack integration.
The Salt team has had many conversations with core OpenStack developers and is working on linking to OpenStack in powerful new ways.
Wheel System A new API was added to the Salt Master which allows the master to be managed via an external API. This new system allows Salt API to easily hook into the Salt Master and manage configs, modify the state tree, manage the pillar and more. The main motivation for the wheel system is to enable features needed in the upcoming web UI so users can manage the master just as easily as they manage minions.
The wheel system has also been hooked into the external auth system. This allows specific users to have granular access to manage components of the Salt Master.
Render Pipes Jack Kuan has added a substantial new feature. The render pipes system allows Salt to treat the render system like unix pipes. This new system enables sls files to be passed through specific render engines. While the default renderer is still recommended, different engines can now be more easily merged. So to pipe the output of Mako used in YAML use this shebang line:
#!mako|yaml
Salt Key Overhaul The Salt Key system was originally developed as only a CLI interface, but as time went on it was pressed into becoming a clumsy API. This release marks a complete overhaul of Salt Key. Salt Key has been rewritten to function purely from an API and to use the outputter system. The benefit here is that the outputter system works much more cleanly with Salt Key now, and the internals of Salt Key can be used much more cleanly.
Modular Outputters The outputter system is now loaded in a modular way. This means that output systems can be more easily added by dropping a python file down on the master that contains the function output.
Gzip from Fileserver Gzip compression has been added as an option to the cp.get_file and cp.get_dir commands. This will make file transfers more efficient and faster, especially over slower network links.
Unified Module Configuration In past releases of Salt, the minions needed to be configured for certain modules to function. This was difficult because it required pre-configuring the minions. 0.10.5 changes this by making all module configs on minions search the master config file for values.
Now if a single database server is needed, then it can be defined in the master config and all minions will become aware of the configuration value.
Salt Call Enhancements The salt-call command has been updated in a few ways. Now, salt-call can take the --return option to send the data to a returner. Also, salt-call now reports executions in the minion proc system, this allows the master to be aware of the operation salt-call is running.
Death to pub_refresh and sub_timeout The old configuration values pub_refresh and sub_timeout have been removed.  These options were in place to alleviate problems found in earlier versions of ZeroMQ which have since been fixed. The continued use of these options has proven to cause problems with message passing and have been completely removed.
Git Revision Versions When running Salt directly from git (for testing or development, of course) it has been difficult to know exactly what code is being executed. The new versioning system will detect the git revision when building and how many commits have been made since the last release. A release from git will look like this:
0.10.4-736-gec74d69
Svn Module Addition Anthony Cornehl (twinshadow) contributed a module that adds Subversion support to Salt.  This great addition helps round out Salt's VCS support.
Noteworthy Changes Arch Linux Defaults to Systemd Arch Linux recently changed to use systemd by default and discontinued support for init scripts. Salt has followed suit and defaults to systemd now for managing services in Arch.
Salt, Salt Cloud and Openstack With the releases of Salt 0.10.5 and Salt Cloud 0.8.2, OpenStack becomes the first (non-OS) piece of software to include support both on the user level (with Salt Cloud) and the admin level (with Salt). We are excited to continue to extend support of other platforms at this level.
Salt 0.11.0 Release Notes release 2012-12-14
Salt 0.11.0 is here, with some highly sought after and exciting features. These features include the new overstate system, the reactor system, a new state run scope component called __context__, the beginning of the search system (still needs a great deal of work), multiple package states, the MySQL returner and a better system to arbitrarily reference outputters.
It is also noteworthy that we are changing how we mark release numbers. For the life of the project we have been pushing every release with features and fixes as point releases. We will now be releasing point releases for only bug fixes on a more regular basis and major feature releases on a slightly less regular basis. This means that the next release will be a bugfix only release with a version number of 0.11.1. The next feature release will be named 0.12.0 and will mark the end of life for the 0.11 series.
Major Features OverState The overstate system is a simple way to manage rolling state executions across many minions. The overstate allows for a state to depend on the successful completion of another state.
Reactor System The new reactor system allows for a reactive logic engine to be created which can respond to events within a salted environment. The reactor system uses sls files to match events fired on the master with actions, enabling Salt to react to problems in an infrastructure.
Your load-balanced group of webservers is under extra load? Spin up a new VM and add it to the group. Your fileserver is filling up? Send a notification to your sysadmin on call. The possibilities are endless!
Module Context A new component has been added to the module loader system. The module context is a data structure that can hold objects for a given scope within the module.
This allows for components that are initialized to be stored in a persistent context which can greatly speed up ongoing connections. Right now the best example can be found in the cp execution module.
Multiple Package Management A long desired feature has been added to package management. By definition Salt States have always installed packages one at a time. On most platforms this is not the fastest way to install packages. Erik Johnson, aka terminalmage, has modified the package modules for many providers and added new capabilities to install groups of packages. These package groups can be defined as a list of packages available in repository servers:
python_pkgs: pkg.installed: - pkgs: - python-mako - whoosh - python-git
or specify based on the location of specific packages:
python_pkgs: pkg.installed: - sources: - python-mako: http://some-rpms.org/python-mako.rpm - whoosh: salt://whoosh/whoosh.rpm - python-git: ftp://companyserver.net/python-git.rpm
Search System The bones to the search system have been added. This is a very basic interface that allows for search backends to be added as search modules. The first supported search module is the whoosh search backend. Right now only the basic paths for the search system are in place, making this very experimental.  Further development will involve improving the search routines and index routines for whoosh and other search backends.
The search system has been made to allow for searching through all of the state and pillar files, configuration files and all return data from minion executions.
Notable Changes All previous versions of Salt have shared many directories between the master and minion. The default locations for keys, cached data and sockets has been shared by master and minion. This has created serious problems with running a master and a minion on the same systems. 0.11.0 changes the defaults to be separate directories. Salt will also attempt to migrate all of the old key data into the correct new directories, but if it is not successful it may need to be done manually. If your keys exhibit issues after updating make sure that they have been moved from /etc/salt/pki to /etc/salt/pki/{master,minion}.
The old setup will look like this:
/etc/salt/pki |-- master.pem |-- master.pub |-- minions |   `-- ragnarok.saltstack.net |-- minions_pre |-- minion.pem |-- minion.pub |-- minion_master.pub |-- minions_pre `-- minions_rejected
With the accepted minion keys in /etc/salt/pki/minions, the new setup places the accepted minion keys in /etc/salt/pki/master/minions.
/etc/salt/pki |-- master |   |-- master.pem |   |-- master.pub |   |-- minions |   |   `-- ragnarok.saltstack.net |   |-- minions_pre |   `-- minions_rejected |-- minion |   |-- minion.pem |   |-- minion.pub |   `-- minion_master.pub
Salt 0.11.1 Release Notes release 2012-12-19
Salt 0.12.0 Release Notes release 2013-01-15
Another feature release of Salt is here! Some exciting additions are included with more ways to make salt modular and even easier management of the salt file server.
Major Features Modular Fileserver Backend The new modular fileserver backend allows for any external system to be used as a salt file server. The main benefit here is that it is now possible to tell the master to directly use a git remote location, or many git remote locations, automatically mapping git branches and tags to salt environments.
Windows is First Class! A new Salt Windows installer is now available! Much work has been put in to improve Windows support. With this much easier method of getting Salt on your Windows machines, we hope even more development and progress will occur. Please file bug reports on the Salt GitHub repo issue tracker so we can continue improving.
One thing that is missing on Windows that Salt uses extensively is a software package manager and a software package repository. The Salt pkg state allows sys admins to install software across their infrastructure and across operating systems. Software on Windows can now be managed in the same way. The SaltStack team built a package manager that interfaces with the standard Salt pkg module to allow for installing and removing software on Windows. In addition, a software package repository has been built on top of the Salt fileserver. A small YAML file provides the information necessary for the package manager to install and remove software.
An interesting feature of the new Salt Windows software package repository is that one or more remote git repositories can supplement the master's local repository. The repository can point to software on the master's fileserver or on an HTTP, HTTPS, or ftp server.
New Default Outputter Salt displays data to the terminal via the outputter system. For a long time the default outputter for Salt has been the python pretty print library.  While this has been a generally reasonable outputter, it did have many failings.  The new default outputter is called "nested", it recursively scans return data structures and prints them out cleanly.
If the result of the new nested outputter is not desired any other outputter can be used via the --out option, or the output option can be set in the master and minion configs to change the default outputter.
Internal Scheduler The internal Salt scheduler is a new capability which allows for functions to be executed at given intervals on the minion, and for runners to be executed at given intervals on the master. The scheduler allows for sequences such as executing state runs (locally on the minion or remotely via an overstate) or continually gathering system data to be run at given intervals.
The configuration is simple, add the schedule option to the master or minion config and specify jobs to run, this in the master config will execute the state.over runner every 60 minutes:
schedule: overstate: function: state.over minutes: 60
This example for the minion configuration will execute a highstate every 30 minutes:
schedule: highstate: function: state.highstate minutes: 30
Optional DSL for SLS Formulas Jack Kuan, our renderer expert, has created something that is astonishing.  Salt, now comes with an optional Python based DSL, this is a very powerful interface that makes writing SLS files in pure python easier than it was with the raw py renderer. As usual this can be used with the renderer shebang line, so a single sls can be written with the DSL if pure python power is needed while keeping other sls files simple with YAML.
Set Grains Remotely A new execution function and state module have been added that allows for grains to be set on the minion. Now grains can be set via a remote execution or via states. Use the grains.present state or the grains.setval execution functions.
Gentoo Additions Major additions to Gentoo specific components have been made. The encompasses executions modules and states ranging from supporting the make.conf file to tools like layman.
Salt 0.12.1 Release Notes release 2013-01-21
Salt 0.13.0 Release Notes release 2013-02-12
The lucky number 13 has turned the corner! From CLI notifications when quitting a salt command, to substantial improvements on Windows, Salt 0.13.0 has arrived!
Major Features Improved file.recurse Performance The file.recurse system has been deployed and used in a vast array of situations. Fixes to the file state and module have led towards opening up new ways of running file.recurse to make it faster. Now the file.recurse state will download fewer files and will run substantially faster.
Windows Improvements Minion stability on Windows has improved. Many file operations, including file.recurse, have been fixed and improved. The network module works better, to include network.interfaces. Both 32bit and 64bit installers are now available.
Nodegroup Targeting in Peer System In the past, nodegroups were not available for targeting via the peer system.  This has been fixed, allowing the new nodegroup expr_form argument for the publish.publish function: salt-call publish.publish group1 test.ping expr_form=nodegroup
Blacklist Additions Additions allowing more granular blacklisting are available in 0.13.0. The ability to blacklist users and functions in client_acl have been added, as well as the ability to exclude state formulas from the command line.
Command Line Pillar Embedding Pillar data can now be embedded on the command line when calling state.sls and state.highstate. This allows for on the fly changes or settings to pillar and makes parameterizing state formulas even easier. This is done via the keyword argument:
salt '*' state.highstate pillar='{"cheese": "spam"}'
The above example will extend the existing pillar to hold the cheese key with a value of spam. If the cheese key is already specified in the minion's pillar then it will be overwritten.
CLI Notifications In the past hitting ctrl-C and quitting from the salt command would just drop to a shell prompt, this caused confusion with users who expected the remote executions to also quit. Now a message is displayed showing what command can be used to track the execution and what the job id is for the execution.
Version Specification in Multiple-Package States Versions can now be specified within multiple-package pkg.installed states. An example can be found below:
Noteworthy Changes The configuration subsystem in Salt has been overhauled to make the opts dict used by Salt applications more portable, the problem is that this is an incompatible change with salt-cloud, and salt-cloud will need to be updated to the latest git to work with Salt 0.13.0. Salt Cloud 0.8.5 will also require Salt 0.13.0 or later to function.
The SaltStack team is sorry for the inconvenience here, we work hard to make sure these sorts of things do not happen, but sometimes hard changes get in.
Salt 0.13.1 Release Notes release 2013-02-15
Salt 0.13.2 Release Notes release 2013-03-13
Salt 0.13.3 Release Notes release 2013-03-18
Salt 0.14.0 Release Notes release 2013-03-23
Salt 0.14.0 is here! This release was held up primarily by PyCon, Scale, and illness, but has arrived! 0.14.0 comes with many new features and is breaking ground for Salt in the area of cloud management with the introduction of Salt providing basic cloud controller functionality.
Major Features Salt - As a Cloud Controller This is the first primitive inroad to using Salt as a cloud controller is available in 0.14.0. Be advised that this is alpha, only tested in a few very small environments.
The cloud controller is built using kvm and libvirt for the hypervisors. Hypervisors are autodetected as minions and only need to have libvirt running and kvm installed to function. The features of the Salt cloud controller are as follows:
• Basic vm discovery and reporting
• Creation of new virtual machines
• Seeding virtual machines with Salt via qemu-nbd or libguestfs
• Live migration (shared and non shared storage)
• Delete existing VMs
It is noteworthy that this feature is still Alpha, meaning that all rights are reserved to change the interface if needs be in future releases!
Libvirt State One of the problems with libvirt is management of certificates needed for live migration and cross communication between hypervisors. The new libvirt state makes the Salt Master hold a CA and manage the signing and distribution of keys onto hypervisors, just add a call to the libvirt state in the sls formulas used to set up a hypervisor:
libvirt_keys: libvirt.keys
New get Functions An easier way to manage data has been introduced. The pillar, grains, and config execution modules have been extended with the new get function. This function works much in the same way as the get method in a python dict, but with an enhancement, nested dict components can be extracted using a : delimiter.
foo: bar: baz: quo
Now with the new get function the data can be safely gathered and a default can be set allowing the template to fall back if the value is not available:
This makes handling nested structures much easier, and defaults can be cleanly set. This new function is being used extensively in the new formulae repository of salt sls formulas.
Salt 0.14.1 Release Notes release 2013-04-13
Salt 0.15.0 Release Notes release 2013-05-03
The many new features of Salt 0.15.0 have arrived! Salt 0.15.0 comes with many smaller features and a few larger ones.
These features range from better debugging tools to the new Salt Mine system.
Major Features The Salt Mine First there was the peer system, allowing for commands to be executed from a minion to other minions to gather data live. Then there was the external job cache for storing and accessing long term data. Now the middle ground is being filled in with the Salt Mine. The Salt Mine is a system used to execute functions on a regular basis on minions and then store only the most recent data from the functions on the master, then the data is looked up via targets.
The mine caches data that is public to all minions, so when a minion posts data to the mine all other minions can see it.
IPV6 Support 0.13.0 saw the addition of initial IPV6 support but errors were encountered and it needed to be stripped out. This time the code covers more cases and must be explicitly enabled. But the support is much more extensive than before.
Copy Files From Minions to the Master Minions have long been able to copy files down from the master file server, but until now files could not be easily copied from the minion up to the master.
A new function called cp.push can push files from the minions up to the master server. The uploaded files are then cached on the master in the master cachedir for each minion.
Better Template Debugging Template errors have long been a burden when writing states and pillar. 0.15.0 will now send the compiled template data to the debug log, this makes tracking down the intermittent stage templates much easier. So running state.sls or state.highstate with -l debug will now print out the rendered templates in the debug information.
State Event Firing The state system is now more closely tied to the master's event bus. Now when a state fails the failure will be fired on the master event bus so that the reactor can respond to it.
Major Syndic Updates The Syndic system has been basically re-written. Now it runs in a completely asynchronous way and functions primarily as an event broker. This means that the events fired on the syndic are now pushed up to the higher level master instead of the old method used which waited for the client libraries to return.
This makes the syndic much more accurate and powerful, it also means that all events fired on the syndic master make it up the pipe as well making a reactor on the higher level master able to react to minions further downstream.
Peer System Updates The Peer System has been updated to run using the client libraries instead of firing directly over the publish bus. This makes the peer system much more consistent and reliable.
Minion Key Revocation In the past when a minion was decommissioned the key needed to be manually deleted on the master, but now a function on the minion can be used to revoke the calling minion's key:
$ salt-call saltutil.revoke_auth
Function Return Codes Functions can now be assigned numeric return codes to determine if the function executed successfully. While not all functions have been given return codes, many have and it is an ongoing effort to fill out all functions that might return a non-zero return code.
Functions in Overstate The overstate system was originally created to just manage the execution of states, but with the addition of return codes to functions, requisite logic can now be used with respect to the overstate. This means that an overstate stage can now run single functions instead of just state executions.
Pillar Error Reporting Previously if errors surfaced in pillar, then the pillar would consist of only an empty dict. Now all data that was successfully rendered stays in pillar and the render error is also made available. If errors are found in the pillar, states will refuse to run.
Using Cached State Data Sometimes states are executed purely to maintain a specific state rather than to update states with new configs. This is grounds for the new cached state system. By adding cache=True to a state call the state will not be generated fresh from the master but the last state data to be generated will be used.  If no previous state data is available then fresh data will be generated.
Monitoring States The new monitoring states system has been started. This is very young but allows for states to be used to configure monitoring routines. So far only one monitoring state is available, the disk.status state. As more capabilities are added to Salt UI the monitoring capabilities of Salt will continue to be expanded.
Salt 0.15.1 Release Notes release 2013-05-08
The 0.15.1 release has been posted, this release includes fixes to a number of bugs in 0.15.1 and a three security patches.
Security Updates A number of security issues have been resolved via the 0.15.1 release.
Path Injection in Minion IDs Salt masters did not properly validate the id of a connecting minion. This can lead to an attacker uploading files to the master in arbitrary locations.  In particular this can be used to bypass the manual validation of new unknown minions. Exploiting this vulnerability does not require authentication.
This issue affects all known versions of Salt.
This issue was reported by Ronald Volgers.
Patch The issue is fixed in Salt 0.15.1. Updated packages are available in the usual locations.
Specific commits:
https://github.com/saltstack/salt/commit/5427b9438e452a5a8910d9128c6aafb45d8fd5d3
https://github.com/saltstack/salt/commit/7560908ee62351769c3cd43b03d74c1ca772cc52
https://github.com/saltstack/salt/commit/e200b8a7ff53780124e08d2bdefde7587e52bfca
RSA Key Generation Fault RSA key generation was done incorrectly, leading to very insecure keys. It is recommended to regenerate all RSA keys.
This issue can be used to impersonate Salt masters or minions, or decrypt any transferred data.
This issue can only be exploited by attackers who are able to observe or modify traffic between Salt minions and the legitimate Salt master.
A tool was included in 0.15.1 to assist in mass key regeneration, the manage.regen_keys runner.
https://github.com/saltstack/salt/commit/5dd304276ba5745ec21fc1e6686a0b28da29e6fc
Command Injection Via ext_pillar Arbitrary shell commands could be executed on the master by an authenticated minion through options passed when requesting a pillar.
Ext pillar options have been restricted to only allow safe external pillars to be called when prompted by the minion.
This issue affects Salt versions from 0.14.0 to 0.15.0.
https://github.com/saltstack/salt/commit/43d8c16bd26159d827d1a945c83ac28159ec5865
Salt 0.15.2 Release Notes release 2013-05-29
Salt 0.15.3 Release Notes release 2013-06-01
Salt 0.16.0 Release Notes release 2013-07-01
The 0.16.0 release is an exciting one, with new features in master redundancy, and a new, powerful requisite.
Major Features Multi-Master This new capability allows for a minion to be actively connected to multiple salt masters at the same time. This allows for multiple masters to send out commands to minions and for minions to automatically reconnect to masters that have gone down. A tutorial is available to help get started here:
Multi Master Tutorial
Prereq, the New Requisite The new prereq requisite is very powerful! It allows for states to execute based on a state that is expected to make changes in the future. This allows for a change on the system to be preempted by another execution. A good example is needing to shut down a service before modifying files associated with it, allowing, for instance, a webserver to be shut down allowing a load balancer to stop sending requests while server side code is updated. In this case, the prereq will only run if changes are expected to happen in the prerequired state, and the prerequired state will always run after the prereq state and only if the prereq state succeeds.
Peer System Improvements The peer system has been revamped to make it more reliable, faster, and like the rest of Salt, async. The peer calls when an updated minion and master are used together will be much faster!
Relative Includes The ability to include an sls relative to the defined sls has been added, the new syntax id documented here:
More State Output Options The state_output option in the past only supported full and terse, 0.16.0 add the mixed and changes modes further refining how states are sent to users' eyes.
Improved Windows Support Support for Salt on Windows continues to improve. Software management on Windows has become more seamless with Linux/UNIX/BSD software management. Installed software is now recognized by the short names defined in the repository SLS. This makes it possible to run salt '*' pkg.version firefox and get back results from Windows and non-Windows minions alike.
When templating files on Windows, Salt will now correctly use Windows appropriate line endings. This makes it much easier to edit and consume files on Windows.
When using the cmd state the shell option now allows for specifying Windows Powershell as an alternate shell to execute cmd.run and cmd.script.  This opens up Salt to all the power of Windows Powershell and its advanced Windows management capabilities.
Several fixes and optimizations were added for the Windows networking modules, especially when working with IPv6.
A system module was added that makes it easy to restart and shutdown Windows minions.
The Salt Minion will now look for its config file in c:\salt\conf by default. This means that it's no longer necessary to specify the -c option to specify the location of the config file when starting the Salt Minion on Windows in a terminal.
Multiple Targets for pkg.removed, pkg.purged States Both pkg.removed and pkg.purged now support the pkgs argument, which allow for multiple packages to be targeted in a single state. This, as in pkg.installed, helps speed up these states by reducing the number of times that the package management tools (apt, yum, etc.) need to be run.
Random Times in Cron States The temporal parameters in cron.present states (minute, hour, etc.) can now be randomized by using random instead of a specific value. For example, by using the random keyword in the minute parameter of a cron state, the same cron job can be pushed to hundreds or thousands of hosts, and they would each use a randomly-generated minute. This can be helpful when the cron job accesses a network resource, and it is not desirable for all hosts to run the job concurrently.
Confirmation Prompt on Key Acceptance When accepting new keys with salt-key -a minion-id or salt-key -A, there is now a prompt that will show the affected keys and ask for confirmation before proceeding. This prompt can be bypassed using the -y or --yes command line argument, as with other salt-key commands.
Support for Setting Password Hashes on BSD Minions FreeBSD, NetBSD, and OpenBSD all now support setting passwords in user.present states.
Salt 0.16.1 Release Notes release 2013-07-29
Salt 0.16.2 Release Notes release 2013-08-01
Version 0.16.2 is a bugfix release for 0.16.0, and contains a number of fixes.
Windows • Only allow Administrator's group and SYSTEM user access to C:\salt. This eliminates a race condition where a non-admin user could modify a template or managed file before it is executed by the minion (which is running as an elevated user), thus avoiding a potential escalation of privileges. (issue #6361)
Grains • Fixed detection of virtual grain on OpenVZ hardware nodes
• Gracefully handle lsb_release data when it is enclosed in quotes
• LSB grains are now prefixed with lsb_distrib_ instead of simply lsb_. The old naming is not preserved, so SLS may be affected.
• Improved grains detection on MacOS
Pillar • Don't try to load git_pillar if not enabled in master config (issue #6052)
• Functions pillar.item and pillar.items added for parity with grains.item/grains.items. The old function pillar.data is preserved for backwards compatibility.
• Fixed minion traceback when Pillar SLS is malformed (issue #5910)
Peer Publishing • More gracefully handle improperly quoted publish commands (issue #5958)
• Fixed traceback when timeout specified via the CLI fo publish.publish, publish.full_data (issue #5959)
• Fixed unintended change in output of publish.publish (issue #5928)
Minion • Fixed salt-key usage in minionswarm script
• Quieted warning about SALT_MINION_CONFIG environment variable on minion startup and for CLI commands run via salt-call (issue #5956)
• Added minion config parameter random_reauth_delay to stagger re-auth attempts when the minion is waiting for the master to approve its public key. This helps prevent SYN flooding in larger environments.
User/Group Management • Implement previously-ignored unique option for user.present states in FreeBSD
• Report in state output when a group.present state attempts to use a gid in use by another group
• Fixed regression that prevents a user.present state to set the password hash to the system default (i.e. an unset password)
• Fixed multiple group.present states with the same group (issue #6439)
File Management • Fixed file.mkdir setting incorrect permissions (issue #6033)
• Fixed cleanup of source files for templates when /tmp is in file_roots (issue #6118)
• Fixed caching of zero-byte files when a non-empty file was previously cached at the same path
• Added HTTP authentication support to the cp module (issue #5641)
• Diffs are now suppressed when binary files are changed
Package/Repository Management • Fixed traceback when there is only one target for pkg.latest states
• Fixed regression in detection of virtual packages (apt)
• Limit number of pkg database refreshes to once per state.sls/state.highstate
• YUM: Allow 32-bit packages with arches other than i686 to be managed on 64-bit systems (issue #6299)
• Fixed incorrect reporting in pkgrepo.managed states (issue #5517)
• Fixed 32-bit binary package installs on 64-bit RHEL-based distros, and added proper support for 32-bit packages on 64-bit Debian-based distros (issue #6303)
• Fixed issue where requisites were inadvertently being put into YUM repo files (issue #6471)
Service Management • Fixed inaccurate reporting of results in service.running states when the service fails to start (issue #5894)
• Fixed handling of custom initscripts in RHEL-based distros so that they are immediately available, negating the need for a second state run to manage the service that the initscript controls
Networking • Function network.hwaddr renamed to network.hw_addr to match network.ip_addrs and network.ip_addrs6. All three functions also now work without the underscore in the name, as well.
• Fixed traceback in bridge.show when interface is not present (issue #6326)
SSH • Fixed incorrect result reporting for some ssh_known_hosts.present states
• Fixed inaccurate reporting when ssh_auth.present states are run with test=True, when rsa/dss is used for the enc param instead of ssh-rsa/ssh-dss (issue #5374)
pip • Properly handle -f lines in pip freeze output
• Fixed regression in pip.installed states with specifying a requirements file (issue #6003)
• Fixed use of editable argument in pip.installed states (issue #6025)
• Deprecated runas parameter in execution function calls, in favor of user
MySQL • Allow specification of MySQL connection arguments via the CLI, overriding/bypassing minion config params
• Allow mysql_user.present states to set a passwordless login (issue #5550)
• Fixed endless loop when mysql.processlist is run (issue #6297)
PostgreSQL • Fixed traceback in postgres.user_list (issue #6352)
Miscellaneous • Don't allow npm states to be used if npm module is not available
• Fixed alternatives.install states for which the target is a symlink (‐ issue #6162)
• Fixed traceback in sysbench module (issue #6175)
• Fixed traceback in job cache
• Fixed tempfile cleanup for windows
• Fixed issue where SLS files using the pydsl renderer were not being run
• Fixed issue where returners were being passed incorrect information (‐ issue #5518)
• Fixed traceback when numeric args are passed to cmd.script states
• Fixed bug causing cp.get_dir to return more directories than expected (issue #6048)
• Fixed traceback when supervisord.running states are run with test=True (issue #6053)
• Fixed tracebacks when Salt encounters problems running rbenv (issue #5888)
• Only make the monit module available if monit binary is present (issue #5871)
• Fixed incorrect behavior of img.mount_image
• Fixed traceback in tomcat.deploy_war in Windows
• Don't re-write /etc/fstab if mount fails
• Fixed tracebacks when Salt encounters problems running gem (issue #5886)
• Fixed incorrect behavior of selinux.boolean states (issue #5912)
• RabbitMQ: Quote passwords to avoid symbols being interpolated by the shell (issue #6338)
• Fixed tracebacks in extfs.mkfs and extfs.tune (issue #6462)
• Fixed a regression with the module.run state where the m_name and m_fun arguments were being ignored (issue #6464)
Salt 0.16.3 Release Notes release 2013-08-09
Version 0.16.3 is another bugfix release for 0.16.0. The changes include:
• Various documentation fixes
• Fix proc directory regression (issue #6502)
• Properly detect Linaro Linux (issue #6496)
• Fix regressions in mount.mounted (issue #6522, issue #6545)
• Skip malformed state requisites (issue #6521)
• Fix regression in gitfs from bad import
• Fix for watching prereq states (including recursive requisite error) (‐ issue #6057)
• Fix mod_watch not overriding prereq (issue #6520)
• Don't allow functions which compile states to be called within states (issue #5623)
• Return error for malformed top.sls (issue #6544)
• Fix traceback in mysql.query
• Fix regression in binary package installation for 64-bit packages on Debian-based Linux distros (issue #6563)
• Fix traceback caused by running cp.push without having set file_recv in the master config file
• Fix scheduler configuration in pillar (issue #6201)
Salt 0.16.4 Release Notes release 2013-09-07
Version 0.16.4 is another bugfix release for 0.16.0, likely to be the last before 0.17.0 is released.  The changes include:
• Multiple documentation improvements/additions
• Added the osfinger and osarch grains
• Properly handle 32-bit packages for debian32 on x86_64 (issue #6607)
• Fix regression in yum package installation in CentOS 5 (issue #6677)
• Fix bug in hg.latest state that would erroneously delete directories (‐ issue #6661)
• Fix bug related to pid not existing for ps.top (issue #6679)
• Fix regression in MySQL returner (issue #6695)
• Fix IP addresses grains (ipv4 and ipv6) to include all addresses (issue #6656)
• Fix regression preventing authenticated FTP (issue #6733)
• Fix setting password for windows users (issue #6824)
• Fix file.contains on values YAML parses as non-string (issue #6817)
• Fix file.get_gid, file.get_uid, and file.chown for broken symlinks (‐ issue #6826)
• Fix comment for service reloads in service state (issue #6851)
Salt 0.17.0 Release Notes release 2013-09-26