'Instantiate a RenewableCert object from an existing lineage.
:param str config_filename: the path to the renewal config file
that defines this lineage.
:param .NamespaceConfig: parsed command line arguments
:raises .CertStorageError: if the configuration file\'s name didn\'t end
in ".conf", or the file is missing or broken.'

def __init__(self, config_filename, cli_config, update_symlinks=False):

    self.cli_config = cli_config
    self.lineagename = lineagename_for_filename(config_filename)
    try:
        self.configfile = configobj.ConfigObj(config_filename)
    except configobj.ConfigObjError:
        raise errors.CertStorageError('error    parsing    {0}'.format(config_filename))
    self.configuration = config_with_defaults(self.configfile)
    if (not all(((x in self.configuration) for x in ALL_FOUR))):
        raise errors.CertStorageError('renewal    config    file    {0}    is    missing    a    required    file    reference'.format(self.configfile))
    conf_version = self.configuration.get('version')
    if ((conf_version is not None) and (util.get_strict_version(conf_version) > CURRENT_VERSION)):
        logger.warning('Attempting    to    parse    the    version    %s    renewal    configuration    file    found    at    %s    with    version    %s    of    Certbot.    This    might    not    work.', conf_version, config_filename, certbot.__version__)
    self.cert = self.configuration['cert']
    self.privkey = self.configuration['privkey']
    self.chain = self.configuration['chain']
    self.fullchain = self.configuration['fullchain']
    self.live_dir = os.path.dirname(self.cert)
    self._fix_symlinks()
    if update_symlinks:
        self._update_symlinks()
    self._check_symlinks()
