Remove LegacyRoleResolver
LegacyRoleResolver is removed and replaced with RoleResolver. RoleResolver is created once where before it was created several times in a loop. Also, typo in StandardConfigRolesHook class name is fixed. Change-Id: Iccddec8948b47aa7441395af25782904f3ea7836 Closes-bug: 1546175
This commit is contained in:
parent
6371fe5028
commit
5bac79d092
|
@ -30,6 +30,7 @@ from nailgun import objects
|
||||||
from nailgun.orchestrator import priority_serializers as ps
|
from nailgun.orchestrator import priority_serializers as ps
|
||||||
from nailgun.orchestrator.tasks_serializer import TaskSerializers
|
from nailgun.orchestrator.tasks_serializer import TaskSerializers
|
||||||
from nailgun.policy.name_match import NameMatchingPolicy
|
from nailgun.policy.name_match import NameMatchingPolicy
|
||||||
|
from nailgun.utils.role_resolver import RoleResolver
|
||||||
|
|
||||||
|
|
||||||
class DeploymentGraph(nx.DiGraph):
|
class DeploymentGraph(nx.DiGraph):
|
||||||
|
@ -417,13 +418,15 @@ class AstuteGraph(object):
|
||||||
:param nodes: list of node db objects
|
:param nodes: list of node db objects
|
||||||
"""
|
"""
|
||||||
serialized = []
|
serialized = []
|
||||||
|
role_resolver = RoleResolver(nodes)
|
||||||
|
|
||||||
for task in tasks:
|
for task in tasks:
|
||||||
|
|
||||||
if self.graph.should_exclude_task(task['id']):
|
if self.graph.should_exclude_task(task['id']):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
serializer = self.serializers.get_stage_serializer(task)(
|
serializer = self.serializers.get_stage_serializer(task)(
|
||||||
task, self.cluster, nodes)
|
task, self.cluster, nodes, role_resolver)
|
||||||
|
|
||||||
if not serializer.should_execute():
|
if not serializer.should_execute():
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -21,10 +21,10 @@ import itertools
|
||||||
from nailgun import consts
|
from nailgun import consts
|
||||||
from nailgun.errors import errors
|
from nailgun.errors import errors
|
||||||
from nailgun.logger import logger
|
from nailgun.logger import logger
|
||||||
from nailgun.orchestrator.tasks_serializer import LegacyRoleResolver
|
|
||||||
import nailgun.orchestrator.tasks_templates as templates
|
import nailgun.orchestrator.tasks_templates as templates
|
||||||
from nailgun.plugins.manager import PluginManager
|
from nailgun.plugins.manager import PluginManager
|
||||||
from nailgun.settings import settings
|
from nailgun.settings import settings
|
||||||
|
from nailgun.utils.role_resolver import RoleResolver
|
||||||
|
|
||||||
|
|
||||||
class BasePluginDeploymentHooksSerializer(object):
|
class BasePluginDeploymentHooksSerializer(object):
|
||||||
|
@ -40,7 +40,7 @@ class BasePluginDeploymentHooksSerializer(object):
|
||||||
|
|
||||||
self.cluster = cluster
|
self.cluster = cluster
|
||||||
self.nodes = nodes
|
self.nodes = nodes
|
||||||
self.role_resolver = role_resolver or LegacyRoleResolver(nodes)
|
self.role_resolver = role_resolver or RoleResolver(nodes)
|
||||||
|
|
||||||
def deployment_tasks(self, plugins, stage):
|
def deployment_tasks(self, plugins, stage):
|
||||||
plugin_tasks = []
|
plugin_tasks = []
|
||||||
|
|
|
@ -35,15 +35,17 @@ def stage_serialize(serializer, graph_tasks):
|
||||||
return tasks
|
return tasks
|
||||||
|
|
||||||
|
|
||||||
def pre_deployment_serialize(orchestrator_graph, cluster, nodes):
|
def pre_deployment_serialize(orchestrator_graph, cluster, nodes,
|
||||||
|
role_resolver=None):
|
||||||
graph_tasks = orchestrator_graph.pre_tasks_serialize(nodes)
|
graph_tasks = orchestrator_graph.pre_tasks_serialize(nodes)
|
||||||
return stage_serialize(
|
return stage_serialize(
|
||||||
plugins_serializers.PluginsPreDeploymentHooksSerializer(
|
plugins_serializers.PluginsPreDeploymentHooksSerializer(
|
||||||
cluster, nodes), graph_tasks)
|
cluster, nodes, role_resolver=role_resolver), graph_tasks)
|
||||||
|
|
||||||
|
|
||||||
def post_deployment_serialize(orchestrator_graph, cluster, nodes):
|
def post_deployment_serialize(orchestrator_graph, cluster, nodes,
|
||||||
|
role_resolver=None):
|
||||||
graph_tasks = orchestrator_graph.post_tasks_serialize(nodes)
|
graph_tasks = orchestrator_graph.post_tasks_serialize(nodes)
|
||||||
return stage_serialize(
|
return stage_serialize(
|
||||||
plugins_serializers.PluginsPostDeploymentHooksSerializer(
|
plugins_serializers.PluginsPostDeploymentHooksSerializer(
|
||||||
cluster, nodes), graph_tasks)
|
cluster, nodes, role_resolver=role_resolver), graph_tasks)
|
||||||
|
|
|
@ -26,7 +26,7 @@ from nailgun.errors import errors
|
||||||
from nailgun.logger import logger
|
from nailgun.logger import logger
|
||||||
from nailgun.orchestrator import plugins_serializers
|
from nailgun.orchestrator import plugins_serializers
|
||||||
from nailgun.orchestrator.tasks_serializer import CreateVMsOnCompute
|
from nailgun.orchestrator.tasks_serializer import CreateVMsOnCompute
|
||||||
from nailgun.orchestrator.tasks_serializer import StandartConfigRolesHook
|
from nailgun.orchestrator.tasks_serializer import StandardConfigRolesHook
|
||||||
from nailgun.orchestrator.tasks_serializer import TaskSerializers
|
from nailgun.orchestrator.tasks_serializer import TaskSerializers
|
||||||
from nailgun.orchestrator.tasks_templates import make_noop_task
|
from nailgun.orchestrator.tasks_templates import make_noop_task
|
||||||
from nailgun.utils.role_resolver import NameMatchingPolicy
|
from nailgun.utils.role_resolver import NameMatchingPolicy
|
||||||
|
@ -34,7 +34,7 @@ from nailgun.utils.role_resolver import NullResolver
|
||||||
from nailgun.utils.role_resolver import RoleResolver
|
from nailgun.utils.role_resolver import RoleResolver
|
||||||
|
|
||||||
|
|
||||||
class NoopSerializer(StandartConfigRolesHook):
|
class NoopSerializer(StandardConfigRolesHook):
|
||||||
"""Serializes tasks that should be skipped by astute."""
|
"""Serializes tasks that should be skipped by astute."""
|
||||||
def should_execute(self):
|
def should_execute(self):
|
||||||
return True
|
return True
|
||||||
|
@ -51,7 +51,7 @@ class NoopSerializer(StandartConfigRolesHook):
|
||||||
yield make_noop_task(uids, self.task)
|
yield make_noop_task(uids, self.task)
|
||||||
|
|
||||||
|
|
||||||
class PluginTaskSerializer(StandartConfigRolesHook):
|
class PluginTaskSerializer(StandardConfigRolesHook):
|
||||||
serializer_class = None
|
serializer_class = None
|
||||||
|
|
||||||
def should_execute(self):
|
def should_execute(self):
|
||||||
|
|
|
@ -23,49 +23,11 @@ import yaml
|
||||||
from nailgun import consts
|
from nailgun import consts
|
||||||
from nailgun.errors import errors
|
from nailgun.errors import errors
|
||||||
from nailgun.expression import Expression
|
from nailgun.expression import Expression
|
||||||
from nailgun.logger import logger
|
|
||||||
from nailgun import objects
|
from nailgun import objects
|
||||||
from nailgun.orchestrator import deployment_serializers
|
from nailgun.orchestrator import deployment_serializers
|
||||||
from nailgun.orchestrator import tasks_templates as templates
|
from nailgun.orchestrator import tasks_templates as templates
|
||||||
from nailgun.settings import settings
|
from nailgun.settings import settings
|
||||||
from nailgun.utils.role_resolver import BaseRoleResolver
|
from nailgun.utils.role_resolver import RoleResolver
|
||||||
|
|
||||||
|
|
||||||
def get_uids_for_roles(nodes, roles):
|
|
||||||
"""Returns list of uids for nodes that matches roles
|
|
||||||
|
|
||||||
:param nodes: list of nodes
|
|
||||||
:param roles: list of roles or consts.TASK_ROLES.all
|
|
||||||
:returns: list of strings
|
|
||||||
"""
|
|
||||||
|
|
||||||
uids = set()
|
|
||||||
|
|
||||||
if roles == consts.TASK_ROLES.all:
|
|
||||||
uids.update([n.uid for n in nodes])
|
|
||||||
elif roles == consts.TASK_ROLES.master:
|
|
||||||
return [consts.MASTER_NODE_UID]
|
|
||||||
elif isinstance(roles, list):
|
|
||||||
for node in nodes:
|
|
||||||
if set(roles) & set(objects.Node.all_roles(node)):
|
|
||||||
uids.add(node.uid)
|
|
||||||
else:
|
|
||||||
logger.warn(
|
|
||||||
'Wrong roles format, `roles` should be a list or "*": %s',
|
|
||||||
roles)
|
|
||||||
|
|
||||||
return list(uids)
|
|
||||||
|
|
||||||
|
|
||||||
class LegacyRoleResolver(BaseRoleResolver):
|
|
||||||
"""The role resolver that implements legacy behaviour."""
|
|
||||||
|
|
||||||
# TODO(bgaifullin): remove this in 9.0
|
|
||||||
def __init__(self, nodes):
|
|
||||||
self.nodes = nodes
|
|
||||||
|
|
||||||
def resolve(self, roles, policy=None):
|
|
||||||
return get_uids_for_roles(self.nodes, roles)
|
|
||||||
|
|
||||||
|
|
||||||
@six.add_metaclass(abc.ABCMeta)
|
@six.add_metaclass(abc.ABCMeta)
|
||||||
|
@ -122,13 +84,13 @@ class PuppetHook(GenericNodeHook):
|
||||||
yield templates.make_puppet_task([self.node['uid']], self.task)
|
yield templates.make_puppet_task([self.node['uid']], self.task)
|
||||||
|
|
||||||
|
|
||||||
class StandartConfigRolesHook(ExpressionBasedTask):
|
class StandardConfigRolesHook(ExpressionBasedTask):
|
||||||
"""Role hooks that serializes task based on config file only."""
|
"""Role hooks that serializes task based on config file only."""
|
||||||
|
|
||||||
def __init__(self, task, cluster, nodes, role_resolver=None):
|
def __init__(self, task, cluster, nodes, role_resolver=None):
|
||||||
super(StandartConfigRolesHook, self).__init__(task, cluster)
|
super(StandardConfigRolesHook, self).__init__(task, cluster)
|
||||||
self.nodes = nodes
|
self.nodes = nodes
|
||||||
self.role_resolver = role_resolver or LegacyRoleResolver(nodes)
|
self.role_resolver = role_resolver or RoleResolver(nodes)
|
||||||
|
|
||||||
def get_uids(self):
|
def get_uids(self):
|
||||||
return self.role_resolver.resolve(
|
return self.role_resolver.resolve(
|
||||||
|
@ -141,7 +103,7 @@ class StandartConfigRolesHook(ExpressionBasedTask):
|
||||||
yield templates.make_generic_task(uids, self.task)
|
yield templates.make_generic_task(uids, self.task)
|
||||||
|
|
||||||
|
|
||||||
class GenericRolesHook(StandartConfigRolesHook):
|
class GenericRolesHook(StandardConfigRolesHook):
|
||||||
|
|
||||||
identity = abc.abstractproperty
|
identity = abc.abstractproperty
|
||||||
|
|
||||||
|
@ -502,4 +464,4 @@ class TaskSerializers(object):
|
||||||
if task['id'] in self._stage_serializers_map:
|
if task['id'] in self._stage_serializers_map:
|
||||||
return self._stage_serializers_map[task['id']]
|
return self._stage_serializers_map[task['id']]
|
||||||
else:
|
else:
|
||||||
return StandartConfigRolesHook
|
return StandardConfigRolesHook
|
||||||
|
|
|
@ -28,9 +28,6 @@ from sqlalchemy import not_
|
||||||
from sqlalchemy.orm import ColumnProperty
|
from sqlalchemy.orm import ColumnProperty
|
||||||
from sqlalchemy.orm import object_mapper
|
from sqlalchemy.orm import object_mapper
|
||||||
|
|
||||||
import nailgun.rpc as rpc
|
|
||||||
|
|
||||||
from nailgun import objects
|
|
||||||
|
|
||||||
from nailgun import consts
|
from nailgun import consts
|
||||||
from nailgun.db import db
|
from nailgun.db import db
|
||||||
|
@ -42,6 +39,7 @@ from nailgun.errors import errors
|
||||||
from nailgun.logger import logger
|
from nailgun.logger import logger
|
||||||
from nailgun.network.checker import NetworkCheck
|
from nailgun.network.checker import NetworkCheck
|
||||||
from nailgun.network.manager import NetworkManager
|
from nailgun.network.manager import NetworkManager
|
||||||
|
from nailgun import objects
|
||||||
from nailgun.orchestrator import deployment_graph
|
from nailgun.orchestrator import deployment_graph
|
||||||
from nailgun.orchestrator import deployment_serializers
|
from nailgun.orchestrator import deployment_serializers
|
||||||
from nailgun.orchestrator import provisioning_serializers
|
from nailgun.orchestrator import provisioning_serializers
|
||||||
|
@ -49,11 +47,13 @@ from nailgun.orchestrator import stages
|
||||||
from nailgun.orchestrator import task_based_deployment
|
from nailgun.orchestrator import task_based_deployment
|
||||||
from nailgun.orchestrator import tasks_serializer
|
from nailgun.orchestrator import tasks_serializer
|
||||||
from nailgun.orchestrator import tasks_templates
|
from nailgun.orchestrator import tasks_templates
|
||||||
|
import nailgun.rpc as rpc
|
||||||
from nailgun.settings import settings
|
from nailgun.settings import settings
|
||||||
from nailgun.task.fake import FAKE_THREADS
|
from nailgun.task.fake import FAKE_THREADS
|
||||||
from nailgun.task.helpers import TaskHelper
|
from nailgun.task.helpers import TaskHelper
|
||||||
from nailgun.utils import logs as logs_utils
|
from nailgun.utils import logs as logs_utils
|
||||||
from nailgun.utils.restrictions import VmwareAttributesRestriction
|
from nailgun.utils.restrictions import VmwareAttributesRestriction
|
||||||
|
from nailgun.utils.role_resolver import RoleResolver
|
||||||
from nailgun.utils.zabbix import ZabbixManager
|
from nailgun.utils.zabbix import ZabbixManager
|
||||||
|
|
||||||
|
|
||||||
|
@ -209,12 +209,15 @@ class DeploymentTask(object):
|
||||||
# NOTE(dshulyak) At this point parts of the orchestration can be empty,
|
# NOTE(dshulyak) At this point parts of the orchestration can be empty,
|
||||||
# it should not cause any issues with deployment/progress and was
|
# it should not cause any issues with deployment/progress and was
|
||||||
# done by design
|
# done by design
|
||||||
|
role_resolver = RoleResolver(nodes)
|
||||||
serialized_cluster = deployment_serializers.serialize(
|
serialized_cluster = deployment_serializers.serialize(
|
||||||
orchestrator_graph, task.cluster, nodes)
|
orchestrator_graph, task.cluster, nodes)
|
||||||
pre_deployment = stages.pre_deployment_serialize(
|
pre_deployment = stages.pre_deployment_serialize(
|
||||||
orchestrator_graph, task.cluster, nodes)
|
orchestrator_graph, task.cluster, nodes,
|
||||||
|
role_resolver=role_resolver)
|
||||||
post_deployment = stages.post_deployment_serialize(
|
post_deployment = stages.post_deployment_serialize(
|
||||||
orchestrator_graph, task.cluster, nodes)
|
orchestrator_graph, task.cluster, nodes,
|
||||||
|
role_resolver=role_resolver)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'deployment_info': serialized_cluster,
|
'deployment_info': serialized_cluster,
|
||||||
|
|
|
@ -450,7 +450,7 @@ class TestDeploymentTaskSerializer(BaseUnitTest):
|
||||||
factory.get_stage_serializer(
|
factory.get_stage_serializer(
|
||||||
self.make_task('upload_repos')
|
self.make_task('upload_repos')
|
||||||
),
|
),
|
||||||
task_based_deployment.StandartConfigRolesHook
|
task_based_deployment.StandardConfigRolesHook
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue