Martin Peřina has uploaded a new change for review. Change subject: tools: Adds config validation prior to notifier service startup ......................................................................
tools: Adds config validation prior to notifier service startup Adds notifier configuration validation prior to service startup so an error message will be displayed when trying to start notifier service. Change-Id: I524e952f9e6a93002426ad3e828ca8300672e762 Bug-Url: https://bugzilla.redhat.com/989382 Signed-off-by: Martin Perina <mper...@redhat.com> --- M backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/Notifier.java M packaging/pythonlib/ovirt_engine/service.py M packaging/services/ovirt-engine-notifier/ovirt-engine-notifier.py M packaging/services/ovirt-engine-notifier/ovirt-engine-notifier.systemd.in M packaging/services/ovirt-engine-notifier/ovirt-engine-notifier.sysv.in 5 files changed, 45 insertions(+), 6 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/30/22530/1 diff --git a/backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/Notifier.java b/backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/Notifier.java index c91dca3..1649fe0 100644 --- a/backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/Notifier.java +++ b/backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/Notifier.java @@ -27,6 +27,11 @@ private static ScheduledExecutorService monitorScheduler = Executors.newSingleThreadScheduledExecutor(); /** + * Command line argument, that tells Notifier to validate properties only (it exits after validation) + */ + private static final String ARG_VALIDATE = "validate"; + + /** * Initializes logging configuration */ private static void initLogging() { @@ -47,7 +52,21 @@ * [0] configuration file absolute path */ public static void main(String[] args) { + NotificationProperties prop = null; initLogging(); + + try { + prop = NotificationProperties.getInstance(); + prop.validate(); + } catch (Exception ex) { + log.error("Failed to parse configuration.", ex); + System.exit(1); + } + + if (args != null && args.length > 0 && ARG_VALIDATE.equals(args[0])) { + // command line argument to validate only entered + System.exit(0); + } NotifierSignalHandler handler = new NotifierSignalHandler(); handler.addScheduledExecutorService(notifyScheduler); @@ -55,9 +74,6 @@ Runtime.getRuntime().addShutdownHook(handler); try { - NotificationProperties prop = NotificationProperties.getInstance(); - prop.validate(); - NotificationService notificationService = new NotificationService(prop); EngineMonitorService engineMonitorService = new EngineMonitorService(prop); diff --git a/packaging/pythonlib/ovirt_engine/service.py b/packaging/pythonlib/ovirt_engine/service.py index a82e04c..3304eb5 100644 --- a/packaging/pythonlib/ovirt_engine/service.py +++ b/packaging/pythonlib/ovirt_engine/service.py @@ -469,11 +469,11 @@ if len(args) != 1: parser.error(_('Action is missing')) - action = args[0] - if not action in ('start'): + self._action = args[0] + if not self._action in self.validActions(): parser.error( _("Invalid action '{action}'").format( - action=action + action=self._action ) ) @@ -490,6 +490,10 @@ else: sys.exit(0) + def validActions(self): + """Returns list of valid action for the service""" + return ('start') + def daemonSetup(self): """Setup environment Called before daemon context diff --git a/packaging/services/ovirt-engine-notifier/ovirt-engine-notifier.py b/packaging/services/ovirt-engine-notifier/ovirt-engine-notifier.py index fa8bbd7..815290a 100755 --- a/packaging/services/ovirt-engine-notifier/ovirt-engine-notifier.py +++ b/packaging/services/ovirt-engine-notifier/ovirt-engine-notifier.py @@ -87,6 +87,10 @@ mustExist=False, ) + def validActions(self): + """Returns list of valid action for the service""" + return ('start', 'validate') + def daemonSetup(self): if os.geteuid() == 0: @@ -140,6 +144,8 @@ '-dependencies', 'org.ovirt.engine.core.tools', '-class', 'org.ovirt.engine.core.notifier.Notifier', ] + if self._action == 'validate': + self._engineArgs += ['validate'] self._engineEnv = os.environ.copy() self._engineEnv.update({ diff --git a/packaging/services/ovirt-engine-notifier/ovirt-engine-notifier.systemd.in b/packaging/services/ovirt-engine-notifier/ovirt-engine-notifier.systemd.in index 9d53b2f..dd0c699 100644 --- a/packaging/services/ovirt-engine-notifier/ovirt-engine-notifier.systemd.in +++ b/packaging/services/ovirt-engine-notifier/ovirt-engine-notifier.systemd.in @@ -6,6 +6,7 @@ Type=simple User=@ENGINE_USER@ Group=@ENGINE_GROUP@ +ExecStartPre=@ENGINE_USR@/services/ovirt-engine-notifier/ovirt-engine-notifier.py --redirect-output $EXTRA_ARGS validate ExecStart=@ENGINE_USR@/services/ovirt-engine-notifier/ovirt-engine-notifier.py --redirect-output $EXTRA_ARGS start EnvironmentFile=-/etc/sysconfig/ovirt-engine-notifier diff --git a/packaging/services/ovirt-engine-notifier/ovirt-engine-notifier.sysv.in b/packaging/services/ovirt-engine-notifier/ovirt-engine-notifier.sysv.in index 8992268..ca4628c 100644 --- a/packaging/services/ovirt-engine-notifier/ovirt-engine-notifier.sysv.in +++ b/packaging/services/ovirt-engine-notifier/ovirt-engine-notifier.sysv.in @@ -34,6 +34,18 @@ fi echo -n $"Starting $PROG: " ulimit -n ${FILENO:-65535} + runuser -s /bin/sh ${USER} -c \ + "${ENGINE_USR}/services/${NAME}/${NAME}.py \ + --redirect-output \ + ${EXTRA_ARGS} \ + validate" + RETVAL=$? + if [ $RETVAL -ne 0 ]; then + echo_failure + echo + exit $RETVAL + fi + touch "${PIDFILE}" chown "${USER}" "${PIDFILE}" daemon --user "${USER}" --pidfile="${PIDFILE}" \ -- To view, visit http://gerrit.ovirt.org/22530 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I524e952f9e6a93002426ad3e828ca8300672e762 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Martin Peřina <mper...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches