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:
parent
c07c1237fe
commit
6fd130998f
2 changed files with 37 additions and 22 deletions
|
@ -238,7 +238,7 @@ class MakeShellAccounts(BaseClient):
|
||||||
shadow_file = codecs.open(self.temp + '/shadow.txt', mode='w', encoding='utf-8')
|
shadow_file = codecs.open(self.temp + '/shadow.txt', mode='w', encoding='utf-8')
|
||||||
os.chmod(self.temp + '/shadow.txt', 00400)
|
os.chmod(self.temp + '/shadow.txt', 00400)
|
||||||
if not self.people:
|
if not self.people:
|
||||||
self.people = self.people_list()
|
self.people_list()
|
||||||
for person in self.people:
|
for person in self.people:
|
||||||
username = person['username']
|
username = person['username']
|
||||||
if self.valid_user(username):
|
if self.valid_user(username):
|
||||||
|
@ -281,23 +281,25 @@ class MakeShellAccounts(BaseClient):
|
||||||
def groups_text(self, groups=None, people=None):
|
def groups_text(self, groups=None, people=None):
|
||||||
i = 0
|
i = 0
|
||||||
file = open(self.temp + '/group.txt', 'w')
|
file = open(self.temp + '/group.txt', 'w')
|
||||||
if not groups:
|
if not self.groups:
|
||||||
groups = self.group_list()
|
self.group_list()
|
||||||
if not people:
|
if not self.people:
|
||||||
people = self.people_list()
|
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
|
|
||||||
|
|
||||||
usernames = self.usernames()
|
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']
|
gid = group['id']
|
||||||
name = group['name']
|
name = group['name']
|
||||||
try:
|
try:
|
||||||
|
@ -314,7 +316,6 @@ class MakeShellAccounts(BaseClient):
|
||||||
file.write("0%i %s:x:%i:%s\n" % (i, name, gid, memberships))
|
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))
|
file.write(".%s %s:x:%i:%s\n" % (name, name, gid, memberships))
|
||||||
i = i + 1
|
i = i + 1
|
||||||
|
|
||||||
file.close()
|
file.close()
|
||||||
|
|
||||||
def group_list(self, search='*'):
|
def group_list(self, search='*'):
|
||||||
|
@ -336,7 +337,6 @@ class MakeShellAccounts(BaseClient):
|
||||||
def people_list(self, search='*'):
|
def people_list(self, search='*'):
|
||||||
params = {'search' : search}
|
params = {'search' : search}
|
||||||
self.people = self.send_request('user/list', auth=True, input=params)['people']
|
self.people = self.send_request('user/list', auth=True, input=params)['people']
|
||||||
return self.people
|
|
||||||
|
|
||||||
def email_list(self, search='*'):
|
def email_list(self, search='*'):
|
||||||
params = {'search' : search}
|
params = {'search' : search}
|
||||||
|
|
|
@ -5,6 +5,8 @@ import cherrypy
|
||||||
|
|
||||||
import turbomail
|
import turbomail
|
||||||
|
|
||||||
|
import sqlalchemy
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import gpgme
|
import gpgme
|
||||||
|
@ -280,10 +282,23 @@ class User(controllers.Controller):
|
||||||
def list(self, search="a*"):
|
def list(self, search="a*"):
|
||||||
'''List users
|
'''List users
|
||||||
'''
|
'''
|
||||||
|
|
||||||
re_search = re.sub(r'\*', r'%', search).lower()
|
re_search = re.sub(r'\*', r'%', search).lower()
|
||||||
people = People.query.filter(People.username.like(re_search)).order_by('username')
|
if self.jsonRequest():
|
||||||
if people.count() < 0:
|
people = []
|
||||||
turbogears.flash(_("No users found matching '%s'") % search)
|
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)
|
return dict(people=people, search=search)
|
||||||
|
|
||||||
@identity.require(turbogears.identity.not_anonymous())
|
@identity.require(turbogears.identity.not_anonymous())
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue