Class: Chef::Formatters::Base

Inherits:
EventDispatch::Base show all
Includes:
ErrorMapper
Defined in:
lib/chef/formatters/base.rb

Overview

== Formatters::Base Base class that all formatters should inherit from.

Direct Known Subclasses

Doc, Minimal, NullFormatter

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ErrorMapper

cookbook_resolution_failed, cookbook_sync_failed, file_load_failed, node_load_failed, registration_failed, resource_failed, run_list_expand_failed

Methods inherited from EventDispatch::Base

#attribute_changed, #attribute_load_complete, #attribute_load_start, #audit_phase_complete, #audit_phase_failed, #audit_phase_start, #control_example_failure, #control_example_success, #control_group_started, #converge_complete, #converge_failed, #converge_start, #cookbook_clean_complete, #cookbook_clean_start, #cookbook_gem_failed, #cookbook_gem_finished, #cookbook_gem_installing, #cookbook_gem_start, #cookbook_gem_using, #cookbook_resolution_complete, #cookbook_resolution_start, #cookbook_sync_complete, #cookbook_sync_start, #definition_load_complete, #definition_load_start, #handler_executed, #handlers_completed, #handlers_start, #library_load_complete, #library_load_start, #lwrp_load_complete, #lwrp_load_start, #msg, #node_load_completed, #node_load_start, #ohai_completed, #ohai_plugin_file_load_failed, #ohai_plugin_file_loaded, #ohai_plugin_load_complete, #ohai_plugin_load_start, #policyfile_loaded, #provider_requirement_failed, #recipe_load_complete, #recipe_load_start, #registration_completed, #registration_start, #removed_cookbook_file, #resource_action_start, #resource_bypassed, #resource_completed, #resource_current_state_load_bypassed, #resource_current_state_loaded, #resource_failed_retriable, #resource_skipped, #resource_up_to_date, #resource_update_applied, #resource_update_progress, #resource_updated, #run_completed, #run_failed, #run_list_expanded, #run_start, #run_started, #skipping_registration, #stream_closed, #stream_opened, #stream_output, #synchronized_cookbook, #updated_cookbook_file, #whyrun_assumption

Constructor Details

#initialize(out, err) ⇒ Base


74
75
76
# File 'lib/chef/formatters/base.rb', line 74

def initialize(out, err)
  @output = IndentableOutputStream.new(out, err)
end

Instance Attribute Details

#errObject (readonly)

Returns the value of attribute err


71
72
73
# File 'lib/chef/formatters/base.rb', line 71

def err
  @err
end

#outObject (readonly)

Returns the value of attribute out


70
71
72
# File 'lib/chef/formatters/base.rb', line 70

def out
  @out
end

#outputObject (readonly)

Returns the value of attribute output


72
73
74
# File 'lib/chef/formatters/base.rb', line 72

def output
  @output
end

Class Method Details

.cli_name(name) ⇒ Object


66
67
68
# File 'lib/chef/formatters/base.rb', line 66

def self.cli_name(name)
  Chef::Formatters.register(name, self)
end

Instance Method Details

#attribute_file_load_failed(path, exception) ⇒ Object

Delegates to #file_load_failed


191
192
193
# File 'lib/chef/formatters/base.rb', line 191

def attribute_file_load_failed(path, exception)
  file_load_failed(path, exception)
end

#attribute_file_loaded(path) ⇒ Object

Delegates to #file_loaded


186
187
188
# File 'lib/chef/formatters/base.rb', line 186

def attribute_file_loaded(path)
  file_loaded(path)
end

#cookbook_resolution_failed(expanded_run_list, exception) ⇒ Object


128
129
130
131
# File 'lib/chef/formatters/base.rb', line 128

def cookbook_resolution_failed(expanded_run_list, exception)
  description = ErrorMapper.cookbook_resolution_failed(expanded_run_list, exception)
  display_error(description)
end

#cookbook_sync_failed(cookbooks, exception) ⇒ Object


133
134
135
136
# File 'lib/chef/formatters/base.rb', line 133

def cookbook_sync_failed(cookbooks, exception)
  description = ErrorMapper.cookbook_sync_failed(cookbooks, exception)
  display_error(description)
end

#definition_file_load_failed(path, exception) ⇒ Object

Delegates to #file_load_failed


201
202
203
# File 'lib/chef/formatters/base.rb', line 201

def definition_file_load_failed(path, exception)
  file_load_failed(path, exception)
end

#definition_file_loaded(path) ⇒ Object

Delegates to #file_loaded


196
197
198
# File 'lib/chef/formatters/base.rb', line 196

def definition_file_loaded(path)
  file_loaded(path)
end

#deprecation(message, location = caller(2..2)[0]) ⇒ Object


215
216
217
218
219
220
221
222
223
# File 'lib/chef/formatters/base.rb', line 215

def deprecation(message, location = caller(2..2)[0])
  out = if is_structured_deprecation?(message)
          message.inspect
        else
          "#{message} at #{location}"
        end

  Chef::Log.deprecation(out)
end

#display_error(description) ⇒ Object

Input: a Formatters::ErrorDescription object. Outputs error to STDOUT.


107
108
109
110
# File 'lib/chef/formatters/base.rb', line 107

def display_error(description)
  puts("")
  description.display(output)
