Merge "Improve error logging during validation"

This commit is contained in:
Zuul 2019-10-11 18:03:02 +00:00 committed by Gerrit Code Review
commit b7d4b12116
3 changed files with 35 additions and 11 deletions

View File

@ -259,8 +259,6 @@ class Orchestrator(object):
Given a fully populated Site model, compute the effective Given a fully populated Site model, compute the effective
design by applying inheritance and references design by applying inheritance and references
""" """
node_failed = []
try: try:
nodes = site_design.baremetal_nodes nodes = site_design.baremetal_nodes
for n in nodes or []: for n in nodes or []:
@ -270,13 +268,9 @@ class Orchestrator(object):
state_manager=self.state_manager, state_manager=self.state_manager,
resolve_aliases=resolve_aliases) resolve_aliases=resolve_aliases)
except Exception as ex: except Exception as ex:
node_failed.append(n)
self.logger.debug( self.logger.debug(
"Failed to build applied model for node %s.", n.name, exc_info=ex) "Failed to build applied model for node %s.", n.name, exc_info=ex)
if node_failed: raise ex
raise errors.DesignError(
"Failed to build applied model for %s" % ",".join(
[x.name for x in node_failed]))
except AttributeError: except AttributeError:
self.logger.debug( self.logger.debug(
"Model inheritance skipped, no node definitions in site design." "Model inheritance skipped, no node definitions in site design."
@ -653,8 +647,8 @@ class Orchestrator(object):
for n in site_design.networks: for n in site_design.networks:
if n.routedomain is not None: if n.routedomain is not None:
if n.routedomain not in routedomains: if n.routedomain not in routedomains:
self.logger.info("Adding routedomain %s to render map." self.logger.debug("Adding routedomain %s to render map."
% n.routedomain) % n.routedomain)
routedomains[n.routedomain] = list() routedomains[n.routedomain] = list()
routedomains[n.routedomain].append(n) routedomains[n.routedomain].append(n)
for rd, nl in routedomains.items(): for rd, nl in routedomains.items():

View File

@ -36,12 +36,30 @@ class PlatformSelection(Validators):
) )
return return
valid_images = node_driver.get_available_images() try:
valid_images = node_driver.get_available_images()
except Exception:
msg = ("Platform validation: Could not load images from driver, skipping"
"image and kernel selection validation.")
self.report_warn(
msg, [],
"Cannot validate platform selection without accessing the node provisioner."
)
return
valid_kernels = dict() valid_kernels = dict()
for i in valid_images: for i in valid_images:
valid_kernels[i] = node_driver.get_available_kernels(i) try:
valid_kernels[i] = node_driver.get_available_kernels(i)
except Exception:
msg = ("Platform validation: Could not load kernels from driver, skipping"
"image and kernel selection validation.")
self.report_warn(
msg, [],
"Cannot validate platform selection without accessing the node provisioner."
)
return
node_list = site_design.baremetal_nodes or [] node_list = site_design.baremetal_nodes or []

View File

@ -13,15 +13,24 @@
# limitations under the License. # limitations under the License.
"""Business Logic Validation""" """Business Logic Validation"""
import logging
from drydock_provisioner import objects from drydock_provisioner import objects
from drydock_provisioner.objects import fields as hd_fields from drydock_provisioner.objects import fields as hd_fields
import drydock_provisioner.config as config
class Validators: class Validators:
def __init__(self, long_name, name): def __init__(self, long_name, name):
self.name = name self.name = name
self.long_name = long_name self.long_name = long_name
self.reset_message_list() self.reset_message_list()
try:
logger_name = config.config_mgr.conf.logging.global_logger_name
except Exception:
logger_name = "drydock"
self.logger = logging.getLogger(logger_name)
def report_msg(self, msg, docs, diagnostic, error, level): def report_msg(self, msg, docs, diagnostic, error, level):
"""Add a validation message to the result list. """Add a validation message to the result list.
@ -43,14 +52,17 @@ class Validators:
self.messages.append(msg_obj) self.messages.append(msg_obj)
def report_error(self, msg, docs, diagnostic): def report_error(self, msg, docs, diagnostic):
self.logger.info("Design Validation Error: %s", msg)
self.report_msg(msg, docs, diagnostic, True, self.report_msg(msg, docs, diagnostic, True,
hd_fields.MessageLevels.ERROR) hd_fields.MessageLevels.ERROR)
def report_warn(self, msg, docs, diagnostic): def report_warn(self, msg, docs, diagnostic):
self.logger.info("Design Validation Error: %s", msg)
self.report_msg(msg, docs, diagnostic, False, self.report_msg(msg, docs, diagnostic, False,
hd_fields.MessageLevels.WARN) hd_fields.MessageLevels.WARN)
def report_info(self, msg, docs, diagnostic): def report_info(self, msg, docs, diagnostic):
self.logger.debug("Design Validation Info: %s", msg)
self.report_msg(msg, docs, diagnostic, False, self.report_msg(msg, docs, diagnostic, False,
hd_fields.MessageLevels.INFO) hd_fields.MessageLevels.INFO)