Project

General

Profile

« Previous | Next » 

Revision ba418ba5

Added by Benoît PECCATTE about 7 years ago

Fixes #10251: Registered Plugins should be kept at upgrade

View differences:

rudder-server-relay/SOURCES/rudder-pkg
rudder-pkg install-file <package.rpkg>
rudder-pkg list
rudder-pkg remove <package>
rudder-pkg disable-incompatibles
rudder-pkg plugin save-status
rudder-pkg plugin restore-status
rudder-pkg plugin enable <plugin>
rudder-pkg plugin disable <plugin>
Options:
......
import copy
import re
import docopt
import sys
from subprocess import Popen,PIPE
RUDDER_VERSION="4.1"
......
# Plugins specific resources
PLUGINS_CONTEXT_XML = "/opt/rudder/share/webapps/rudder.xml"
PLUGINS_JAR_DIR = '/opt/rudder/share/plugins'
# Run a command in a shell like a script would do
......
shell(script + " " + param)
def plugin_status(name, enable):
def jar_status(name, enable):
global jetty_needs_restart
name = PLUGINS_JAR_DIR + '/' + name
text = open(PLUGINS_CONTEXT_XML).read()
def repl(match):
enabled = [x for x in match.group(1).split(',') if x != name and x != '']
......
run_script("postinst", script_dir, exist)
if metadata['type'] == 'plugin' and 'jar-files' in metadata:
for j in metadata['jar-files']:
plugin_status(j, True)
jar_status(j, True)
def package_list():
......
metadata = DB["plugins"][package_name]
if metadata['type'] == 'plugin' and 'jar-files' in metadata:
for j in metadata['jar-files']:
plugin_status(j, False)
jar_status(j, False)
run_script("prerm", script_dir, None)
remove_files(metadata)
run_script("postrm", script_dir, None)
......
metadata = DB["plugins"][p]
if not check_plugin_compatibility(metadata):
print("Plugin " + p + " is not compatible with rudder anymore, disabling it.")
for j in metadata['jar-files']:
plugin_status(j, False)
if 'jar-files' in metadata:
for j in metadata['jar-files']:
jar_status(j, False)
print("Please install a new version of " + p + " to enable it again.")
print("")
jetty_needs_restart = True
def plugin_save_status():
enabled = []
text = open(PLUGINS_CONTEXT_XML).read()
match = re.search(r'<Set name="extraClasspath">(.*?)</Set>', text)
if match:
enabled = match.group(1).split(',')
for p in DB["plugins"]:
metadata = DB["plugins"][p]
if 'jar-files' in metadata:
for j in metadata['jar-files']:
if j in enabled:
print("enabled " + j)
else:
print("disabled " + j)
def plugin_restore_status():
lines = sys.stdin.readlines()
for line in lines:
line = line.strip()
if line.startswith("enabled "):
print("enable " + line.split(' ')[1])
jar_status(line.split(' ')[1], True)
if line.startswith("disabled "):
jar_status(line.split(' ')[1], False)
check_compatibility()
def plugin_status(plugin, status):
if plugin not in DB["plugins"]:
fail("Unknown plugin " + plugin)
metadata = DB["plugins"][plugin]
for j in metadata['jar-files']:
jar_status(j, status)
## MAIN
if __name__ == "__main__":
args = docopt.docopt(__doc__)
......
package_list()
elif args['remove']:
remove(args['<package>'])
elif args['disable-incompatibles']:
check_compatibility()
elif args['plugin']:
if args['save-status']:
plugin_save_status()
elif args['restore-status']:
plugin_restore_status()
elif args['enable']:
plugin_status(args['<plugin>'], True)
elif args['disable']:
plugin_status(args['<plugin>'], False)
if jetty_needs_restart:
shell("service rudder-jetty restart", "Restarting jetty")
rudder-webapp/SPECS/rudder-webapp.spec
# Pre Installation
#=================================================
service rudder-jetty stop
if [ -x /opt/ruder/bin/rudder-pkg ]
then
/opt/ruder/bin/rudder-pkg save-status > /tmp/rudder-plugins-upgrade
fi
%post -n rudder-webapp
#=================================================
......
ln -sf %{rudderdir}/share/webapps/rudder.xml %{rudderdir}/jetty7/contexts/rudder.xml
fi
if [ -f /tmp/rudder-plugins-upgrade ]
then
/opt/ruder/bin/rudder-pkg restore-status < /tmp/rudder-plugins-upgrade
fi
service rudder-jetty start
%postun -n rudder-webapp
rudder-webapp/debian/postinst
ln -sf /opt/rudder/share/webapps/rudder.xml /opt/rudder/jetty7/contexts/rudder.xml
fi
if [ -f /tmp/rudder-plugins-upgrade ]
then
/opt/ruder/bin/rudder-pkg restore-status < /tmp/rudder-plugins-upgrade
fi
# Restart the webapp
echo -n "INFO: Restarting Rudder webapp and inventory-endpoint..."
service rudder-jetty start >/dev/null 2>&1
rudder-webapp/debian/preinst
#if the stops fails, it's probably because it was not started
service rudder-jetty stop || true
if [ -x /opt/ruder/bin/rudder-pkg ]
then
/opt/ruder/bin/rudder-pkg save-status > /tmp/rudder-plugins-upgrade
fi
;;
abort-upgrade)

Also available in: Unified diff