end

#file_load_failed(path, exception) ⇒ Object

Generic callback for any attribute/library/lwrp/recipe file throwing an exception when loaded. Default behavior is to use CompileErrorInspector to print contextual info about the failure.


155
156
157
158
# File 'lib/chef/formatters/base.rb', line 155

def file_load_failed(path, exception)
  description = ErrorMapper.file_load_failed(path, exception)
  display_error(description)
end

#file_loaded(path) ⇒ Object

Generic callback for any attribute/library/lwrp/recipe file in a cookbook getting loaded. The per-filetype callbacks for file load are overriden so that they call this instead. This means that a subclass of Formatters::Base can implement #file_loaded to do the same thing for every kind of file that Chef loads from a recipe instead of implementing all the per-filetype callbacks.


149
150
# File 'lib/chef/formatters/base.rb', line 149

def file_loaded(path)
end

#indent_by(amount) ⇒ Object


94
95
96
97
98
99
100
101
102
103
# File 'lib/chef/formatters/base.rb', line 94

def indent_by(amount)
  @output.indent += amount
  if @output.indent < 0
    # This is left commented out for now.  We need to uncomment it and fix at least one bug in
    # the formatter, and then leave this line uncommented in the future.
    #Chef::Log.warn "Internal Formatter Error -- Attempt to indent by negative number of spaces"
    @output.indent = 0
  end
  @output.indent
end

#is_formatter?Boolean


229
230
231
# File 'lib/chef/formatters/base.rb', line 229

def is_formatter?
  true
end

#is_structured_deprecation?(deprecation) ⇒ Boolean


225
226
227
# File 'lib/chef/formatters/base.rb', line 225

def is_structured_deprecation?(deprecation)
  deprecation.kind_of?(Chef::Deprecated::Base)
end

#library_file_load_failed(path, exception) ⇒ Object

Delegates to #file_load_failed


171
172
173
# File 'lib/chef/formatters/base.rb', line 171

def library_file_load_failed(path, exception)
  file_load_failed(path, exception)
end

#library_file_loaded(path) ⇒ Object

Delegates to #file_loaded


166
167
168
# File 'lib/chef/formatters/base.rb', line 166

def library_file_loaded(path)
  file_loaded(path)
end

#lwrp_file_load_failed(path, exception) ⇒ Object

Delegates to #file_load_failed


181
182
183
# File 'lib/chef/formatters/base.rb', line 181

def lwrp_file_load_failed(path, exception)
  file_load_failed(path, exception)
end

#lwrp_file_loaded(path) ⇒ Object

Delegates to #file_loaded


176
177
178
# File 'lib/chef/formatters/base.rb', line 176

def lwrp_file_loaded(path)
  file_loaded(path)
end

#node_load_failed(node_name, exception, config) ⇒ Object


118
119
120
121
# File 'lib/chef/formatters/base.rb', line 118

def node_load_failed(node_name, exception, config)
  description = ErrorMapper.node_load_failed(node_name, exception, config)
  display_error(description)
end

82
83
84
# File 'lib/chef/formatters/base.rb', line 82

def print(*args)
  @output.print(*args)
end

#puts(*args) ⇒ Object


78
79
80
# File 'lib/chef/formatters/base.rb', line 78

def puts(*args)
  @output.puts(*args)
end

#puts_line(*args) ⇒ Object


86
87
88
# File 'lib/chef/formatters/base.rb', line 86

def puts_line(*args)
  @output.puts_line(*args)
end

#recipe_file_load_failed(path, exception, recipe) ⇒ Object

Delegates to #file_load_failed


211
212
213
# File 'lib/chef/formatters/base.rb', line 211

def recipe_file_load_failed(path, exception, recipe)
  file_load_failed(path, exception)
end

#recipe_file_loaded(path, recipe) ⇒ Object

Delegates to #file_loaded


206
207
208
# File 'lib/chef/formatters/base.rb', line 206

def recipe_file_loaded(path, recipe)
  file_loaded(path)
end

#recipe_not_found(exception) ⇒ Object


160
161
162
163
# File 'lib/chef/formatters/base.rb', line 160

def recipe_not_found(exception)
  description = ErrorMapper.file_load_failed(nil, exception)
  display_error(description)
end

#registration_failed(node_name, exception, config) ⇒ Object


112
113
114
115
116
# File 'lib/chef/formatters/base.rb', line 112

def registration_failed(node_name, exception, config)
  #A Formatters::ErrorDescription object
  description = ErrorMapper.registration_failed(node_name, exception, config)
  display_error(description)
end

#resource_failed(resource, action, exception) ⇒ Object


138
139
140
141
# File 'lib/chef/formatters/base.rb', line 138

def resource_failed(resource, action, exception)
  description = ErrorMapper.resource_failed(resource, action, exception)
  display_error(description)
end

#run_list_expand_failed(node, exception) ⇒ Object


123
124
125
126
# File 'lib/chef/formatters/base.rb', line 123

def run_list_expand_failed(node, exception)
  description = ErrorMapper.run_list_expand_failed(node, exception)
  display_error(description)
end

#start_line(*args) ⇒ Object


90
91
92
# File 'lib/chef/formatters/base.rb', line 90

def start_line(*args)
  @output.start_line(*args)
end