Write mysql file to ~club
[mspang/pyceo.git] / ceo / mysql.py
1 import os, re, subprocess, ldap, socket, pwd
2 from ceo import conf, ldapi, terms, remote, ceo_pb2
3 from ceo.excep import InvalidArgument
4
5 class MySQLException(Exception):
6     pass
7
8 def write_mysql_info(username, password):
9     homedir = pwd.getpwnam(username).pw_dir
10     password_file = '%s/ceo-mysql-info' % homedir
11     if os.path.exists(password_file):
12         os.rename(password_file, password_file + '.old')
13     fd = os.open(password_file, os.O_CREAT|os.O_EXCL|os.O_WRONLY, 0660)
14     fh = os.fdopen(fd, 'w')
15     fh.write("""MySQL Database Information for %(username)s
16
17 Your new MySQL database was created. To connect, use
18 the following options:
19
20 Database: %(username)s
21 Username: %(username)s
22 Password: %(password)s
23 Hostname: localhost
24
25 The command to connect using the MySQL command-line client is
26
27   mysql %(username)s -u %(username)s -p
28
29 This database is only accessible from caffeine.
30 """ % { 'username': username, 'password': password })
31
32     fh.close()
33
34 def create_mysql(username):
35     try:
36         request = ceo_pb2.AddMySQLUser()
37         request.username = username
38
39         out = remote.run_remote('mysql', request.SerializeToString())
40
41         response = ceo_pb2.AddMySQLUserResponse()
42         response.ParseFromString(out)
43
44         if any(message.status != 0 for message in response.messages):
45             raise MySQLException('\n'.join(message.message for message in response.messages))
46
47         return response.password
48     except remote.RemoteException, e:
49         raise MySQLException(e)
50