Browse Source

Don't re-parse healthcheck values coming from extended services

Signed-off-by: Joffrey F <[email protected]>
Joffrey F 8 years ago
parent
commit
cf43e6edf7

+ 8 - 2
compose/config/config.py

@@ -716,9 +716,15 @@ def process_healthcheck(service_dict, service_name):
         hc['test'] = raw['test']
 
     if 'interval' in raw:
-        hc['interval'] = parse_nanoseconds_int(raw['interval'])
+        if not isinstance(raw['interval'], six.integer_types):
+            hc['interval'] = parse_nanoseconds_int(raw['interval'])
+        else:  # Conversion has been done previously
+            hc['interval'] = raw['interval']
     if 'timeout' in raw:
-        hc['timeout'] = parse_nanoseconds_int(raw['timeout'])
+        if not isinstance(raw['timeout'], six.integer_types):
+            hc['timeout'] = parse_nanoseconds_int(raw['timeout'])
+        else:  # Conversion has been done previously
+            hc['timeout'] = raw['timeout']
     if 'retries' in raw:
         hc['retries'] = raw['retries']
 

+ 9 - 0
tests/fixtures/extends/healthcheck-1.yml

@@ -0,0 +1,9 @@
+version: '2.1'
+services:
+  demo:
+    image: foobar:latest
+    healthcheck:
+      test: ["CMD", "/health.sh"]
+      interval: 10s
+      timeout: 5s
+      retries: 36

+ 6 - 0
tests/fixtures/extends/healthcheck-2.yml

@@ -0,0 +1,6 @@
+version: '2.1'
+services:
+  demo:
+    extends:
+      file: healthcheck-1.yml
+      service: demo

+ 13 - 0
tests/unit/config/config_test.py

@@ -3098,6 +3098,19 @@ class ExtendsTest(unittest.TestCase):
             'other': {'condition': 'service_started'}
         }
 
+    def test_extends_with_healthcheck(self):
+        service_dicts = load_from_filename('tests/fixtures/extends/healthcheck-2.yml')
+        assert service_sort(service_dicts) == [{
+            'name': 'demo',
+            'image': 'foobar:latest',
+            'healthcheck': {
+                'test': ['CMD', '/health.sh'],
+                'interval': 10000000000,
+                'timeout': 5000000000,
+                'retries': 36,
+            }
+        }]
+
 
 @pytest.mark.xfail(IS_WINDOWS_PLATFORM, reason='paths use slash')
 class ExpandPathTest(unittest.TestCase):