in awscli/customizations/cloudtrail/subscribe.py [0:0]
def _call(self, options, parsed_globals):
"""
Run the command. Calls various services based on input options and
outputs the final CloudTrail configuration.
"""
gse = options.include_global_service_events
if gse:
if gse.lower() == 'true':
gse = True
elif gse.lower() == 'false':
gse = False
else:
raise ValueError('You must pass either true or false to'
' --include-global-service-events.')
bucket = options.s3_use_bucket
if options.s3_new_bucket:
bucket = options.s3_new_bucket
if self.UPDATE and options.s3_prefix is None:
# Prefix was not passed and this is updating the S3 bucket,
# so let's find the existing prefix and use that if possible
res = self.cloudtrail.describe_trails(
trailNameList=[options.name])
trail_info = res['trailList'][0]
if 'S3KeyPrefix' in trail_info:
LOG.debug('Setting S3 prefix to {0}'.format(
trail_info['S3KeyPrefix']))
options.s3_prefix = trail_info['S3KeyPrefix']
self.setup_new_bucket(bucket, options.s3_prefix,
options.s3_custom_policy)
elif not bucket and not self.UPDATE:
# No bucket was passed for creation.
raise ValueError('You must pass either --s3-use-bucket or'
' --s3-new-bucket to create.')
if options.sns_new_topic:
try:
topic_result = self.setup_new_topic(options.sns_new_topic,
options.sns_custom_policy)
except Exception:
# Roll back any S3 bucket creation
if options.s3_new_bucket:
self.s3.delete_bucket(Bucket=options.s3_new_bucket)
raise
try:
cloudtrail_config = self.upsert_cloudtrail_config(
options.name,
bucket,
options.s3_prefix,
options.sns_new_topic,
gse
)
except Exception:
# Roll back any S3 bucket / SNS topic creations
if options.s3_new_bucket:
self.s3.delete_bucket(Bucket=options.s3_new_bucket)
if options.sns_new_topic:
self.sns.delete_topic(TopicArn=topic_result['TopicArn'])
raise
sys.stdout.write('CloudTrail configuration:\n{config}\n'.format(
config=json.dumps(cloudtrail_config, indent=2)))
if not self.UPDATE:
# If the configure call command above completes then this should
# have a really high chance of also completing
self.start_cloudtrail(options.name)
sys.stdout.write(
'Logs will be delivered to {bucket}:{prefix}\n'.format(
bucket=bucket, prefix=options.s3_prefix or ''))