def main(): # Check Python version. version = '%d.%d' % (sys.version_info.major, sys.version_info.minor) if version != '2.7': print( 'brkt-cli requires Python 2.7. Version', version, 'is not supported.', file=sys.stderr ) return 1 parser = argparse.ArgumentParser() parser.add_argument( '-v', '--verbose', dest='verbose', action='store_true', help='Print status information to the console' ) parser.add_argument( '--version', action='version', version='brkt-cli version %s' % VERSION ) subparsers = parser.add_subparsers() encrypt_ami_parser = subparsers.add_parser('encrypt-ami') encrypt_ami_args.setup_encrypt_ami_args(encrypt_ami_parser) update_encrypted_ami_parser = \ subparsers.add_parser('update-encrypted-ami') update_encrypted_ami_args.setup_update_encrypted_ami( update_encrypted_ami_parser) argv = sys.argv[1:] values = parser.parse_args(argv) # Initialize logging. Log messages are written to stderr and are # prefixed with a compact timestamp, so that the user knows how long # each operation took. if values.verbose: log_level = logging.DEBUG else: # Boto logs auth errors and 401s at ERROR level by default. boto.log.setLevel(logging.FATAL) log_level = logging.INFO # Set the log level of our modules explicitly. We can't set the # default log level to INFO because we would see INFO messages from # boto and other 3rd party libraries in the command output. logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%H:%M:%S') global log log = logging.getLogger(__name__) log.setLevel(log_level) aws_service.log.setLevel(log_level) encryptor_service.log.setLevel(log_level) if argv[0] == 'encrypt-ami': return command_encrypt_ami(values, log) if argv[0] == 'update-encrypted-ami': return command_update_encrypted_ami(values, log)
def main(): # Check Python version. version = '%d.%d' % (sys.version_info.major, sys.version_info.minor) if version != '2.7': print( 'brkt-cli requires Python 2.7. Version', version, 'is not supported.', file=sys.stderr ) return 1 parser = argparse.ArgumentParser() parser.add_argument( '-v', '--verbose', dest='verbose', action='store_true', help='Print status information to the console' ) parser.add_argument( '--version', action='version', version='brkt-cli version %s' % VERSION ) subparsers = parser.add_subparsers(dest='subparser_name') encrypt_ami_parser = subparsers.add_parser('encrypt-ami') encrypt_ami_args.setup_encrypt_ami_args(encrypt_ami_parser) update_encrypted_ami_parser = \ subparsers.add_parser('update-encrypted-ami') update_encrypted_ami_args.setup_update_encrypted_ami( update_encrypted_ami_parser) argv = sys.argv[1:] values = parser.parse_args(argv) # Initialize logging. Log messages are written to stderr and are # prefixed with a compact timestamp, so that the user knows how long # each operation took. if values.verbose: log_level = logging.DEBUG else: # Boto logs auth errors and 401s at ERROR level by default. boto.log.setLevel(logging.FATAL) log_level = logging.INFO # Set the log level of our modules explicitly. We can't set the # default log level to INFO because we would see INFO messages from # boto and other 3rd party libraries in the command output. logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%H:%M:%S') global log log = logging.getLogger(__name__) log.setLevel(log_level) aws_service.log.setLevel(log_level) encryptor_service.log.setLevel(log_level) if values.validate_ami: print( 'The --validate-ami option has been replaced with --no-validate. ' 'It will be removed in a future release.', file=sys.stderr ) values.validate = True if values.no_validate_ami: print( 'The --validate-ami option has been replaced with --no-validate. ' 'It will be removed in a future release.', file=sys.stderr ) values.validate = False try: if values.subparser_name == 'encrypt-ami': return command_encrypt_ami(values, log) if values.subparser_name == 'update-encrypted-ami': return command_update_encrypted_ami(values, log) except ValidationError as e: print(e, file=sys.stderr) except NoAuthHandlerFound: msg = ( 'Unable to connect to AWS. Are your AWS_ACCESS_KEY_ID and ' 'AWS_SECRET_ACCESS_KEY environment variables set?' ) if values.verbose: log.exception(msg) else: log.error(msg) except EC2ResponseError as e: if e.error_code == 'AuthFailure': msg = 'Check your AWS login credentials and permissions' if values.verbose: log.exception(msg) else: log.error(msg + ': ' + e.error_message) elif e.error_code in ( 'InvalidKeyPair.NotFound', 'InvalidSubnetID.NotFound', 'InvalidGroup.NotFound'): if values.verbose: log.exception(e.error_message) else: log.error(e.error_message) elif e.error_code == 'UnauthorizedOperation': if values.verbose: log.exception(e.error_message) else: log.error(e.error_message) log.error( 'Unauthorized operation. Check the IAM policy for your ' 'AWS account.' ) else: raise except util.BracketError as e: if values.verbose: log.exception(e.message) else: log.error(e.message) except KeyboardInterrupt: if values.verbose: log.exception('Interrupted by user') else: log.error('Interrupted by user') return 1