Class: Puppet::CatalogDiff::Formater

Inherits:
Object
  • Object
show all
Defined in:
lib/puppet/catalog-diff/formater.rb

Overview

Formater provides methods to format resources into diff-able Puppet DSL

Instance Method Summary collapse

Constructor Details

#initializeFormater

Returns a new instance of Formater.



7
# File 'lib/puppet/catalog-diff/formater.rb', line 7

def initialize; end

Instance Method Details

#catalog_summary_header(header, number) ⇒ Object



69
70
71
72
# File 'lib/puppet/catalog-diff/formater.rb', line 69

def catalog_summary_header(header, number)
  header_spacing = ' ' * (79 - ("Total #{header}".length + number.to_s.length))
  "\n#{'-' * 80}\n\033[1mTotal #{header.to_s.tr('_', ' ').capitalize}#{header_spacing}#{number} \033[0m\n#{'-' * 80}\n"
end

#format_array(v, indent = '', do_indent = false, comma = '') ⇒ Object



16
17
18
19
20
21
22
23
24
# File 'lib/puppet/catalog-diff/formater.rb', line 16

def format_array(v, indent = '', do_indent = false, comma = '')
  str = ''
  str << indent if do_indent
  str << '[' << "\n"
  v.each do |val|
    str << format_value(val, "#{indent}     ", true, ',')
  end
  str << "\t     #{indent}    ]" << "\n" << comma
end

#format_hash(v, indent = '', do_indent = false, comma = '') ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/puppet/catalog-diff/formater.rb', line 26

def format_hash(v, indent = '', do_indent = false, comma = '')
  str = ''
  str << indent if do_indent
  str << '{' << "\n"
  keys = (v.sort_by { |key, _val| key }).to_h
  keys.each_pair do |key, val|
    str << "\t     #{indent}     #{key} => "
    str << format_value(val, "#{indent}     ", true, ',', key)
  end
  str << "\t     #{indent}    }" << "\n" << comma
end

#format_simple(v, indent = '', do_indent = false, comma = '') ⇒ Object



9
10
11
12
13
14
# File 'lib/puppet/catalog-diff/formater.rb', line 9

def format_simple(v, indent = '', do_indent = false, comma = '')
  str = ''
  str << indent if do_indent
  v = "\"#{v}\"" unless [Integer, Float, TrueClass, FalseClass].include?(v.class)
  str << v.to_s << comma << "\n"
end

#format_value(v, indent = '', do_indent = false, comma = '', k = nil) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/puppet/catalog-diff/formater.rb', line 38

def format_value(v, indent = '', do_indent = false, comma = '', k = nil)
  case v
  when Array
    format_array(v, indent, do_indent, comma)
  when Hash
    format_hash(v, indent, do_indent, comma)
  else
    v = v[:checksum] if k == :content && v.is_a?(Hash)
    format_simple(v, indent, do_indent, comma)
  end
end

#key_pair(header, value) ⇒ Object



137
138
139
# File 'lib/puppet/catalog-diff/formater.rb', line 137

def key_pair(header, value)
  "\033[1m#{header.to_s.tr('_', ' ').capitalize}\033[0m:\t#{value}"
end

#list(header, value) ⇒ Object



95
96
97
98
99
100
# File 'lib/puppet/catalog-diff/formater.rb', line 95

def list(header, value)
  list = value.map do |k|
    "\t#{k}"
  end.join("\n")
  "\033[1m#{header.to_s.tr('_', ' ').capitalize}\033[0m:\n#{list}"
end

#list_error_hash(header, value) ⇒ Object



114
115
116
117
118
119
120
121
122
123
# File 'lib/puppet/catalog-diff/formater.rb', line 114

def list_error_hash(header, value)
  number = 0
  list = value.map do |hash|
    number += 1
    hash.map do |key, val|
      "\033[1m#{number}. #{val}\033[0m\n\t#{key}\n"
    end
  end.join("\n")
  "\n#{'-' * 80}\n\033[1m#{header.to_s.tr('_', ' ').capitalize}\033[0m:\n#{'-' * 80}\n#{list}"
end

#list_file_hash(header, value) ⇒ Object



125
126
127
128
129
130
131
132
133
134
135
# File 'lib/puppet/catalog-diff/formater.rb', line 125

