Muehlenhoff has submitted this change and it was merged.

Change subject: nodepool: systemd wrapper
......................................................................


nodepool: systemd wrapper

Puppetize a basic systemd unit for Nodepool.

systemd default to stopping the service with SIGTERM which Nodepool
handle by abruptly exiting.  Instead stop it with the provided
`nodepool-graceful-stop` which is feed with the PID systemd knows for
nodepool.
Eventually after systemd TimeoutStopSec expired, SIGKILL will be sent
wich finish the process.

systemd launch nodepool in interactive mode (with -d) and keep tracks of
the process PID.  Hence there is no need for a pid file under
/var/run/nodepool

stdout/stderr are sent to syslog. Quite useful to find warnings and
errors via journalctl.

For later:

* Need to define some new commands, such as dump_stack to send SIGUSR2 and
  maybe graceful-stop / force-stop.  We will see.

* Include all of this in the Debian package. Easier to handle via puppet
  for now.

Bug: T96867
Change-Id: Idd917f3ef4ade088c5f9ca322a181077d9442173
---
A modules/nodepool/files/nodepool-graceful-stop
M modules/nodepool/manifests/init.pp
A modules/nodepool/templates/initscripts/nodepool.systemd.erb
3 files changed, 58 insertions(+), 0 deletions(-)

Approvals:
  Muehlenhoff: Verified; Looks good to me, approved



diff --git a/modules/nodepool/files/nodepool-graceful-stop 
b/modules/nodepool/files/nodepool-graceful-stop
new file mode 100644
index 0000000..2cffc08
--- /dev/null
+++ b/modules/nodepool/files/nodepool-graceful-stop
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+if [ -z $1 ]; then
+    echo "Usage $0 <pid of nodepool>"
+    exit 1
+fi
+PID=$1
+kill -USR1 $PID
+
+if [ -n "${PID:-}" ]; then
+    i=0
+    while kill -0 "${PID:-}" 2> /dev/null;  do
+        if [ $i -eq '0' ]; then
+            echo -n " ... waiting for Nodepool tasks to complete "
+        else
+            echo -n "."
+        fi
+        i=$(($i+1))
+        sleep 1
+    done
+    echo "done"
+fi
diff --git a/modules/nodepool/manifests/init.pp 
b/modules/nodepool/manifests/init.pp
index 1c9d18a..99a0015 100644
--- a/modules/nodepool/manifests/init.pp
+++ b/modules/nodepool/manifests/init.pp
@@ -68,6 +68,26 @@
         ensure => present,
     }
 
+    # Script to nicely stop Nodepool scheduler from systemd
+    file { '/usr/bin/nodepool-graceful-stop':
+        ensure => present,
+        source => 'puppet:///modules/nodepool/nodepool-graceful-stop',
+        owner  => 'root',
+        group  => 'root',
+        mode   => '0555',
+    }
+
+    base::service_unit { 'nodepool':
+        ensure         => present,
+        refresh        => true,
+        systemd        => true,
+        service_params => {},
+        require        => [
+            Package['nodepool'],
+            File['/usr/bin/nodepool-graceful-stop'],
+        ],
+    }
+
     # Recursively create $dib_base_path since Puppet does not support that
     exec { 'create_dib_base_path':
         command => "/bin/mkdir -p ${dib_base_path}",
@@ -165,4 +185,5 @@
             File['/etc/nodepool/elements'],
         ]
     }
+
 }
diff --git a/modules/nodepool/templates/initscripts/nodepool.systemd.erb 
b/modules/nodepool/templates/initscripts/nodepool.systemd.erb
new file mode 100644
index 0000000..5770757
--- /dev/null
+++ b/modules/nodepool/templates/initscripts/nodepool.systemd.erb
@@ -0,0 +1,15 @@
+[Unit]
+Description=Nodepool daemon
+
+[Service]
+Type=simple
+User=nodepool
+Group=nodepool
+
+# Start in non daemon mode (-d)
+ExecStart=/usr/bin/nodepoold -d -l /etc/nodepool/logging.conf
+
+ExecStop=/usr/bin/nodepool-graceful-stop $MAINPID
+
+StandardOutput=syslog
+StandardError=syslog

-- 
To view, visit https://gerrit.wikimedia.org/r/224102
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Idd917f3ef4ade088c5f9ca322a181077d9442173
Gerrit-PatchSet: 9
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Hashar <has...@free.fr>
Gerrit-Reviewer: Andrew Bogott <abog...@wikimedia.org>
Gerrit-Reviewer: Dduvall <dduv...@wikimedia.org>
Gerrit-Reviewer: Giuseppe Lavagetto <glavage...@wikimedia.org>
Gerrit-Reviewer: Hashar <has...@free.fr>
Gerrit-Reviewer: Muehlenhoff <mmuhlenh...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to