def update_stack_set()

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))