[Cluster-devel] conga/luci/utils luci_admin
rmccabe at sourceware.org
rmccabe at sourceware.org
Fri Jun 16 23:19:59 UTC 2006
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2006-06-16 23:19:59
Modified files:
luci/utils : luci_admin
Log message:
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/utils/luci_admin.diff?cvsroot=cluster&r1=1.11&r2=1.12
--- conga/luci/utils/luci_admin 2006/06/16 19:35:33 1.11
+++ conga/luci/utils/luci_admin 2006/06/16 23:19:58 1.12
@@ -118,7 +118,7 @@
if not portal_mem or not portal_reg:
raise
except:
- sys.stderr.write('Your Luci installation appears to be corrupt. Please reinstall, then try to restore again.')
+ sys.stderr.write('Your Luci installation appears to be corrupt.')
return -1
userList = node.getElementsByTagName('userList')
@@ -127,6 +127,10 @@
return -1
userList = userList[0].getElementsByTagName('user')
+ if not userList or len(userList) < 1:
+ sys.stderr.write('Your backup file contains no users. At the very least, the admin user must exist. Please check that your backup file is not corrupt.\n')
+ return -1
+
for u in userList:
id = u.getAttribute('id')
if not id:
@@ -164,7 +168,8 @@
return -1
verbose.write('Added user \"' + id + '\"\n')
- #transaction.commit()
+ transaction.commit()
+
try:
x = app.unrestrictedTraverse('/luci/systems/storage')
@@ -180,14 +185,20 @@
sys.write.stderr('No storage systems to add')
else:
systemList = systemList[0].getElementsByTagName('system')
+ if len(systemList) < 1:
+ sys.write.stderr('No storage systems to add')
for s in systemList:
id = s.getAttribute('id')
if not id:
- sys.stderr.write('Missing ID for storage system')
- continue
+ sys.stderr.write('Missing ID for storage system. Your backup may be corrupt.\n')
+ transaction.abort()
+ return -1
id = str(id)
- title = str(s.getAttribute('title'))
+ try:
+ title = str(s.getAttribute('title'))
+ except:
+ title = '__luci__:system'
x.manage_addFolder(id, title)
try:
@@ -201,18 +212,21 @@
userPerms = s.getElementsByTagName('permList')
if not userPerms or len(userPerms) < 1:
+ verbose.write('Added storage system \"' + id + '\"\n')
continue
userPerms = userPerms[0].getElementsByTagName('ref')
for i in userPerms:
- if i.nodeType != xml.dom.Node.ELEMENT_NODE:
- continue
newuser = i.getAttribute('name')
if not newuser:
continue
- new_system.manage_setLocalRoles(newuser, ['View'])
+ try:
+ new_system.manage_setLocalRoles(newuser, ['View'])
+ verbose.write('Added view permission to storage system \"' + id + '\" for \"' + newuser + '\"\n')
+ except:
+ sys.stderr.write('An error occurred while restoring permission for storage system \"' + id + '\" for user \"' + newuser + '\"\n')
verbose.write('Added storage system \"' + id + '\"\n')
- #transaction.commit()
+ transaction.commit()
try:
x = app.unrestrictedTraverse('/luci/systems/cluster')
@@ -222,14 +236,28 @@
sys.stderr.write('Cannot find the Luci cluster directory. Your Luci installation may be corrupt.')
transaction.abort()
return -1
- clusterList = node.getElementsByTagName('cluster')
+
+ clusterList = node.getElementsByTagName('clusterList')
+ if not clusterList or len(clusterList) < 1:
+ verbose('No clusters to add')
+ else:
+ clusterList = clusterList[0].getElementsByTagName('cluster')
+ if len(clusterList) < 1:
+ verbose('No clusters to add')
+
for c in clusterList:
id = c.getAttribute('id')
if not id:
sys.stderr.write('Cluster element is missing id\n')
- continue
+ transaction.abort()
+ return -1
id = str(id)
- title = str(c.getAttribute('title'))
+
+ title = c.getAttribute('title')
+ if not title:
+ title = '__luci__:cluster'
+ else:
+ title = str(title)
try:
x.manage_addFolder(id, title)
@@ -241,49 +269,65 @@
transaction.abort()
return -1
+ viewperm = list()
+
userPerms = c.getElementsByTagName('permList')
- if not userPerms or len(userPerms) < 1:
- continue
- userPerms = userPerms[0].getElementsByTagName('ref')
- for i in userPerms:
- if i.nodeType != xml.dom.Node.ELEMENT_NODE:
- continue
- newuser = i.getAttribute('name')
- if not newuser:
- continue
- new_cluster.manage_setLocalRoles(newuser, ['View'])
+ if userPerms and len(userPerms) > 0:
+ userPerms = userPerms[0].getElementsByTagName('ref')
+ for i in userPerms:
+ newuser = i.getAttribute('name')
+ if not newuser:
+ continue
+ newuser = str(newuser)
- clusterSystems = c.getElementsByTagName('systemsList')
+ try:
+ new_cluster.manage_setLocalRoles(newuser, ['View'])
+ verbose.write('Added view permission to cluster \"' + id + '\" for \"' + newuser + '\"\n')
+ except:
+ sys.stderr.write('An error occurred while restoring permission for cluster \"' + id + '\" for user \"' + newuser + '\"\n')
+ viewperm.append(newuser)
+
+ clusterSystems = c.getElementsByTagName('csystemList')
if not clusterSystems or len(clusterSystems) < 1:
verbose.write('Cluster \"' + id + '\" has no storage systems\n')
- continue
- clusterSystems = clusterSystems[0].getElementsByTagName('ref')
- for i in clusterSystems:
- newsys = i.getAttribute('name')
- if not newsys:
- sys.stderr.write('Storage system missing name for cluster \"' + id + '\"\n')
- continue
- newsys = str(newsys)
- stitle = i.getAttribute('title')
- if stitle:
- stitle = str(stitle)
- else:
- stitle = None
- try:
- x.manage_addFolder(newsys, stitle)
- newcs = app.unrestrictedTraverse('/luci/systems/cluster/' + id + '/' + newsys)
- if not newcs:
- raise
- except:
- sys.stderr.write('An error occurred while restoring the storage system \"' + newsys + '\" for cluster \"' + id + '\"')
- transaction.abort()
- return -1
- verbose.write('Added storage system \"' + newsys + '\" for cluster \"' + id)
- verbose.write('Added cluster\"' + id + '\"')
- #transaction.commit()
+ else:
+ clusterSystems = clusterSystems[0].getElementsByTagName('csystem')
+ for i in clusterSystems:
+ newsys = i.getAttribute('id')
+ if not newsys:
+ sys.stderr.write('Storage system missing name for cluster \"' + id + '\"\n')
+ continue
+ newsys = str(newsys)
+ stitle = i.getAttribute('title')
+ if not stitle:
+ stitle = '__luci__:csystem:' + id
+ else:
+ stitle = str(stitle)
+
+ try:
+ x.manage_addFolder(newsys, stitle)
+ newcs = app.unrestrictedTraverse('/luci/systems/cluster/' + id + '/' + newsys)
+ if not newcs:
+ raise
+ except:
+ sys.stderr.write('An error occurred while restoring the storage system \"' + newsys + '\" for cluster \"' + id + '\"\n')
+ transaction.abort()
+ return -1
+ transaction.commit()
+
+ try:
+ for i in viewperm:
+ newcs.manage_setLocalRoles(i, ['View'])
+ verbose.write('Added view permission to cluster system \"' + newsys + '\" for \"' + i + '\"\n')
+ except:
+ sys.stderr.write('An error occurred while restoring permissions for cluster system \"' + newsys + '\" in cluster \"' + id + '\" for user \"' + i + '\"\n')
+ transaction.abort()
+ return -1
+ verbose.write('Added storage system \"' + newsys + '\" for cluster \"' + id + '\"\n')
+ verbose.write('Added cluster \"' + id + '\"\n')
+ transaction.commit()
- #transaction.commit()
- transaction.abort()
+ transaction.commit()
conn.close()
db.pack()
db.close()
@@ -328,7 +372,7 @@
conn = db.open()
except:
stderr.write('Unable to open the luci database \"' + dbfn + '\"\n')
- sys.exit(1)
+ return -1
systems = {}
clusters = {}
@@ -339,14 +383,6 @@
else:
backupfn = LUCI_BACKUP_PATH
- # TODO: this needs to backup the backup, if any, and should
- # write to a tempfile, then rename.
- try:
- f = file(backupfn, 'w')
- except:
- sys.stderr.write('Unable to open \"' + backupfn + '\" to write backup.\n')
- sys.exit(1)
-
# To suppress some useless zope error messages.
sys.stderr = null
@@ -374,27 +410,38 @@
dict = obj.__dict__
if obj_class == 'OFS.Folder.Folder':
- if not 'title' in dict or dict['title'][0:9] != '__luci__:':
+ if not 'title' in dict or not dict['title'] or dict['title'][0:9] != '__luci__:':
if next_oid is None: break
else: continue
title = dict['title'].split(':')
cur = None
if title[1] == 'cluster':
- clusters[dict['id']] = {
- 'id': dict['id'],
- 'title': dict['title'],
- 'permList': [],
- 'systemsList:': []
- }
- cur = clusters[dict['id']]
+ if not dict['id'] in clusters:
+ clusters[dict['id']] = {
+ 'id': dict['id'],
+ 'title': dict['title'],
+ 'permList': [],
+ 'csystemList': {}
+ }
+ cur = clusters[dict['id']]
+ else:
+ cur = clusters[dict['id']]
+ cur['id'] = dict['id']
+ cur['title'] = dict['title']
elif title[1] == 'csystem':
if len(title) > 2:
clusterName = title[2]
- else:
- parent = obj.parentNode()
- clusterName = parent.__dict__['id']
- clusters[clusterName]['systemsList'].append(dict['id'])
+ if not clusterName in clusters:
+ clusters[clusterName] = {
+ 'id': clusterName,
+ 'csystemList': {},
+ 'permList': []
+ }
+ clusters[clusterName]['csystemList'][dict['id']] = {
+ 'id': dict['id'],
+ 'title': '__luci__:csystem:' + clusterName,
+ }
elif title[1] == 'system':
systems[dict['id']] = {
'id': dict['id'],
@@ -407,7 +454,7 @@
if next_oid is None: break
else: continue
- if cur:
+ if cur and '__ac_local_roles__' in dict:
roles = dict['__ac_local_roles__']
for i in roles:
if not i in users:
@@ -446,7 +493,6 @@
break
sys.stderr = orig_stderr
- null.close()
conn.close()
db.close()
fs.close()
@@ -459,9 +505,9 @@
del users[i]
backup = {
+ 'userList': users,
'systemList': systems,
- 'clusterList': clusters,
- 'userList': users
+ 'clusterList': clusters
}
doc = xml.dom.minidom.Document()
@@ -485,7 +531,7 @@
certfile.close()
except False:
sys.stderr.write('Unable to read ' + SSL_PRIVKEY_PATH + '\n')
- sys.exit(1)
+ return -1
try:
certfile = file(SSL_PUBKEY_PATH, 'rb')
@@ -503,7 +549,7 @@
certfile.close()
except:
sys.stderr.write('Unable to read ' + SSL_PUBKEY_PATH + '\n')
- sys.exit(1)
+ return -1
try:
certfile = file(SSL_KEYCONFIG_PATH, 'rb')
@@ -523,6 +569,15 @@
sys.stderr.write('Unable to read ' + SSL_KEYCONFIG_PATH + '\n')
luciData.appendChild(dataNode)
+
+ # TODO: this needs to backup the backup, if any, and should
+ # write to a tempfile, then rename.
+ try:
+ f = file(backupfn, 'w')
+ except:
+ sys.stderr.write('Unable to open \"' + backupfn + '\" to write backup.\n')
+ return -1
+
f.write(doc.toprettyxml())
f.flush()
f.close()
@@ -735,16 +790,22 @@
sys.exit(1)
pass
- print 'Backing up Luci server'
- luci_backup(argv[2:])
-
+ print 'Backing up the Luci server...'
+
+ if luci_backup(argv[2:]):
+ sys.write.stderr('The Luci backup failed.\n')
+ sys.exit(1)
+ print 'Backup was successful. The backup file is',LUCI_BACKUP_PATH
return
def restore(argv):
- print 'Restoring Luci server'
+ print 'Restoring the Luci server...'
- luci_restore(argv[2:])
+ if luci_restore(argv[2:]):
+ print 'The Luci restore failed. Try reinstalling Luci, then restoring again.'
+ sys.exit(1)
+
restart_message()
return
More information about the Cluster-devel
mailing list