docs: def compare_config(self, target, init=True, indent_level=0):
          """
          This method will return all the necessary commands to get from the config we are in to the target
          config.
  
          Args:
              * **target** (:class:`~pyFG.forticonfig.FortiConfig`) - Target config.
              * **init** (bool) - This tells to the method if this is the first call to the method or if we are inside\
                                  the recursion. You can ignore this parameter.
              * **indent_level** (int) - This tells the method how deep you are in the recursion. You can ignore it.
  
          Returns:
              A string containing all the necessary commands to reach the target config.
          """
  
          if init:
              fwd = self.full_path_fwd
              bwd = self.full_path_bwd
          else:
              fwd = self.rel_path_fwd
              bwd = self.rel_path_bwd
  
          indent = 4*indent_level*' '
  
          if indent_level == 0 and self.vdom is not None:
              if self.vdom == 'global':
                  pre = 'conf global\n'
              else:
                  pre = 'conf vdom\n  edit %s\n' % self.vdom
              post = 'end'
          else:
              pre = ''
              post = ''
  
          pre_block = '%s%s' % (indent, fwd)
          post_block = '%s%s' % (indent, bwd)
  
          my_params = self.parameters.keys()
          ot_params = target.parameters.keys()
  
          text = ''
  
          for param in my_params:
              if param not in ot_params:
                  text += '  %sunset %s\n' % (indent, param)
              else:
                  # We ignore quotes when comparing values
                  if str(self.get_param(param)).replace('"', '') != str(target.get_param(param)).replace('"', ''):
                      text += '  %sset %s %s\n' % (indent, param, target.get_param(param))
  
          for param in ot_params:
              if param not in my_params:
                  text += '  %sset %s %s\n' % (indent, param, target.get_param(param))
  
          my_blocks = self.sub_blocks.keys()
          ot_blocks = target.sub_blocks.keys()
  
          for block_name in my_blocks:
              if block_name not in ot_blocks:
                  text += "    %sdelete %s\n" % (indent, block_name)
              else:
                  text += self[block_name].compare_config(target[block_name], False, indent_level+1)
  
          for block_name in ot_blocks:
              if block_name not in my_blocks:
                  text += target[block_name].to_text(True, indent_level+1, True)
  
          if text == '':
              return ''
          else:
              return '%s%s%s%s%s' % (pre, pre_block, text, post_block, post)