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

Reply via email to