added additional quicknesses to the script. 1) The script now takes about 6 seconds to run against my workstation. 2) User Groups are only created if the host has those users on that OS 3) total IO transfer against a sample migration takes about 2.1M Compression takes that down to about 1.3M. It will likely be worth having our proxy servers do this compression for us.

This commit is contained in:
Michael McGrath 2008-03-10 19:43:24 -05:00
parent c07c1237fe
commit 6fd130998f
2 changed files with 37 additions and 22 deletions

View file

@ -238,7 +238,7 @@ class MakeShellAccounts(BaseClient):
shadow_file = codecs.open(self.temp + '/shadow.txt', mode='w', encoding='utf-8')
os.chmod(self.temp + '/shadow.txt', 00400)
if not self.people:
self.people = self.people_list()
self.people_list()
for person in self.people:
username = person['username']
if self.valid_user(username):
@ -281,23 +281,25 @@ class MakeShellAccounts(BaseClient):
def groups_text(self, groups=None, people=None):
i = 0
file = open(self.temp + '/group.txt', 'w')
if not groups:
groups = self.group_list()
if not people:
people = self.people_list()
''' First create all of our users/groups combo '''
for person in people:
uid = person['id']
if self.valid_user_group(uid):
username = person['username']
file.write("=%i %s:x:%i:\n" % (uid, username, uid))
file.write("0%i %s:x:%i:\n" % (i, username, uid))
file.write(".%s %s:x:%i:\n" % (username, username, uid))
i = i + 1
if not self.groups:
self.group_list()
if not self.people:
self.people_list()
usernames = self.usernames()
for group in groups:
''' First create all of our users/groups combo '''
for person in self.people:
uid = person['id']
try:
if self.valid_user(usernames[uid]):
username = person['username']
file.write("=%i %s:x:%i:\n" % (uid, username, uid))
file.write("0%i %s:x:%i:\n" % (i, username, uid))
file.write(".%s %s:x:%i:\n" % (username, username, uid))
i = i + 1
except KeyError:
continue
for group in self.groups:
gid = group['id']
name = group['name']
try:
@ -314,7 +316,6 @@ class MakeShellAccounts(BaseClient):
file.write("0%i %s:x:%i:%s\n" % (i, name, gid, memberships))
file.write(".%s %s:x:%i:%s\n" % (name, name, gid, memberships))
i = i + 1
file.close()
def group_list(self, search='*'):
@ -336,7 +337,6 @@ class MakeShellAccounts(BaseClient):
def people_list(self, search='*'):
params = {'search' : search}
self.people = self.send_request('user/list', auth=True, input=params)['people']
return self.people
def email_list(self, search='*'):
params = {'search' : search}

View file

@ -5,6 +5,8 @@ import cherrypy
import turbomail
import sqlalchemy
import os
import re
import gpgme
@ -280,10 +282,23 @@ class User(controllers.Controller):
def list(self, search="a*"):
'''List users
'''
re_search = re.sub(r'\*', r'%', search).lower()
people = People.query.filter(People.username.like(re_search)).order_by('username')
if people.count() < 0:
turbogears.flash(_("No users found matching '%s'") % search)
if self.jsonRequest():
people = []
peoplesql = sqlalchemy.select([People.c.id, People.c.username, People.c.human_name, People.c.ssh_key, People.c.password])
persons = peoplesql.execute()
for person in persons:
people.append({
'id' : person[0],
'username' : person[1],
'human_name' : person[2],
'ssh_key' : person[3],
'password' : person[4]})
else:
people = People.query.filter(People.username.like(re_search)).order_by('username')
if people.count() < 0:
turbogears.flash(_("No users found matching '%s'") % search)
return dict(people=people, search=search)
@identity.require(turbogears.identity.not_anonymous())