<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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)