Convert xmpp-hostname-change to python, merge into xmpp action file.

This commit is contained in:
James Valleroy 2014-12-03 20:00:03 -05:00 committed by Sunil Mohan Adapa
parent ff4fd4728c
commit 6fc721a727
3 changed files with 57 additions and 38 deletions

View File

@ -23,6 +23,13 @@ Configuration helper for the ejabberd service
import argparse
import subprocess
import re
import time
import os
JWCHAT_CONFIG = '/etc/jwchat/config.js'
EJABBERD_CONFIG = '/etc/ejabberd/ejabberd.yml'
EJABBERD_BACKUP = '/tmp/ejabberd.dump'
def parse_arguments():
@ -34,6 +41,15 @@ def parse_arguments():
subparsers.add_parser('get-installed',
help='Get whether ejabberd is installed')
# Update ejabberd and jwchat with new hostname
hostname_change = subparsers.add_parser(
'change-hostname',
help='Update ejabberd and jwchat with new hostname')
hostname_change.add_argument('--old-hostname',
help='Previous hostname')
hostname_change.add_argument('--new-hostname',
help='New hostname')
# Register a new user account
register = subparsers.add_parser('register',
help='Register a new user account')
@ -50,6 +66,42 @@ def subcommand_get_installed(_):
print('installed' if get_installed() else 'not installed')
def subcommand_change_hostname(arguments):
"""Update ejabberd and jwchat with new hostname"""
if not get_installed():
print('Failed to update XMPP hostname: ejabberd is not installed.')
old_hostname = arguments.old_hostname
new_hostname = arguments.new_hostname
with open(JWCHAT_CONFIG, 'r') as conffile:
lines = conffile.readlines()
with open(JWCHAT_CONFIG, 'w') as conffile:
for line in lines:
conffile.write(re.sub('var SITENAME = "' + old_hostname + '";',
'var SITENAME = "' + new_hostname + '";',
line))
with open(EJABBERD_CONFIG, 'r') as conffile:
lines = conffile.readlines()
with open(EJABBERD_CONFIG, 'w') as conffile:
for line in lines:
conffile.write(re.sub(old_hostname, new_hostname, line))
with open(EJABBERD_BACKUP, 'r') as dumpfile:
lines = dumpfile.readlines()
with open(EJABBERD_BACKUP, 'w') as dumpfile:
for line in lines:
dumpfile.write(re.sub(old_hostname, new_hostname, line))
subprocess.call(['service', 'ejabberd', 'restart'])
# load backup database
time.sleep(10)
subprocess.call(['ejabberdctl', 'load', EJABBERD_BACKUP])
os.remove(EJABBERD_BACKUP)
def subcommand_register(arguments):
"""Register a new user account"""
if not get_installed():

View File

@ -1,37 +0,0 @@
#!/bin/bash
#
# This file is part of Plinth.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Action to set up new hostname for ejabberd and jwchat.
hostname="$1"
old_hostname=`debconf-show ejabberd | awk '/hostname/ { print $3 }'`
# Based on http://www.process-one.net/docs/ejabberd/guide_en.html#htoc77
BACKUP=/tmp/ejabberd.dump
sed -i "s/var SITENAME = \"$old_hostname\";/var SITENAME = \"$hostname\";/" /etc/jwchat/config.js
sed -i "s/$old_hostname/$hostname/g" /etc/ejabberd/ejabberd.yml
sed -i "s/$old_hostname/$hostname/g" $BACKUP
service ejabberd restart
# Load backup database
sleep 10
ejabberdctl load $BACKUP
rm $BACKUP

View File

@ -154,6 +154,8 @@ def _apply_changes(request, old_status, new_status):
def set_hostname(hostname):
"""Sets machine hostname to hostname"""
old_hostname = get_hostname()
# Hostname should be ASCII. If it's unicode but passed our
# valid_hostname check, convert to ASCII.
hostname = str(hostname)
@ -161,4 +163,6 @@ def set_hostname(hostname):
LOGGER.info('Changing hostname to - %s', hostname)
actions.superuser_run('xmpp-pre-hostname-change')
actions.superuser_run('hostname-change', hostname)
actions.superuser_run('xmpp-hostname-change', hostname, async=True)
actions.superuser_run('xmpp', 'change-hostname',
'--old-hostname', old_hostname,
'--new-hostname', hostname, async=True)