Commit b0fda502 authored by Nicolas Wavrant's avatar Nicolas Wavrant

resilient: takeover CGI doesn't fail if no backup has been received yet.

Also makes the interface more readable
parent 6fcd18d0
...@@ -95,7 +95,7 @@ output = ${buildout:directory}/instance-frozen.cfg ...@@ -95,7 +95,7 @@ output = ${buildout:directory}/instance-frozen.cfg
[resilient-web-takeover-cgi-script-download] [resilient-web-takeover-cgi-script-download]
recipe = slapos.recipe.build:download recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/resilient-web-takeover-cgi-script.py.in url = ${:_profile_base_location_}/resilient-web-takeover-cgi-script.py.in
md5sum = 3aa7624af1196062d7d01946d4de9f0e md5sum = 38a4f723924a674c4bc1be1b9ffd2c3c
mode = 0644 mode = 0644
destination = ${buildout:directory}/resilient-web-takeover-cgi-script.py.in destination = ${buildout:directory}/resilient-web-takeover-cgi-script.py.in
......
...@@ -27,12 +27,18 @@ def getLatestBackupDate(): ...@@ -27,12 +27,18 @@ def getLatestBackupDate():
# Usually, there is only one callback (so only one key # Usually, there is only one callback (so only one key
# in the db), but if there are several: # in the db), but if there are several:
# Take the "oldest" one (oldest value). # Take the "oldest" one (oldest value).
if not db.keys():
result = False
else:
last_backup = db[db.keys()[0]] last_backup = db[db.keys()[0]]
for callback in db.keys(): for callback in db.keys():
timestamp = float(db[callback]) timestamp = float(db[callback])
if timestamp < last_backup: if timestamp < last_backup:
last_backup = timestamp last_backup = timestamp
return datetime.datetime.fromtimestamp(last_backup) result = datetime.datetime.fromtimestamp(last_backup)
db.close()
shutil.rmtree(temporary_directory)
return result
def isBackupInProgress(): def isBackupInProgress():
""" """
...@@ -42,6 +48,12 @@ def isBackupInProgress(): ...@@ -42,6 +48,12 @@ def isBackupInProgress():
# XXX: check if file is valid # XXX: check if file is valid
return os.path.exists(equeue_lockfile) return os.path.exists(equeue_lockfile)
latest_backup_date = getLatestBackupDate()
if latest_backup_date == False:
latest_backup_message = "No backup downloaded yet, takeover should not happen now."
else:
latest_backup_message = latest_backup_date.strftime('%Y-%m-%d %H:%M:%S')
print "Content-Type: text/html" print "Content-Type: text/html"
print print
...@@ -51,16 +63,17 @@ if "password" not in form: ...@@ -51,16 +63,17 @@ if "password" not in form:
<body> <body>
<h1>This is takeover web interface.</h1> <h1>This is takeover web interface.</h1>
<p>Calling takeover will stop and freeze the current main instance, and make this clone instance the new main instance, replacing the old one.</p> <p>Calling takeover will stop and freeze the current main instance, and make this clone instance the new main instance, replacing the old one.</p>
<p><b>Warning: submit the form only if you understand what you are doing.</b></p> <p><font size=\"+2\"><b>Warning: submit the form only if you understand what you are doing.</b></font></p>
<p>Note: the password asked here can be found within the parameters of your SlapOS instance page.</p> <p>Note: the password asked here can be found within the parameters of your SlapOS instance page.</p>
<p>Last valid backup: %s</p> <hr />
<p>Importer script(s) of backup in progress: %s</p> <p><b>Last valid backup:</b> %s</p>
<p><b>Importer script(s) of backup in progress:</b> %s</p>
<form action="/"> <form action="/">
Password: <input type="text" name="password"> Password: <input type="text" name="password">
<input type="submit" value="Take over" style="background: red;"> <input type="submit" value="Take over" style="background: red;">
</form> </form>
</body> </body>
</html>""" % (getLatestBackupDate().strftime('%Y-%m-%d %H:%M:%S'), isBackupInProgress()) </html>""" % (latest_backup_message, isBackupInProgress())
sys.exit(0) sys.exit(0)
if form['password'].value != '${:password}': if form['password'].value != '${:password}':
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment