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))