From fba3bc344523da0d43f94e130b4944efe0d32529 Mon Sep 17 00:00:00 2001 From: Georgy Kibardin Date: Mon, 20 Mar 2017 11:59:21 +0300 Subject: [PATCH] Use tags instead of roles Now the deployment behaviour is driven by tags rather than role names, i.e. role name cannot be relied upon. Change-Id: Icfabeeb0b7fb6a9d697a09c3cf1fa020bbd4c323 Closes-Bug: #1669743 --- nailgun/nailgun/objects/cluster.py | 7 +++++-- nailgun/nailgun/test/unit/test_objects.py | 5 +++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/nailgun/nailgun/objects/cluster.py b/nailgun/nailgun/objects/cluster.py index 669b963c61..298b33bc34 100644 --- a/nailgun/nailgun/objects/cluster.py +++ b/nailgun/nailgun/objects/cluster.py @@ -868,7 +868,7 @@ class Cluster(NailgunObject): @classmethod def get_roles_by_tag(cls, tag_name, instance): roles = set() - for role, meta in six.iteritems(cls.get_own_roles(instance)): + for role, meta in six.iteritems(cls.get_roles(instance)): if tag_name in meta.get('tags', {}): roles.add(role) return roles @@ -1036,13 +1036,16 @@ class Cluster(NailgunObject): return nodegroups[0] @classmethod - def get_node_groups(cls, instance, noderoles): + def get_node_groups(cls, instance, nodetags): """Returns node groups for given node roles. :param instance: a Cluster instance :param noderoles: a list of node roles :returns: a query for list of NodeGroup instances """ + noderoles = set() + for tag in nodetags: + noderoles.update(cls.get_roles_by_tag(tag, instance) or [tag]) psql_noderoles = sa.cast( psql.array(noderoles), psql.ARRAY(sa.String(consts.ROLE_NAME_MAX_SIZE))) diff --git a/nailgun/nailgun/test/unit/test_objects.py b/nailgun/nailgun/test/unit/test_objects.py index 3697cc97db..3fef915478 100644 --- a/nailgun/nailgun/test/unit/test_objects.py +++ b/nailgun/nailgun/test/unit/test_objects.py @@ -1098,6 +1098,7 @@ class TestClusterObject(BaseTestCase): super(TestClusterObject, self).setUp() self.cluster = self.env.create( cluster_kwargs={'net_provider': 'neutron'}, + release_kwargs={'version': 'newton-10.0', 'api': False}, nodes_kwargs=[ {'roles': ['controller']}, {'roles': ['controller']}, @@ -1240,6 +1241,10 @@ class TestClusterObject(BaseTestCase): controller.group_id, objects.Cluster.get_common_node_group(self.cluster, ['controller']).id) + self.assertEqual( + controller.group_id, + objects.Cluster.get_common_node_group(self.cluster, + ['neutron']).id) def test_get_node_group_multiple_return_same_group(self): group_id = self.env.create_node_group().json_body['id']