Module: Dopi::CommandParser::Output

Includes:
DopCommon::Validator
Included in:
Dopi::Command::Custom, Dopi::Command::Ssh::Custom, Dopi::Command::Winrm::Cmd, PuppetRun
Defined in:
lib/dopi/command_parser/output.rb

Instance Method Summary collapse

Instance Method Details

#check_output(raw_output) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/dopi/command_parser/output.rb', line 25

def check_output(raw_output)
  if error_patterns.empty? && warning_patterns.empty?
    log(:debug, "No patterns defined to parse the output")
    return true
  end

  output_ok = true

  error_patterns.each do |pattern|
    lines_with_matches(raw_output, pattern).each do |line_with_error|
      log(:error, line_with_error)
      output_ok = false
    end
  end

  warning_patterns.each do |pattern|
    lines_with_matches(raw_output, pattern).each do |line_with_warning|
      if fail_on_warning
        log(:error, line_with_warning)
        output_ok = false
      else
        log(:warn, line_with_warning)
      end
    end
  end

  output_ok
end

#error_patternsObject



62
63
64
65
# File 'lib/dopi/command_parser/output.rb', line 62

def error_patterns
  @error_patterns ||= parser_patterns_valid?(parse_output[:error]) ?
    [ parse_output[:error] ].flatten : []
end

#fail_on_warningObject



72
73
74
75
# File 'lib/dopi/command_parser/output.rb', line 72

def fail_on_warning
  @fail_on_warning ||= fail_on_warning_valid? ?
    hash[:fail_on_warning] : false
end

#lines_with_matches(raw_output, pattern) ⇒ Object



77
78
79
80
# File 'lib/dopi/command_parser/output.rb', line 77

def lines_with_matches(raw_output, pattern)
  regexp = Regexp.new(pattern)
  raw_output.lines.find_all{ |line| line.scan(regexp).any? }
end

#parse_outputObject



54
55
56
57
58
59
60
# File 'lib/dopi/command_parser/output.rb', line 54

def parse_output
  if parse_output_valid?
    Hash[hash[:parse_output].map{|k,v| [k.to_sym, v]}]
  else
    respond_to?(:parse_output_defaults) ? parse_output_defaults : {}
  end
end

#validate_outputObject



16
17
18
19
20
21
22
23
# File 'lib/dopi/command_parser/output.rb', line 16

def validate_output
  log_validation_method('parse_output_valid?', CommandParsingError)
  unless parse_output.empty?
    log_validation_method('error_patterns_valid?', CommandParsingError)
    log_validation_method('warning_patterns_valid?', CommandParsingError)
  end
  log_validation_method('fail_on_warning_valid?', CommandParsingError)
end

#warning_patternsObject



67
68
69
70
# File 'lib/dopi/command_parser/output.rb', line 67

def warning_patterns
  @warning_patterns ||= parser_patterns_valid?(parse_output[:warning]) ?
    [ parse_output[:warning] ].flatten : []
end