If your Salt Minion version is too far removed from the Salt Master version, you may find yourself with unexplained errors.
This problem can be faced when the OS template you are deploying was packaged years earlier with an older Salt minion while the Salt Master has been kept up to date.
But it can also happen with a relatively recent version Master like 2016.11, if you use the latest 2017.7 Minion which has major changes in the fileclient.
In this article I will show you how to use apt-get to install an earlier version of the Salt Master or Salt Minion.
Continue reading “SaltStack: Installing an older Salt Master or Minion for compatibility”
It may be hard to imagine on the development side, but there are instances where a deployed host is not accessible from the Salt Master in a production environment. This forces a bit of creativity if you have a set of standard formulas you need to apply to the host.
For instance, imagine a host sitting in a highly restricted DMZ network. Even with the advent of Salt SSH for minionless administration, SSH access may only be opened from a jumpbox and not the Salt Master itself. In cases like this, a Masterless Minion is a viable alternative.
Continue reading “SaltStack: Running a masterless minion on Ubuntu”
SaltStack grains are used for relatively static information such as operating system, IP address, and other system properties. They are also useful for targeting minions, for example whether a system is part of dev/test/prod, or a flag on whether it falls under LifeScience or HIPAA regulation.
In this article we will implement a custom grain that determines whether a host is part of development, test, or production environment based on a simplistic naming scheme. This custom grain will be written in Python.
Continue reading “SaltStack: Creating a Custom Grain using Python”
Before running state.apply against a minion, especially in a production environment, a good sanity test can be to list the states that will be executed without actually running those states.
This can be done by adding tests=True to the end of the state command. For example, to check all the states that will be applied to a minion:
salt 'myminion' state.apply tests=True
Or to check which states would be run for the apache formula:
salt 'myminion' state.sls apache tests=True