Exemplo n.º 1
0
def asterisk_modules_config(tplfilename, customtplfilename, newfilename, modules):
    """
    Generate Asterisk modules.conf from a template
    """
    filename, filestat  = _find_template_file(tplfilename, customtplfilename, newfilename)
    customfile          = customtplfilename == filename

    cfg         = AsteriskConfigParser(filename=filename)
    newcfg      = AsteriskConfigParser()

    for directive in cfg.directives():
        newcfg.add_directive(directive[0], directive[1])

    mods        = list(modules)
    appendmods  = True

    if customfile and cfg.has_option('modules', 'noload'):
        for optname, optvalue in cfg.items('modules'):
            if optname == 'noload' and optvalue in mods:
                mods.remove(optvalue)

    for sec in cfg:
        secname = sec.get_name()
        newcfg.add_section(secname)
        for opt in sec:
            optname = opt.get_name()
            optvalue = opt.get_value()
            if secname != 'modules':
                newcfg.append(secname, optname, optvalue)
                continue
            if optname in ('preload', 'load', 'noload'):
                if appendmods:
                    appendmods = False
                    for module in mods:
                        newcfg.append(secname, 'preload', module)
                if optvalue in mods:
                    continue
            newcfg.append(secname, optname, optvalue)

    if appendmods:
        appendmods = False
        if not newcfg.has_section('modules'):
            newcfg.add_section('modules')
        for module in mods:
            newcfg.append('modules', 'preload', module)

    _write_config_file(newfilename, newcfg, filestat)