Theo Chatzimichos 1f0a34
#!/usr/bin/python3
Theo Chatzimichos 1f0a34
Theo Chatzimichos 1f0a34
# For description and usage, see the argparse options at the end of the file
Theo Chatzimichos 1f0a34
Theo Chatzimichos 1f0a34
import argparse
Theo Chatzimichos 1f0a34
import os
Theo Chatzimichos 1f0a34
import yaml
Theo Chatzimichos 1f0a34
Theo Chatzimichos 1f0a34
Theo Chatzimichos 1f0a34
def clone(DEST, SYMLINK=False):
Theo Chatzimichos 1f0a34
    def use_git_to_clone_or_pull_repo():
Theo Chatzimichos 1f0a34
        # pygit2 is not available for python3 in Leap, use plain git instead
Theo Chatzimichos 1f0a34
Theo Chatzimichos 1f0a34
        import subprocess
Theo Chatzimichos 1f0a34
Theo Chatzimichos 1f0a34
        if not os.path.exists(DEST):
Theo Chatzimichos 1f0a34
            os.mkdir(DEST)
Theo Chatzimichos 1f0a34
        if os.path.isdir(FULL_PATH):
Theo Chatzimichos 1f0a34
            subprocess.Popen(['git', 'pull'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
Theo Chatzimichos 1f0a34
        else:
Theo Chatzimichos 1f0a34
            subprocess.Popen(['git', 'clone', url, FULL_PATH], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
Theo Chatzimichos 1f0a34
Theo Chatzimichos 1f0a34
    def use_pygit2_to_clone_or_pull_repo():
Theo Chatzimichos 1f0a34
        import pygit2
Theo Chatzimichos 1f0a34
Theo Chatzimichos 1f0a34
        if os.path.isdir(FULL_PATH):
Theo Chatzimichos 1f0a34
            repo = pygit2.Repository(FULL_PATH)
Theo Chatzimichos 1f0a34
            repo.checkout('HEAD')
Theo Chatzimichos 1f0a34
        else:
Theo Chatzimichos 1f0a34
            pygit2.clone_repository(url, FULL_PATH, bare=False)
Theo Chatzimichos 1f0a34
Theo Chatzimichos 1f0a34
    for formula, data in FORMULAS.items():
Theo Chatzimichos 1f0a34
        namespace = data.get('namespace', 'saltstack-formulas')
Theo Chatzimichos 1f0a34
        prefix = data.get('prefix', '')
Theo Chatzimichos 1f0a34
        url = 'https://github.com/%s/%s%s-formula' % (namespace, prefix, formula)
Theo Chatzimichos 1f0a34
        FULL_PATH = '%s/%s-formula' % (DEST, formula)
Theo Chatzimichos 1f0a34
        use_git_to_clone_or_pull_repo()
Theo Chatzimichos 1f0a34
        if SYMLINK:
Theo Chatzimichos 1f0a34
            os.symlink('%s/%s' % (FULL_PATH, formula), '/srv/salt/%s' % formula)
Theo Chatzimichos 1f0a34
Theo Chatzimichos 1f0a34
Theo Chatzimichos 1f0a34
with open('FORMULAS.yaml', 'r') as f:
Theo Chatzimichos 1f0a34
    FORMULAS = yaml.load(f)
Theo Chatzimichos 1f0a34
Theo Chatzimichos 1f0a34
parser = argparse.ArgumentParser(description='Loads the formulas from FORMULAS.yaml and optionally clones them in a specified destination. Optionally it can also create a symlink from the cloned path to /srv/salt, useful for the CI worker.')
Theo Chatzimichos 1f0a34
parser.add_argument('-c', '--clone', nargs=1, help='Clones the formulas to a specified destination that is passed as option to this argument.')
Theo Chatzimichos 1f0a34
parser.add_argument('-s', '--symlink', action='store_true', help='Creates symlink from the specified destination to /srv/salt.')
Theo Chatzimichos 1f0a34
args = parser.parse_args()
Theo Chatzimichos 1f0a34
Theo Chatzimichos 1f0a34
if args.clone:
Theo Chatzimichos 1f0a34
    clone(args.clone[0], args.symlink)