import subprocess ORCHE_URL = 'http://127.0.0.1:8080/' BUILD_SCRIPT = 'build_a_system.sh' DEPLOY_SCRIPT = 'deploy_a_system.sh' DEFINITIONS_DIR='definitions' REF = "cu010-trove/br6/firehose-test-1" whitelist = [ 'clusters/tlsa.morph', 'systems/base-system-x86_64-generic.morph', 'strata/build-essential.morph', 'strata/core.morph', 'strata/foundation.morph', 'strata/bsp-x86_64-generic.morph', ] LOGFILE = '/home/williamholland/orchestration/trigger_log' log_file = open(LOGFILE,'a') def log(msg): ''' write message to log file with timestamp and script name ''' import datetime global log_file dt = str(datetime.datetime.now()).split('.')[0] log_file.write("[%s] Builder Trigger: %s\n" % (dt, msg)) def _exit(exit_val): if exit_val: log('exiting unhappily') exit(exit_val) def files_changed(): ''' return a list of files changed in latest commit to definitions''' import os owd = os.getcwd() os.chdir(DEFINITIONS_DIR) SHAcmd = ['git', 'log', REF, '--format=format:%H', '-2'] SHAproc = subprocess.Popen(SHAcmd, stdout=subprocess.PIPE) SHAout, SHAerr = SHAproc.communicate() SHA = SHAout.split() cmd = ['git', 'diff', '--name-only', SHA[0], SHA[1]] p = subprocess.Popen(cmd, stdout=subprocess.PIPE) out, err = p.communicate() os.chdir(owd) return out.split() def find_systems_affected_by_change(): # TODO for each file changed, separate into chunks, strata, systems and clusters # TODO for each strata get it's system pass def find_clusters_affected_by_change(): changed_systems = find_systems_affected_by_change() # TODO for each system get it's custers def build(system): log('building %s' % system) exit_val = subprocess.call(['sh','%s' % BUILD_SCRIPT, '%s' % system]) log('build complete') return exit_val def trigger_deploy(system): import requests global url url = '%sbuild_complete' % ORCHE_URL if not system: return 0 payload = {'system':system} log('triggering deploy') r = requests.post(url,data=payload) return not r.ok if __name__ == '__main__': _files_changed = files_changed() systems_list = [] for f in _files_changed: if f in whitelist: # TODO fix this being hardcoded system = 'systems/base-system-x86_64-generic.morph' build_exit_val = build(system) if build_exit_val: _exit(build_exit_val) log('about to trigger deploy ...') _exit(trigger_deploy(system)) log('nothing whitelisted changed. No build started.')