]> Frank Brehm's Git Trees - pixelpark/puppetmaster-webhooks.git/commitdiff
Implementing locking of r10k updates
authorFrank Brehm <frank.brehm@pixelpark.com>
Tue, 30 Apr 2019 09:35:07 +0000 (11:35 +0200)
committerFrank Brehm <frank.brehm@pixelpark.com>
Tue, 30 Apr 2019 09:35:07 +0000 (11:35 +0200)
lib/webhooks/__init__.py
lib/webhooks/deploy.py
lib/webhooks/r10k.py

index 9bfc52c427b92cdc04aec60a9ac7e148bb31b934..97bf6608314b2015727bdc053ca8376ebee4a55c 100644 (file)
@@ -1,6 +1,6 @@
 #!/bin/env python3
 # -*- coding: utf-8 -*-
 
-__version__ = '1.6.2'
+__version__ = '1.6.3'
 
 # vim: ts=4 et list
index d0de531bf70b0fefb647682123d5db070adb5b1c..c2b27218e0e039a64a2c298c8abda397b2985259 100644 (file)
@@ -100,7 +100,6 @@ class WebhookDeployApp(BaseHookApp):
             lockretry_delay_start=0.5, lockretry_delay_increase=0.5,
             lockretry_max_delay=30, max_lockfile_age=900, locking_use_pid=True,
             lockdir='/tmp')
-
         self.locker.initialized = True
 
         self.initialized = True
index 19c666f1d1f288f616b37c208b525fb04e890462..8fce9f7c941cf4c2e465067f4390086cd8aaaa7a 100644 (file)
@@ -22,6 +22,8 @@ import pathlib
 import requests
 
 # Own modules
+from fb_tools.handler.lock import LockHandler
+
 from . import __version__
 
 from .base_app import BaseHookApp
@@ -46,6 +48,7 @@ class R10kHookApp(BaseHookApp):
 
         self.r10k_bin = None
         self.puppet_bin = None
+        self.locker = None
         description = _("Receives push events as JSON-Data and deploys it with r10k.")
 
         self.locale = 'de_DE.utf8'
@@ -73,6 +76,14 @@ class R10kHookApp(BaseHookApp):
         self.search_r10k_bin()
         self.check_cert_files()
 
+        self.locker = LockHandler(
+            appname=self.appname, verbose=self.verbose, base_dir=self.base_dir,
+            simulate=self.simulate, sudo=False, quiet=self.quiet,
+            lockretry_delay_start=1, lockretry_delay_increase=1,
+            lockretry_max_delay=120, max_lockfile_age=1800, locking_use_pid=True,
+            lockdir='/tmp')
+        self.locker.initialized = True
+
         self.initialized = True
 
     # -------------------------------------------------------------------------
@@ -201,16 +212,28 @@ class R10kHookApp(BaseHookApp):
     def run_hook(self):
         """Main routine."""
 
-        if not self.exec_r10k():
-            LOG.warn(_("Executing {!r} was not successful.").format(str(self.r10k_bin)))
-            return
+        lockfile = 'r10k.' + self.ref + '.lock'
+        LOG.info(_("Trying to create lockfile {fn!r} in directory {d!r} ...").format(
+            fn=lockfile, d=str(self.locker.lockdir)))
 
-        if not self.generate_puppet_types():
-            what = '{c} generate types --environment {e}'.format(c=self.puppet_bin, e=self.ref)
-            LOG.warn(_("{!r} was not successful.").format(what))
-            return
+        lock = self.locker.create_lockfile(lockfile)
+
+        try:
+            lock.autoremove = True
+
+            if not self.exec_r10k():
+                LOG.warn(_("Executing {!r} was not successful.").format(str(self.r10k_bin)))
+                return
+
+            if not self.generate_puppet_types():
+                what = '{c} generate types --environment {e}'.format(c=self.puppet_bin, e=self.ref)
+                LOG.warn(_("{!r} was not successful.").format(what))
+                return
+
+            return self.del_env_cache()
 
-        return self.del_env_cache()
+        finally:
+            lock = None
 
     # -------------------------------------------------------------------------
     def del_env_cache(self):