Make device alias resolution optional
When compiling an effective site design, make the step for resolving device aliases optional as only a few tasks need this information but it takes a large amount of the time. Change-Id: I9f1090de0ec26887217be80567367547306b3905
This commit is contained in:
parent
754d4b45b0
commit
541b2d413c
|
@ -1281,7 +1281,7 @@ class ApplyNodeNetworking(BaseMaasAction):
|
||||||
self.task.save()
|
self.task.save()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
site_design = self._load_site_design()
|
site_design = self._load_site_design(resolve_aliases=True)
|
||||||
except errors.OrchestratorError:
|
except errors.OrchestratorError:
|
||||||
self.task.add_status_msg(
|
self.task.add_status_msg(
|
||||||
msg="Error loading site design.",
|
msg="Error loading site design.",
|
||||||
|
@ -1819,7 +1819,7 @@ class ApplyNodeStorage(BaseMaasAction):
|
||||||
self.task.save()
|
self.task.save()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
site_design = self._load_site_design()
|
site_design = self._load_site_design(resolve_aliases=True)
|
||||||
except errors.OrchestratorError:
|
except errors.OrchestratorError:
|
||||||
self.task.add_status_msg(
|
self.task.add_status_msg(
|
||||||
msg="Error loading site design.",
|
msg="Error loading site design.",
|
||||||
|
|
|
@ -49,7 +49,7 @@ class BaremetalNode(drydock_provisioner.objects.hostprofile.HostProfile):
|
||||||
|
|
||||||
# Compile the applied version of this model sourcing referenced
|
# Compile the applied version of this model sourcing referenced
|
||||||
# data from the passed site design
|
# data from the passed site design
|
||||||
def compile_applied_model(self, site_design, state_manager):
|
def compile_applied_model(self, site_design, state_manager, resolve_aliases=False):
|
||||||
self.logger.debug("Applying host profile to node %s" % self.name)
|
self.logger.debug("Applying host profile to node %s" % self.name)
|
||||||
self.apply_host_profile(site_design)
|
self.apply_host_profile(site_design)
|
||||||
self.logger.debug("Applying hardware profile to node %s" % self.name)
|
self.logger.debug("Applying hardware profile to node %s" % self.name)
|
||||||
|
@ -57,8 +57,9 @@ class BaremetalNode(drydock_provisioner.objects.hostprofile.HostProfile):
|
||||||
self.source = hd_fields.ModelSource.Compiled
|
self.source = hd_fields.ModelSource.Compiled
|
||||||
self.logger.debug("Resolving kernel parameters on node %s" % self.name)
|
self.logger.debug("Resolving kernel parameters on node %s" % self.name)
|
||||||
self.resolve_kernel_params(site_design)
|
self.resolve_kernel_params(site_design)
|
||||||
self.logger.debug("Resolving device aliases on node %s" % self.name)
|
if resolve_aliases:
|
||||||
self.apply_logicalnames(site_design, state_manager)
|
self.logger.debug("Resolving device aliases on node %s" % self.name)
|
||||||
|
self.apply_logicalnames(site_design, state_manager)
|
||||||
return
|
return
|
||||||
|
|
||||||
def apply_host_profile(self, site_design):
|
def apply_host_profile(self, site_design):
|
||||||
|
|
|
@ -131,15 +131,18 @@ class BaseAction(object):
|
||||||
self.task.align_result()
|
self.task.align_result()
|
||||||
return
|
return
|
||||||
|
|
||||||
def _load_site_design(self):
|
def _load_site_design(self, resolve_aliases=False):
|
||||||
"""Load the site design from this action's task.
|
"""Load the site design from this action's task.
|
||||||
|
|
||||||
The design_ref in the task can be resolved to a set of design documents
|
The design_ref in the task can be resolved to a set of design documents
|
||||||
that reflect the site design to be operated on. Load this design for use
|
that reflect the site design to be operated on. Load this design for use
|
||||||
by this action.
|
by this action.
|
||||||
|
|
||||||
|
:param resolve_aliases: boolean on whether to resolve device aliases, defaults
|
||||||
|
to False
|
||||||
"""
|
"""
|
||||||
design_status, site_design = self.orchestrator.get_effective_site(
|
design_status, site_design = self.orchestrator.get_effective_site(
|
||||||
self.task.design_ref)
|
self.task.design_ref, resolve_aliases=resolve_aliases)
|
||||||
|
|
||||||
if design_status is None or design_status.status == hd_fields.ActionResult.Failure:
|
if design_status is None or design_status.status == hd_fields.ActionResult.Failure:
|
||||||
raise errors.OrchestratorError("Site design failed load.")
|
raise errors.OrchestratorError("Site design failed load.")
|
||||||
|
|
|
@ -241,7 +241,7 @@ class Orchestrator(object):
|
||||||
|
|
||||||
return new_task
|
return new_task
|
||||||
|
|
||||||
def compute_model_inheritance(self, site_design):
|
def compute_model_inheritance(self, site_design, resolve_aliases=False):
|
||||||
"""Compute inheritance of the design model.
|
"""Compute inheritance of the design model.
|
||||||
|
|
||||||
Given a fully populated Site model, compute the effective
|
Given a fully populated Site model, compute the effective
|
||||||
|
@ -254,7 +254,9 @@ class Orchestrator(object):
|
||||||
for n in nodes or []:
|
for n in nodes or []:
|
||||||
try:
|
try:
|
||||||
n.compile_applied_model(
|
n.compile_applied_model(
|
||||||
site_design, state_manager=self.state_manager)
|
site_design,
|
||||||
|
state_manager=self.state_manager,
|
||||||
|
resolve_aliases=resolve_aliases)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
node_failed.append(n)
|
node_failed.append(n)
|
||||||
self.logger.error(
|
self.logger.error(
|
||||||
|
@ -283,7 +285,7 @@ class Orchestrator(object):
|
||||||
|
|
||||||
return status, site_design
|
return status, site_design
|
||||||
|
|
||||||
def get_effective_site(self, design_ref):
|
def get_effective_site(self, design_ref, resolve_aliases=False):
|
||||||
"""Ingest design data and compile the effective model of the design.
|
"""Ingest design data and compile the effective model of the design.
|
||||||
|
|
||||||
Return a tuple of the processing status and the populated instance
|
Return a tuple of the processing status and the populated instance
|
||||||
|
@ -297,7 +299,7 @@ class Orchestrator(object):
|
||||||
try:
|
try:
|
||||||
status, site_design = self.get_described_site(design_ref)
|
status, site_design = self.get_described_site(design_ref)
|
||||||
if status.status == hd_fields.ValidationResult.Success:
|
if status.status == hd_fields.ValidationResult.Success:
|
||||||
self.compute_model_inheritance(site_design)
|
self.compute_model_inheritance(site_design, resolve_aliases=resolve_aliases)
|
||||||
self.compute_bootaction_targets(site_design)
|
self.compute_bootaction_targets(site_design)
|
||||||
self.render_route_domains(site_design)
|
self.render_route_domains(site_design)
|
||||||
status = val.validate_design(site_design, result_status=status)
|
status = val.validate_design(site_design, result_status=status)
|
||||||
|
|
|
@ -140,10 +140,9 @@ class TestClass(object):
|
||||||
drydock_state.get_build_data = Mock(side_effect=side_effect)
|
drydock_state.get_build_data = Mock(side_effect=side_effect)
|
||||||
|
|
||||||
design_status, design_data = deckhand_orchestrator.get_effective_site(
|
design_status, design_data = deckhand_orchestrator.get_effective_site(
|
||||||
design_ref)
|
design_ref, resolve_aliases=True)
|
||||||
|
|
||||||
nodes = design_data.baremetal_nodes
|
nodes = design_data.baremetal_nodes
|
||||||
nodes[0].apply_logicalnames(design_data, state_manager=drydock_state)
|
|
||||||
|
|
||||||
expected = {
|
expected = {
|
||||||
'primary_boot': 'sda',
|
'primary_boot': 'sda',
|
||||||
|
|
Loading…
Reference in New Issue