def execute()

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))