docs: def _non_idempotent_tasks(self, output):
          """
          Parses the output to identify the non idempotent tasks.
  
          :param (str) output: A string containing the output of the ansible run.
          :return: A list containing the names of the non idempotent tasks.
          """
          # Remove blank lines to make regex matches easier.
          output = re.sub(r'\n\s*\n*', '\n', output)
  
          # Remove ansi escape sequences.
          output = util.strip_ansi_escape(output)
  
          # Split the output into a list and go through it.
          output_lines = output.split('\n')
          res = []
          task_line = ''
          for _, line in enumerate(output_lines):
              if line.startswith('TASK'):
                  task_line = line
              elif line.startswith('changed'):
                  host_name = re.search(r'\[(.*)\]', line).groups()[0]
                  task_name = re.search(r'\[(.*)\]', task_line).groups()[0]
                  res.append(u'* [{}] => {}'.format(host_name, task_name))
  
          return res