def do_create(args, client, sl_storage, configuration): if args['-v']: DebugLevel.set_level('verbose') else: DebugLevel.set_level('progress') containername = args['<clustername>'] if args['<clustername>'] in clusters(sl_storage): error('cluster {} already exists'.format(args['<clustername>'])) scoretext = open(args['<score.yaml>'], 'r').read() score = yaml.load(scoretext) score['clustername'] = args['<clustername>'] dirname = os.path.dirname(args['<score.yaml>']) if dirname == "": dirname = "." score['path'] = dirname + "/" # setup environment for scripts in score to run properly. Change to # the score directory and add . to the path os.chdir(score['path']) os.environ['PATH'] = ':'.join([os.environ['PATH'], './']) if 'parameters' in score: parmvalues = score['parameters'] else: parmvalues = {} parameters = args['<key=value>'] for param in parameters: splits = param.split('=', 1) if len(splits) != 2: raise Exception("{} is not a key=value pair".format(param)) parmvalues[splits[0]] = splits[1] score['parameters'] = parmvalues scoretext = yaml.dump(score, indent=4) msg = validate_provision_parms_passed(scoretext, parmvalues) debug(msg) if msg: error(msg) state_container_create(sl_storage, containername) try: # save score for later operations save_state(sl_storage, containername, 'score', scoretext) provision(args['<clustername>'], containername, score, configuration, client, sl_storage) except Exception, e: debug(traceback.format_exc()) resources = get_resources(sl_storage, containername) del resources['score'] if deletable(resources): state_container_clean(sl_storage, containername) error(e.message)
def do_create(args, client, sl_storage, configuration): if args['-v']: DebugLevel.set_level('verbose') else: DebugLevel.set_level('progress') containername = args['<clustername>'] if args['<clustername>'] in clusters(sl_storage): error('cluster {} already exists'.format(args['<clustername>'])) scoretext = open(args['<score.yaml>'], 'r').read() score = yaml.load(scoretext) score['clustername'] = args['<clustername>'] dirname = os.path.dirname(args['<score.yaml>']) if dirname == "": dirname = "." score['path'] = dirname+"/" # setup environment for scripts in score to run properly. Change to # the score directory and add . to the path os.chdir(score['path']) os.environ['PATH'] = ':'.join([os.environ['PATH'], './']) if 'parameters' in score: parmvalues = score['parameters'] else: parmvalues = {} parameters = args['<key=value>'] for param in parameters: splits = param.split('=', 1) if len(splits) != 2: raise Exception("{} is not a key=value pair".format(param)) parmvalues[splits[0]] = splits[1] score['parameters'] = parmvalues scoretext = yaml.dump(score, indent=4) msg = validate_provision_parms_passed(scoretext, parmvalues) debug(msg) if msg: error(msg) state_container_create(sl_storage, containername) try: # save score for later operations save_state(sl_storage, containername, 'score', scoretext) provision(args['<clustername>'], containername, score, configuration, client, sl_storage) except Exception, e: debug(traceback.format_exc()) resources = get_resources(sl_storage, containername) del resources['score'] if deletable(resources): state_container_clean(sl_storage, containername) error(e.message)
clean_dns(resources, client) score = yaml.load(resources['score']) if 'cleanup-scripts' in score and 'scripts' in resources: score['cleanup-scripts'] = normalize(score['cleanup-scripts'], score) for script, args in score['cleanup-scripts'].iteritems(): for id, data in resources['scripts'].iteritems(): if data['name'] == script: print 'executing cleanup script {}'.format(script) rc, out, err = run_script_text(data['text'], args) if rc != 0: print out print err state_container_clean(sl_storage, containername) else: error('cluster does not exist') def main(): args = docopt(__doc__, version='kleiber cluster director 0.1') try: configuration = yaml.load( open(os.environ['HOME'] + '/.kleiber', 'r').read()) except IOError: error('kleiber configuration file {} not found'.format( os.environ['HOME'] + '/.kleiber')) client = SoftLayer.create_client_from_env( username=configuration['username'], api_key=configuration['api_key'])
clean_dns(resources, client) score = yaml.load(resources['score']) if 'cleanup-scripts' in score and 'scripts' in resources: score['cleanup-scripts'] = normalize(score['cleanup-scripts'], score) for script, args in score['cleanup-scripts'].iteritems(): for id, data in resources['scripts'].iteritems(): if data['name'] == script: print 'executing cleanup script {}'.format(script) rc, out, err = run_script_text(data['text'], args) if rc != 0: print out print err state_container_clean(sl_storage, containername) else: error('cluster does not exist') def main(): args = docopt(__doc__, version='kleiber cluster director 0.1') try: configuration = yaml.load( open(os.environ['HOME']+'/.kleiber', 'r').read()) except IOError: error('kleiber configuration file {} not found'.format( os.environ['HOME']+'/.kleiber')) client = SoftLayer.create_client_from_env( username=configuration['username'],