in gcpdiag/runbook/gce/generalized_steps.py [0:0]
def execute(self):
"""Analyzing serial logs for predefined patterns."""
# All kernel failures.
good_pattern_detected = False
bad_pattern_detected = False
serial_log_file_content = []
instance_serial_logs = None
vm = gce.get_instance(
project_id=self.project_id,
zone=self.zone,
instance_name=self.instance_name,
)
if self.serial_console_file:
for files in self.serial_console_file.split(','):
with open(files, encoding='utf-8') as file:
serial_log_file_content = file.readlines()
serial_log_file_content = serial_log_file_content + serial_log_file_content
else:
instance_serial_logs = gce.get_instance_serial_port_output(
project_id=self.project_id,
zone=self.zone,
instance_name=self.instance_name)
if instance_serial_logs or serial_log_file_content:
instance_serial_log = instance_serial_logs.contents if \
instance_serial_logs else serial_log_file_content
if hasattr(self, 'positive_pattern'):
good_pattern_detected = util.search_pattern_in_serial_logs(
patterns=self.positive_pattern,
contents=instance_serial_log,
operator=self.positive_pattern_operator)
op.add_metadata('Positive patterns searched in serial logs',
self.positive_pattern)
if good_pattern_detected:
op.add_ok(vm,
reason=op.prep_msg(
op.SUCCESS_REASON,
full_resource_path=vm.full_path,
start_time=op.get(flags.START_TIME),
end_time=op.get(flags.END_TIME),
))
if hasattr(self, 'negative_pattern'):
# Check for bad patterns
bad_pattern_detected = util.search_pattern_in_serial_logs(
patterns=self.negative_pattern,
contents=instance_serial_log,
operator=self.negative_pattern_operator)
op.add_metadata('Negative patterns searched in serial logs',
self.negative_pattern)
if bad_pattern_detected:
op.add_failed(vm,
reason=op.prep_msg(op.FAILURE_REASON,
start_time=op.get(flags.START_TIME),
end_time=op.get(flags.END_TIME),
full_resource_path=vm.full_path,
instance_name=vm.name),
remediation=op.prep_msg(
op.FAILURE_REMEDIATION,
full_resource_path=vm.full_path,
start_time=op.get(flags.START_TIME),
end_time=op.get(flags.END_TIME)))
if hasattr(self, 'positive_pattern') and not hasattr(
self, 'negative_pattern') and good_pattern_detected is False:
op.add_uncertain(
vm,
reason=op.prep_msg(op.UNCERTAIN_REASON,
full_resource_path=vm.full_path,
start_time=op.get(flags.START_TIME),
end_time=op.get(flags.END_TIME)),
# uncertain uses the same remediation steps as failed
remediation=op.prep_msg(op.FAILURE_REMEDIATION,
full_resource_path=vm.full_path,
start_time=op.get(flags.START_TIME),
end_time=op.get(flags.END_TIME)))
elif hasattr(self, 'negative_pattern') and not hasattr(
self, 'positive_pattern') and bad_pattern_detected is False:
op.add_uncertain(
vm,
reason=op.prep_msg(op.UNCERTAIN_REASON,
full_resource_path=vm.full_path),
# uncertain uses the same remediation steps as failed
remediation=op.prep_msg(op.FAILURE_REMEDIATION,
full_resource_path=vm.full_path,
start_time=op.get(flags.START_TIME),
end_time=op.get(flags.END_TIME)))
elif (hasattr(self, 'positive_pattern') and
good_pattern_detected is False) and (hasattr(
self, 'negative_pattern') and bad_pattern_detected is False):
op.add_uncertain(
vm,
reason=op.prep_msg(op.UNCERTAIN_REASON,
full_resource_path=vm.full_path,
start_time=op.get(flags.START_TIME),
end_time=op.get(flags.END_TIME)),
# uncertain uses the same remediation steps as failed
remediation=op.prep_msg(op.FAILURE_REMEDIATION,
full_resource_path=vm.full_path,
start_time=op.get(flags.START_TIME),
end_time=op.get(flags.END_TIME)))
else:
op.add_skipped(None, reason=op.prep_msg(op.SKIPPED_REASON))