Revision ba418ba5
Added by Benoît PECCATTE about 7 years ago
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
Fixes #10251: Registered Plugins should be kept at upgrade