summaryrefslogtreecommitdiff
path: root/scripts/migration/0.8.2/migrate.py
blob: adc0f7d9b2c50eb25ba4ea62f0e7ef3d17333516 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/usr/bin/env python
# migrate.py

"""
Migrate CouchDB schema to Soledad 0.8.2 schema.

******************************************************************************
                               ATTENTION!

  - This script does not backup your data for you. Make sure you have a backup
    copy of your databases before running this script!

  - Make sure you turn off any service that might be writing to the couch
    database before running this script.

******************************************************************************

Run this script with the --help option to see command line options.

See the README.md file for more information.
"""

import datetime
import logging
import netrc
import os

from argparse import ArgumentParser

from leap.soledad.server import load_configuration

from migrate_couch_schema import migrate


TARGET_VERSION = '0.8.2'
DEFAULT_COUCH_URL = 'http://127.0.0.1:5984'
CONF = load_configuration('/etc/soledad/soledad-server.conf')
NETRC_PATH = CONF['soledad-server']['admin_netrc']


#
# command line args and execution
#

def _configure_logger(log_file):
    if not log_file:
        fname, _ = os.path.basename(__file__).split('.')
        timestr = datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S')
        filename = 'soledad_%s_%s_%s.log' \
                   % (TARGET_VERSION, fname, timestr)
        dirname = os.path.join(
            os.path.dirname(os.path.realpath(__file__)), 'log')
        log_file = os.path.join(dirname, filename)
    logging.basicConfig(
        filename=log_file,
        filemode='a',
        format='%(asctime)s,%(msecs)d %(levelname)s %(message)s',
        datefmt='%H:%M:%S',
        level=logging.DEBUG)


def _default_couch_url():
    if not os.path.exists(NETRC_PATH):
        return DEFAULT_COUCH_URL
    parsed_netrc = netrc.netrc(NETRC_PATH)
    host, (login, _, password) = parsed_netrc.hosts.items()[0]
    url = ('http://%(login)s:%(password)s@%(host)s:5984' % {
           'login': login,
           'password': password,
           'host': host})
    return url


def _parse_args():
    parser = ArgumentParser()
    parser.add_argument(
        '--couch_url',
        help='the url for the couch database',
        default=_default_couch_url())
    parser.add_argument(
        '--do-migrate',
        help='actually perform the migration (otherwise '
             'just print what would be done)',
        action='store_true')
    parser.add_argument(
        '--log-file',
        help='the log file to use')
    return parser.parse_args()


if __name__ == '__main__':
    args = _parse_args()
    _configure_logger(args.log_file)
    migrate(args, TARGET_VERSION)