in aws/solutions/StackSetsResource/FunctionCode/lambda_function.py [0:0]
def update_stack_set(set_region, set_id, set_description, set_template,
set_parameters, set_capabilities, set_tags, ops_prefs):
# Set up for retries
sleep_time = 15
retries = 60
this_try = 0
client = boto3.client('cloudformation', region_name=set_region)
# Retry loop
while True:
try:
response = client.update_stack_set(
StackSetName=set_id,
Description=set_description,
TemplateURL=set_template,
# TemplateBody='string',
# UsePreviousTemplate=True|False,
Parameters=set_parameters,
Capabilities=set_capabilities,
Tags=set_tags,
OperationPreferences=ops_prefs
# OperationId='string'
)
if response['ResponseMetadata']['HTTPStatusCode'] == 200:
return set_id
else:
raise Exception("HTTP Error: {}".format(response))
except ClientError as e:
if e.response['Error']['Code'] == 'OperationInProgressException':
this_try += 1
if this_try == retries:
raise Exception("Failed to update StackSet after {} tries.".format(this_try))
else:
logger.warning(
"Update StackSet operation in progress for {}. Sleeping for {} seconds.".format(
set_id, sleep_time))
sleep(sleep_time)
continue
elif e.response['Error']['Code'] == 'StackSetNotEmptyException':
raise Exception("There are still stacks in set {}. You must delete these first.".format(set_id))
else:
raise Exception("Unexpected error: {}".format(e))