[Cluster-devel] conga/luci/utils luci_admin
rmccabe at sourceware.org
rmccabe at sourceware.org
Wed Jun 21 17:41:31 UTC 2006
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2006-06-21 17:41:30
Modified files:
luci/utils : luci_admin
Log message:
more cleanup
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/utils/luci_admin.diff?cvsroot=cluster&r1=1.16&r2=1.17
--- conga/luci/utils/luci_admin 2006/06/21 17:06:44 1.16
+++ conga/luci/utils/luci_admin 2006/06/21 17:41:30 1.17
@@ -1,6 +1,6 @@
#!/usr/bin/python
-import sys, os, stat, random, crypt, select, string
+import sys, os, stat, random, crypt, select, string, pwd
from sys import stderr, argv
import types
import xml
@@ -22,7 +22,8 @@
SSL_PRIVKEY_PATH='/var/lib/luci/var/certs/privkey.pem'
SSL_PUBKEY_PATH='/var/lib/luci/var/certs/cacert.pem'
SSL_KEYCONFIG_PATH='/var/lib/luci/var/certs/cacert.config'
-LUCI_BACKUP_PATH='/var/lib/luci/var/luci_backup.xml'
+LUCI_BACKUP_DIR='/var/lib/luci/var'
+LUCI_BACKUP_PATH=LUCI_BACKUP_DIR + '/luci_backup.xml'
LUCI_DB_PATH='/var/lib/luci/var/Data.fs'
LUCI_TEMP='/var/lib/luci/var/temp/'
@@ -50,7 +51,6 @@
inituser.close()
try:
- import pwd
luci = pwd.getpwnam(LUCI_USER)[2:4]
os.chown(INITUSER_FILE_PATH, luci[0], luci[1])
except:
@@ -129,7 +129,7 @@
if not portal_mem or not portal_reg:
raise
except:
- sys.stderr.write('Your Luci installation appears to be corrupt.')
+ sys.stderr.write('Your Luci installation appears to be corrupt.\n')
return -1
userList = node.getElementsByTagName('userList')
@@ -193,17 +193,17 @@
if not x:
raise
except:
- sys.stderr.write('Cannot find the Luci storage systems directory. Your Luci installation may be corrupt.')
+ sys.stderr.write('Cannot find the Luci storage systems directory. Your Luci installation may be corrupt.\n')
transaction.abort()
return -1
systemList = node.getElementsByTagName('systemList')
if not systemList or len(systemList) < 1:
- verbose.write('No storage systems to add')
+ verbose.write('No storage systems to add\n')
else:
systemList = systemList[0].getElementsByTagName('system')
if len(systemList) < 1:
- verbose.write('No storage systems to add')
+ verbose.write('No storage systems to add\n')
for s in systemList:
id = s.getAttribute('id')
@@ -250,17 +250,17 @@
if not x:
raise
except:
- sys.stderr.write('Cannot find the Luci cluster directory. Your Luci installation may be corrupt.')
+ sys.stderr.write('Cannot find the Luci cluster directory. Your Luci installation may be corrupt.\n')
transaction.abort()
return -1
clusterList = node.getElementsByTagName('clusterList')
if not clusterList or len(clusterList) < 1:
- verbose.write('No clusters to add')
+ verbose.write('No clusters to add\n')
else:
clusterList = clusterList[0].getElementsByTagName('cluster')
if len(clusterList) < 1:
- verbose.write('No clusters to add')
+ verbose.write('No clusters to add\n')
for c in clusterList:
id = c.getAttribute('id')
@@ -397,7 +397,7 @@
conn = db.open()
except:
stderr.write('Unable to open the luci database \"' + dbfn + '\"\n')
- return -1
+ return None
examine_classes = [
'OFS.Folder.Folder',
@@ -409,11 +409,6 @@
clusters = {}
users = {}
- if len(argv) > 1:
- backupfn = argv[1]
- else:
- backupfn = LUCI_BACKUP_PATH
-
# To suppress some useless zope error messages.
sys.stderr = null
@@ -560,7 +555,7 @@
certfile.close()
except False:
sys.stderr.write('Unable to read ' + SSL_PRIVKEY_PATH + '\n')
- return -1
+ return None
try:
certfile = file(SSL_PUBKEY_PATH, 'rb')
@@ -578,7 +573,7 @@
certfile.close()
except:
sys.stderr.write('Unable to read ' + SSL_PUBKEY_PATH + '\n')
- return -1
+ return None
try:
certfile = file(SSL_KEYCONFIG_PATH, 'rb')
@@ -598,18 +593,7 @@
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()
+ return doc
def _execWithCaptureErrorStatus(command, argv, searchPath = 0, root = '/', stdin = 0, catchfd = 1, catcherrfd = 2, closefd = -1):
if not os.access (root + command, os.X_OK):
@@ -810,13 +794,49 @@
try: os.umask(077)
except: pass
- if luci_backup(argv[2:]):
+ doc = luci_backup(argv[2:])
+ if not doc:
sys.stderr.write('The Luci backup failed.\n')
sys.exit(1)
+ try:
+ stat = os.stat(LUCI_BACKUP_PATH)
+ trynum = 1
+ basename = '/luci_backup-'
+ while True:
+ oldbackup = LUCI_BACKUP_DIR + basename + str(trynum) + '.xml'
+ if not os.path.exists(oldbackup):
+ try:
+ os.rename(LUCI_BACKUP_PATH, oldbackup)
+ except:
+ sys.write.stderr('Unable to rename the existing backup file.\n')
+ sys.exit(1)
+ break
+ trynum += 1
+ except OSError, e:
+ #if e[0] == 2:
+ pass
+
+ try:
+ f = file(LUCI_BACKUP_PATH, 'w')
+ except:
+ sys.stderr.write('Unable to open \"' + LUCI_BACKUP_PATH + '\" to write backup.\n')
+ return -1
+
+ f.write(doc.toprettyxml())
+ f.flush()
+ f.close()
+
print 'Backup was successful. The backup file is',LUCI_BACKUP_PATH
try:
+ luci = pwd.getpwnam(LUCI_USER)[2:4]
+ os.chown(LUCI_DB_PATH, luci[0], luci[1])
+ os.chmod(LUCI_DB_PATH, 0600)
+ except:
+ sys.stderr.write('Unable to change ownership of the Luci database back to user \"' + LUCI_USER + '\"\n')
+
+ try:
os.chmod(LUCI_BACKUP_PATH, 0600)
except OSError, e:
print "An error occurred while making",LUCI_BACKUP_PATH,"read-only:",e
@@ -859,6 +879,13 @@
restart_message()
try:
+ luci = pwd.getpwnam(LUCI_USER)[2:4]
+ os.chown(LUCI_DB_PATH, luci[0], luci[1])
+ os.chmod(LUCI_DB_PATH, 0600)
+ except:
+ sys.stderr.write('Unable to change ownership of the Luci database back to user \"' + LUCI_USER + '\"\n')
+
+ try:
os.unlink(LUCI_TEMP + 'www/ok.gif')
os.unlink(LUCI_TEMP + 'images/version.gif')
os.removedirs(LUCI_TEMP)
More information about the Cluster-devel
mailing list