Create Saltfile in state directory Specify dependencies Saltfile
Run the following command:
python Saltfile.py| # A yaml format file to pull dependencies into your own salt state | |
| dependencies: | |
| # local formular namespace will be called ntp | |
| ntp: | |
| # git repository | |
| source: git@github.com:saltstack-formulas/ntp-formula.git | |
| # copy sub directory as the root state | |
| source_path: ntp | |
| # version of the git repository | |
| version: 4bc3bb91549db91e8cf9089899cc1139631a92c9 | |
| kubernetes: | |
| source: git@github.com:kubernetes/kubernetes.git | |
| # Copy github.com/kubernetes/kubernetes/cluster/saltbase/salt to -> {my state folder}/kubernetes | |
| source_path: cluster/saltbase/salt | |
| version: 6460b341282759d7cba7fe50b69082c6f0d9e942 |
| # Pulls git into local file system | |
| import yaml | |
| import os | |
| import shutil | |
| import glob | |
| from subprocess import call | |
| working_dir = os.path.dirname(os.path.realpath(__file__)) | |
| custom_grains_dir = os.path.join(working_dir, '_grains') | |
| def git_clone(repo, version, path, source_path): | |
| # Old module clean up | |
| call(["rm", "-rf", path]) | |
| # Update/Clone new modules into the temp directory | |
| temp_folder = "tmp_" + path | |
| call(["git", "clone", "-o", version, repo, temp_folder, "--depth=1"]) | |
| if source_path: | |
| call(["mv", os.path.join(temp_folder, source_path), os.path.join(working_dir, path)]) | |
| for filename in glob.glob(os.path.join(temp_folder, '_grains' , '*.py')): | |
| shutil.copy(filename, custom_grains_dir) | |
| call(["rm", "-rf", temp_folder]) | |
| saltfile_byte = open("Saltfile", "r") | |
| saltfile = yaml.load(saltfile_byte) | |
| for key, value in saltfile['dependencies'].iteritems(): | |
| git_clone(value['source'], value['version'], key, value['source_path']) |