From ccb4621fd3f10a428873bf9b58f178d2b0d90c75 Mon Sep 17 00:00:00 2001
From: "p.fomin"
Date: Thu, 13 Sep 2018 14:50:14 +0700
Subject: [PATCH] I-21 check replicas greater or equal
---
k8s/resource.py | 10 +++++-----
k8s/test_provisioner.py | 14 +++++++++++---
2 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/k8s/resource.py b/k8s/resource.py
index a266c30..ad9d7e6 100644
--- a/k8s/resource.py
+++ b/k8s/resource.py
@@ -37,9 +37,9 @@ def __init__(self, command, sync_mode):
self.sync_mode = sync_mode
@staticmethod
- def _replicas_are_equal(replicas):
+ def _replicas_count_are_greater_or_equal(replicas):
replicas = [0 if r is None else r for r in replicas] # replace all None to 0
- return all(r == replicas[0] for r in replicas)
+ return all(r >= replicas[0] for r in replicas)
@staticmethod
def _ports_are_equal(old_port, new_port):
@@ -276,7 +276,7 @@ def _wait_deployment_complete(self, kube_client, tries, timeout):
log.info('desiredReplicas = {}, updatedReplicas = {}, availableReplicas = {}'.
format(replicas[0], replicas[4], replicas[2]))
- if self._replicas_are_equal(replicas) and status.unavailable_replicas is None:
+ if self._replicas_count_are_greater_or_equal(replicas) and status.unavailable_replicas is None:
log.info('Deployment completed on {} attempt'.format(i + 1))
return
else:
@@ -297,7 +297,7 @@ def _wait_statefulset_complete(self, kube_client, tries, timeout):
if current_revision == update_revision:
log.info('desiredReplicas = {}, updatedReplicas = {}, availableReplicas = {}'.
format(replicas[0], replicas[1], replicas[2]))
- if self._replicas_are_equal(replicas):
+ if self._replicas_count_are_greater_or_equal(replicas):
log.info('StatefulSet completed on {} attempt'.format(i))
return
else:
@@ -314,7 +314,7 @@ def _wait_daemonset_complete(self, kube_client, tries, timeout):
status.number_ready, status.updated_number_scheduled]
log.info('desiredNodes = {}, availableNodes = {}, readyNodes = {}, updatedNodes = {}'.
format(replicas[0], replicas[1], replicas[2], replicas[3]))
- if self._replicas_are_equal(replicas) and status.number_unavailable is None:
+ if self._replicas_count_are_greater_or_equal(replicas) and status.number_unavailable is None:
log.info('DaemonSet completed on {} attempt'.format(i))
return
else:
diff --git a/k8s/test_provisioner.py b/k8s/test_provisioner.py
index 4920be8..0bff0b8 100644
--- a/k8s/test_provisioner.py
+++ b/k8s/test_provisioner.py
@@ -374,8 +374,16 @@ def test_get_template_context(self):
class TestKubeObject(unittest.TestCase):
def test_replicas_equal(self):
replicas = (1, 1, 1)
- self.assertTrue(Provisioner._replicas_are_equal(replicas))
+ self.assertTrue(Provisioner._replicas_count_are_greater_or_equal(replicas))
+
+ def test_replicas_greater(self):
+ replicas = (2, 3, 3)
+ self.assertTrue(Provisioner._replicas_count_are_greater_or_equal(replicas))
def test_replicas_not_equal(self):
- replicas = (0, 1, 1)
- self.assertFalse(Provisioner._replicas_are_equal(replicas))
+ replicas = (1, 1, 0)
+ self.assertFalse(Provisioner._replicas_count_are_greater_or_equal(replicas))
+
+ def test_replicas_with_hpa_not_equal(self):
+ replicas = (6, 7, 5)
+ self.assertFalse(Provisioner._replicas_count_are_greater_or_equal(replicas))