New in version 0.10.3.d.
Salt has support for the Esky application freezing and update tool. This tool allows one to build a complete zipfile out of the salt scripts and all their dependencies - including shared objects / DLLs.
To build frozen applications, you'll need a suitable build environment for each of your platforms. You should probably set up a virtualenv in order to limit the scope of Q/A.
This process does work on Windows. Follow the directions at https://github.com/saltstack/salt-windows-install for details on installing Salt in Windows. Only the 32-bit Python and dependencies have been tested, but they have been tested on 64-bit Windows.
You will need to install esky
and bbfreeze
from PyPI in order to enable
the bdist_esky
command in setup.py
.
Once you have your tools installed and the environment configured, you can then
python setup.py bdist
to get the eggs prepared. After that is done, run
python setup.py bdist_esky
to have Esky traverse the module tree and pack
all the scripts up into a redistributable. There will be an appropriately
versioned salt-VERSION.zip
in dist/
if everything went smoothly.
You will need to add C:\Python27\lib\site-packages\zmq
to your PATH
variable. This helps bbfreeze find the zmq DLL so it can pack it up.
Unpack the zip file in your desired install location. Scripts like
salt-minion
and salt-call
will be in the root of the zip file. The
associated libraries and bootstrapping will be in the directories at the same
level. (Check the Esky documentation
for more information)
To support updating your minions in the wild, put your builds on a web server
that your minions can reach. salt.modules.saltutil.update()
will
trigger an update and (optionally) a restart of the minion service under the
new version.
The process dispatch on Windows is slower than it is on *nix. You may need to add '-t 15' to your salt calls to give them plenty of time to return.
You will need to install the Visual C++ 2008 32-bit redistributable on all
Windows minions. Esky has an option to pack the library into the zipfile,
but OpenSSL does not seem to acknowledge the new location. If you get a
no OPENSSL_Applink
error on the console when trying to start your
frozen minion, you have forgotten to install the redistributable.
The Yum Python module doesn't appear to be available on any of the standard
Python package mirrors. If you need to support RHEL/CentOS systems, you
should build on that platform to support all your Linux nodes. Also remember
to build your virtualenv with --system-site-packages
so that the
yum
module is included.
Automatic (Python) module discovery does not work with the late-loaded scheme that
Salt uses for (Salt) modules. You will need to explicitly add any
misbehaving modules to the freezer_includes
in Salt's setup.py
.
Always check the zipped application to make sure that the necessary modules
were included.