From: rmccabe@sourceware.org <rmccabe@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga/luci/utils luci_admin
Date: 21 Jun 2006 17:41:31 -0000 [thread overview]
Message-ID: <20060621174131.21934.qmail@sourceware.org> (raw)
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)
next reply other threads:[~2006-06-21 17:41 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-21 17:41 rmccabe [this message]
-- strict thread matches above, loose matches on Subject: below --
2011-03-25 20:14 [Cluster-devel] conga/luci/utils luci_admin rmccabe
2007-09-19 5:17 rmccabe
2007-08-10 18:36 rmccabe
2007-08-10 18:33 rmccabe
2007-08-10 18:32 rmccabe
2007-08-07 20:22 rmccabe
2006-10-13 6:56 kupcevic
2006-08-18 18:03 rmccabe
2006-08-04 19:19 rmccabe
2006-08-04 18:37 rmccabe
2006-08-03 22:58 kupcevic
2006-08-03 21:19 rmccabe
2006-08-03 21:11 rmccabe
2006-08-03 16:32 rmccabe
2006-08-03 15:55 rmccabe
2006-08-03 12:26 rmccabe
2006-08-03 3:58 rmccabe
2006-08-03 3:30 rmccabe
2006-08-02 23:29 rmccabe
2006-08-02 20:52 rmccabe
2006-08-02 20:45 rmccabe
2006-07-26 1:17 rmccabe
2006-07-25 22:36 rmccabe
2006-07-11 18:46 rmccabe
2006-07-11 14:51 rmccabe
2006-06-29 18:04 rmccabe
2006-06-29 17:51 rmccabe
2006-06-27 19:50 rmccabe
2006-06-27 19:40 rmccabe
2006-06-27 18:19 rmccabe
2006-06-26 22:30 rmccabe
2006-06-26 20:01 rmccabe
2006-06-21 23:06 rmccabe
2006-06-21 17:06 rmccabe
2006-06-18 15:02 rmccabe
2006-06-18 12:50 rmccabe
2006-06-18 3:26 rmccabe
2006-06-16 23:19 rmccabe
2006-06-16 19:35 rmccabe
2006-06-16 18:17 rmccabe
2006-06-16 17:44 rmccabe
2006-06-16 5:35 rmccabe
2006-06-13 18:42 rmccabe
2006-06-13 17:36 rmccabe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20060621174131.21934.qmail@sourceware.org \
--to=rmccabe@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).