def list_file_hash(header, value)
  number = 0
  list = value.map do |hash|
    number += 1
    hash.map do |key, val|
      header_spacing = ' ' * (79 - ('    Affected nodes'.length + val.to_s.length))
      "#{number}. #{key}\n    Affected nodes:#{header_spacing}#{val}"
    end
  end.join("\n")
  "\n#{'-' * 80}\n\033[1m#{header.to_s.tr('_', ' ').capitalize}\033[0m:\n#{'-' * 80}\n#{list}"
end

#list_hash(header, value, mark = '%') ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
# File 'lib/puppet/catalog-diff/formater.rb', line 102

def list_hash(header, value, mark = '%')
  number = 0
  list = value.map do |hash|
    number += 1
    hash.map do |key, val|
      header_spacing = ' ' * (79 - ("#{number}. #{key}".length + (((mark == '%' && ('%.2f' % val)) || val)).to_s.to_s.length))
      "#{number}. #{key}#{header_spacing}#{(mark == '%' && ('%.2f' % val)) || val}#{mark}"
    end
  end.join("\n")
  "\033[1m#{header.to_s.tr('_', ' ').capitalize}\033[0m:\n#{list}"
end

#node_summary_header(node, summary, key) ⇒ Object



64
65
66
67
# File 'lib/puppet/catalog-diff/formater.rb', line 64

def node_summary_header(node, summary, key)
  header_spacing = ' ' * (79 - (node.length + summary[key].to_s.length))
  "\n#{'-' * 80}\n\033[1m#{node}#{header_spacing}#{summary[key]}% \033[0m\n#{'-' * 80}\n"
end

#params_diff(header, resource_id, resource) ⇒ Object



84
85
86
87
88
89
90
91
92
93
# File 'lib/puppet/catalog-diff/formater.rb', line 84

def params_diff(header, resource_id, resource)
  if resource.is_a?(String)
    "\033[1m#{header.to_s.tr('_', ' ').capitalize}\033[0m:\n\t#{resource_id.capitalize}:\n#{resource}"
  else
    params = resource.map do |k, v|
      "\t#{k} = #{v}"
    end.join("\n")
    "\033[1m#{header.to_s.tr('_', ' ').capitalize}\033[0m:\n\t#{resource_id.capitalize}:\n#{params}"
  end
end

#render_pull(output) ⇒ Object



141
142
143
144
145
146
147
148
149
# File 'lib/puppet/catalog-diff/formater.rb', line 141

def render_pull(output)
  output.map do |key, value|
    if value.is_a?(Array) && key == :failed_to_compile_files
      list_file_hash('Failed to compiled sorted by file', value)
    elsif value.is_a?(Array) && key == :example_compile_errors
      list_error_hash(key, value)
    end
  end.join("\n") + node_summary_header("#{output[:failed_nodes_total]} out of #{output[:total_nodes]} nodes failed to compile. failure rate:", output, :total_percentage).to_s
end

#resource_reference(header, resource_id, resource) ⇒ Object



74
75
76
77
# File 'lib/puppet/catalog-diff/formater.rb', line 74

def resource_reference(header, resource_id, resource)
  dsl = resource_to_string(resource)
  "\033[1m#{header.to_s.tr('_', ' ').capitalize}\033[0m:\n\t#{resource_id.capitalize}:\n\n#{dsl}"
end

#resource_to_string(resource) ⇒ Object

creates a string representation of a resource that looks like Puppet code



51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/puppet/catalog-diff/formater.rb', line 51

def resource_to_string(resource)
  str = ''
  str << "\t#{resource[:type].downcase}" << '{"' << resource[:title].to_s << '":' << "\n"
  params = (resource[:parameters].sort_by { |k, _v| k }).to_h
  params.each_pair do |k, v|
    str << "\t     #{k} => "
    indent = ' ' * k.to_s.size
    str << format_value(v, indent, false, '', k)
  end
  str << "\t}\n"
  str
end

#string_diff(header, resource_id, resource) ⇒ Object



79
80
81
82
# File 'lib/puppet/catalog-diff/formater.rb', line 79

def string_diff(header, resource_id, resource)
  list = "\t#{resource_id.capitalize}\n" + resource.map(&:to_s).join("\n")
  "\033[1m#{header.to_s.tr('_', ' ').capitalize}\033[0m:\n#{list}"
end