Exemple #1
0
def set_db_backends(args, options): # pylint: disable-msg=W0613
    """
    POST /set_db_backends
    """
    if 'xivo' not in args:
        raise HttpReqError(415, "missing option 'xivo'")
    else:
        xivodburi = list(urisup.uri_help_split(args['xivo']))

        if xivodburi[0] is None or xivodburi[0].lower() not in WIZARD_XIVO_DB_ENGINES:
            raise HttpReqError(415, "invalid option 'xivo'")
        else:
            xivodburi[0] = xivodburi[0].lower()

        if WIZARD_XIVO_DB_ENGINES[xivodburi[0]]:
            xivodbparams = WIZARD_XIVO_DB_ENGINES[xivodburi[0]]['params']
        else:
            xivodbparams = {}

        if xivodburi[3]:
            xivodbparams.update(dict(xivodburi[3]))

        if xivodbparams:
            xivodburi[3] = zip(xivodbparams.keys(), xivodbparams.values())
        else:
            xivodburi[3] = None

        args['xivo'] = urisup.uri_help_unsplit(xivodburi)

    if 'ql' not in args:
        args['ql'] = args['xivo']

    if 'ipbxengine' not in args:
        raise HttpReqError(415, "missing option 'ipbxengine'")
    elif args['ipbxengine'] not in WIZARD_IPBX_ENGINES:
        raise HttpReqError(415, "invalid ipbxengine: %r" % args['ipbxengine'])

    ipbxdbinfo = WIZARD_IPBX_ENGINES[args['ipbxengine']]['database']

    if 'ipbx' not in args:
        raise HttpReqError(415, "missing option 'ipbx'")
    else:
        ipbxdburi = list(urisup.uri_help_split(args['ipbx']))

        if ipbxdburi[0] is None or ipbxdburi[0].lower() not in ipbxdbinfo:
            raise HttpReqError(415, "invalid option 'ipbx'")
        else:
            ipbxdburi[0] = ipbxdburi[0].lower()

        if ipbxdbinfo[ipbxdburi[0]]['params']:
            ipbxdbparams = ipbxdbinfo[ipbxdburi[0]]['params']
        else:
            ipbxdbparams = {}

        if ipbxdburi[3]:
            ipbxdbparams.update(dict(ipbxdburi[3]))

        if ipbxdbparams:
            ipbxdburi[3] = zip(ipbxdbparams.keys(), ipbxdbparams.values())
        else:
            ipbxdburi[3] = None

        args['ipbx'] = urisup.uri_help_unsplit(ipbxdburi)

    if not WIZARDLOCK.acquire_read(Wdc['lock_timeout']):
        raise HttpReqError(503, "unable to take WIZARDLOCK for reading after %s seconds" % Wdc['lock_timeout'])

    try:
        connect = xivo_helpers.db_connect(args['xivo'])

        if not connect:
            raise HttpReqError(415, "unable to connect to 'xivo' database")

        connect = xivo_helpers.db_connect(args['ipbx'])

        if not connect:
            raise HttpReqError(415, "unable to connect to 'ipbx' database")

        merge_config_file(Wdc['agid_config_tpl_file'],
                          Wdc['agid_config_custom_tpl_file'],
                          Wdc['agid_config_file'],
                          {'db':
                                {'db_uri':  args['ipbx']}})

        merge_config_file(Wdc['provisioning_config_tpl_file'],
                          Wdc['provisioning_config_custom_tpl_file'],
                          Wdc['provisioning_config_file'],
                          {'general':
                                {'database_uri':    args['ipbx']}})

        merge_config_file(Wdc['webinterface_xivo_tpl_file'],
                          Wdc['webinterface_xivo_custom_tpl_file'],
                          Wdc['webinterface_xivo_file'],
                          {'general':
                                {'datastorage': '"%s"' % args['xivo']}})

        merge_config_file(Wdc['webinterface_cti_tpl_file'],
                          Wdc['webinterface_cti_custom_tpl_file'],
                          Wdc['webinterface_cti_file'],
                          {'general':
                                {'datastorage': '"%s"' % args['xivo']},
                           'queuelogger':
                                {'datastorage': '"%s"' % args['ql']},
			  })

        merge_config_file("%s.%s" % (Wdc['webinterface_ipbx_tpl_file'], args['ipbxengine']),
                          "%s.%s" % (Wdc['webinterface_ipbx_custom_tpl_file'], args['ipbxengine']),
                          Wdc['webinterface_ipbx_file'],
                          {'general':
                                {'datastorage': '"%s"' % args['ipbx']}})

        if args['ipbxengine'] == 'asterisk':
            asterisk_configuration(ipbxdburi, ipbxdbinfo[ipbxdburi[0]], ipbxdbparams)
    finally:
        WIZARDLOCK.release()
Exemple #2
0
			return fallback
			
		def void(self, *args):
			print " * WARNING: callback not found for", name.upper(), "key"
			return True
		return void

if __name__ == '__main__':
	print " * INFO: starting common.conf migration"

	if not os.path.exists(COMMON_CONFFILE):
		print " * FATAL: common.conf file not found. skip common.conf migration..."; sys.exit(0)

	#WARNING: we must remove trailing double quotes
	db_uri = ConfigDict.ReadSingleKey(XIVO_CONFFILE, 'general', 'datastorage')[1:-1]
	cursor = db_connect(db_uri).cursor()
	if cursor is None:
		print " * FATAL: cannot connect to xivo database. skip common.conf migration..."; sys.exit(0)

	cc = CommonConf(cursor)

	f = open(COMMON_CONFFILE)
	for l in f.xreadlines():
		if l.startswith('#') or '=' not in l:
			continue
		
		try:
			(key, value) = l[:-1].strip().split('=', 1)
#			print "%s = %s" % (key, value)
			getattr(cc, key.lower())(value.replace('"', '').strip())
		except Exception, e: