|
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)
|