Projet

Général

Profil

0001-manager-add-a-command-to-migrate-from-sql-to-ldap.patch

Jérôme Schneider, 19 septembre 2014 10:14

Télécharger (3,36 ko)

Voir les différences:

Subject: [PATCH] manager: add a command to migrate from sql to ldap

Closes #5479
 mandaye_vincennes_manager | 39 ++++++++++++++++++++++++++++++++++++---
 1 file changed, 36 insertions(+), 3 deletions(-)
mandaye_vincennes_manager
9 9

  
10 10
from optparse import OptionParser
11 11

  
12
from mandaye import config
12 13
from mandaye.log import logger
13 14

  
14 15
def get_cmd_options():
15
    usage = "usage: %prog --createdb|--upgradedb"
16
    usage = "usage: %prog --createdb|--upgradedb|--sql2ldap=SQL_SCHEMA"
16 17
    parser = OptionParser(usage=usage)
17 18
    parser.add_option("--createdb",
18 19
            dest="createdb",
19 20
            default=False,
20 21
            action="store_true",
21
            help="Create Mandaye database"
22
            help="Create SQL Mandaye database"
22 23
            )
23 24
    parser.add_option("--upgradedb",
24 25
            dest="upgradedb",
25 26
            default=False,
26 27
            action="store_true",
27
            help="Upgrade Mandaye database"
28
            help="Upgrade SQL Mandaye database"
28 29
            )
30
    parser.add_option("--sql2ldap",
31
            dest="sql_schema",
32
            default="",
33
            type="string",
34
            help="SQL_SCHEMA: sqlalchemy schema (ex postgresql://mandaye@/mandayeold)")
29 35
    (options, args) = parser.parse_args()
30 36
    return options
31 37

  
......
40 46
        alembic_cfg.set_main_option("script_location", global_config.alembic_script_path)
41 47
        command.upgrade(alembic_cfg, "head")
42 48
        logger.info("Database upgraded")
49
    if options.sql_schema:
50
        import ldap
51
        import ldap.modlist
52
        from sqlalchemy import create_engine
53
        from sqlalchemy.orm import sessionmaker, scoped_session
54
        from mandaye.models import SPUser
55
        logger.info("Migrate from %r to %r", options.sql_schema, config.ldap_url)
56
        sql_session = scoped_session(sessionmaker(
57
            bind=create_engine(options.sql_schema)))
58
        ldap_conn = ldap.initialize(config.ldap_url)
59
        ldap_conn.protocol_version = ldap.VERSION3
60
        ldap_conn.simple_bind(config.ldap_bind_dn, config.ldap_bind_password)
61
        for sp_user in sql_session.query(SPUser).all():
62
            association = {
63
                    'spName': str(sp_user.service_provider.name),
64
                    'spLogin': str(sp_user.login),
65
                    'spPostValues': str(sp_user.post_values),
66
                    'idpUniqueID': str(sp_user.idp_user.unique_id),
67
                    'idpName': str(sp_user.idp_user.idp_id),
68
                    'creationDate': sp_user.creation_date.strftime("%Y%m%d%H%M%SZ"),
69
                    'lastConnectionDate': sp_user.last_connection.strftime("%Y%m%d%H%M%SZ"),
70
                    'objectClass': 'MandayeUser'
71
                    }
72
            mod_list = ldap.modlist.addModlist(association)
73
            dn = "uniqueID=%s,%s" % (sp_user.id, config.ldap_base_dn)
74
            logger.debug("Adding %r in ldap server", dn)
75
            result = ldap_conn.add_s(dn, mod_list)
43 76

  
44 77
if __name__ == "__main__":
45 78
    main()
46
-