Example #1
0
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)
Example #2
0
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)
Example #3
0
        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'])
Example #4
0
        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'],