Exemple #1
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('config_uri')
    parser.add_argument('-v', '--verbose', action='store_true')
    parser.add_argument('--aws-credentials', type=file)
    args = parser.parse_args()

    logging.basicConfig(
        format='%(asctime)s %(levelname)s %(message)s',
        level=(logging.DEBUG if args.verbose else logging.INFO))

    aws_credentials = {}
    if args.aws_credentials:
        aws_credentials = json.loads(args.aws_credentials.read())

    s3 = connect_s3(host='s3.amazonaws.com', **aws_credentials)

    # Fetch config json
    config_filename = os.path.basename(args.config_uri)
    download_to_filename(s3, args.config_uri, config_filename)
    with open(config_filename, 'rb') as f:
        config = json.load(f)

    # Compile environment variables
    env_parameters = {}
    kms = KMSConnection(**aws_credentials)
    env_parameters = process_env(kms, config.get('env', {}))

    # Create working directory
    working_directory = config['working_directory']
    mkpath(working_directory)

    # Download staging files
    for item in config.get('download', []):
        download(s3, **item)

    # Execute command
    env = dict(os.environ)
    env.update(env_parameters)
    debug_command = [
        debug_parameter(kms, parameter) for parameter in config['command']
    ]
    command = [
        process_parameter(kms, parameter) for parameter in config['command']
    ]
    logging.info('executing command: %s', debug_command)
    logging.debug('Popen: command=%s, env=%s', command, env)
    process = subprocess.Popen(command, env=env, cwd=working_directory)
    return process.wait()
Exemple #2
0
def connect_kms(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
    """
    Connect to AWS Key Management Service

    :type aws_access_key_id: string
    :param aws_access_key_id: Your AWS Access Key ID

    :type aws_secret_access_key: string
    :param aws_secret_access_key: Your AWS Secret Access Key

    rtype: :class:`boto.kms.layer1.KMSConnection`
    :return: A connection to the AWS Key Management Service
    """
    from boto.kms.layer1 import KMSConnection
    return KMSConnection(aws_access_key_id=aws_access_key_id,
                         aws_secret_access_key=aws_secret_access_key,
                         **kwargs)