If you want to help develop Salt there is a great need and your patches are welcome!
To assist in Salt development, you can help in a number of ways.
This is the preferred method for contributions, simply create a Github fork, commit your changes to the fork, and then open up a pull request.
If you have a patch for Salt, please format it via git format-patch and send it to the Salt users mailing list. This allows the patch to give you the contributor the credit for your patch, and gives the Salt community an archive of the patch and a place for discussion.
The goal here is to make contributions clear, make sure there is a trail for where the code has come from, but most importantly, to give credit where credit is due!
The Open Comparison Contributing Docs explains the workflow for forking, cloning, branching, committing, and sending a pull request for the git repository.
git pull upstream develop is a shorter way to update your local repository to the latest version.
You need sphinx-build to build the docs. In Debian/Ubuntu this is provided in the python-sphinx package.
Then:
cd doc; make html
Clone the repository using:
git clone https://github.com/saltstack/salt
Create a new virtualenv:
virtualenv /path/to/your/virtualenv
Note
site packages
If you wish to use installed packages rather than have pip download and compile new ones into this environment, add "--system-site-packages".
Activate the virtualenv:
source /path/to/your/virtualenv/bin/activate
Install Salt (and dependencies) into the virtualenv:
pip install -e ./salt # the path to the salt git clone from above
Note
Installing M2Crypto
You may need swig and libssl-dev to build M2Crypto. If you encounter the error command 'swig' failed with exit status 1 while installing M2Crypto, try installing it with the following command:
env SWIG_FEATURES="-cpperraswarn -includeall -D__`uname -m`__ -I/usr/include/openssl" pip install M2Crypto
Debian and Ubuntu systems have modified openssl libraries and mandate that a patched version of M2Crypto be installed. This means that M2Crypto needs to be installed via apt:
apt-get install python-m2crypto
During development it is easiest to be able to run the Salt master and minion that are installed in the virtualenv you created above, and also to have all the configuration, log, and cache files contained in the virtualenv as well.
Copy the master and minion config files into your virtualenv:
mkdir -p /path/to/your/virtualenv/etc/salt
cp ./salt/conf/master.template /path/to/your/virtualenv/etc/salt/master
cp ./salt/conf/minion.template /path/to/your/virtualenv/etc/salt/minion
Edit the master config file:
Edit the minion config file:
Note
Using salt-call with a Standalone Minion
If you plan to run salt-call with this self-contained development environment in a masterless setup, you should invoke salt-call with -c /path/to/your/virtualenv/etc/salt so that salt can find the minion config file. Without the -c option, Salt finds its config files in /etc/salt.
Start the master and minion, accept the minon's key, and verify your local Salt installation is working:
salt-master -c ./etc/salt -d
salt-minion -c ./etc/salt -d
salt-key -c ./etc/salt -L
salt-key -c ./etc/salt -A
salt -c ./etc/salt '*' test.ping
Check your file descriptor limit with:
ulimit -n
If it is less than 2047, you should increase it with:
ulimit -n 2047
(or "limit descriptors 2047" for c-shell)
You will need mock to run the tests:
pip install mock
If you are on Python < 2.7 then you will also need unittest2:
pip install unittest2
Finally you use setup.py to run the tests with the following command:
./setup.py test
For greater control while running the tests, please try:
./tests/runtests.py -h