From f650173105fb5bac0074ef03b8d2a649ea35fd13 Mon Sep 17 00:00:00 2001
From: Nicolas Wavrant <nicolas.wavrant@nexedi.com>
Date: Tue, 13 Sep 2016 11:01:31 +0200
Subject: [PATCH] free_port: is more slapos-friendly: restart until a valid
 port is returned

---
 slapos/recipe/free_port.py | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/slapos/recipe/free_port.py b/slapos/recipe/free_port.py
index 35d96508b..61f13eb88 100644
--- a/slapos/recipe/free_port.py
+++ b/slapos/recipe/free_port.py
@@ -53,8 +53,12 @@ class Recipe(object):
         with open(buildout['buildout']['installed']) as config_file:
           parser.readfp(config_file)
         port = parser.get(name, 'port')
-        self.options['port'] = port
-        return
+        # Port can be 0 in case of upgrade: some old service still runs on port,
+        # so 0 is returned by default. Then, on next run, this recipe is processed
+        # again until a correct value is returned
+        if port != '0':
+          self.options['port'] = port
+          return
     except (IOError, ConfigParser.NoSectionError, ConfigParser.NoOptionError):
       pass
 
-- 
2.30.9