code: def ask_for_approval(full_changeset=None, params_diff=None,
                       include_verbose=False):
      
      approval_options = ['y', 'n']
      if include_verbose:
          approval_options.append('v')
  
      approve = ui.ask("Execute the above changes? [{}] ".format(
          '/'.join(approval_options))).lower()
  
      if include_verbose and approve == "v":
          if params_diff:
              logger.info(
                  "Full changeset:\n\n%s\n%s",
                  format_params_diff(params_diff),
                  yaml.safe_dump(full_changeset),
              )
          else:
              logger.info(
                  "Full changeset:\n%s",
                  yaml.safe_dump(full_changeset),
              )
          return ask_for_approval()
      elif approve != "y":
          raise exceptions.CancelExecution
docs: Prompt the user for approval to execute a change set.
  
      Args:
          full_changeset (list, optional): A list of the full changeset that will
              be output if the user specifies verbose.
          params_diff (list, optional): A list of DictValue detailing the
              differences between two parameters returned by
              :func:`stacker.actions.diff.diff_dictionaries`
          include_verbose (bool, optional): Boolean for whether or not to include
              the verbose option