Class: Chef::Formatters::Doc

Inherits:
Base show all
Defined in:
lib/chef/formatters/doc.rb

Overview

– TODO: not sold on the name, but the output is similar to what rspec calls “specdoc”

Instance Attribute Summary collapse

Attributes inherited from Base

#err, #out, #output

Instance Method Summary collapse

Methods inherited from Base

#attribute_file_load_failed, #attribute_file_loaded, cli_name, #cookbook_sync_failed, #definition_file_load_failed, #definition_file_loaded, #display_error, #file_load_failed, #library_file_load_failed, #library_file_loaded, #lwrp_file_load_failed, #lwrp_file_loaded, #print, #puts, #recipe_file_load_failed, #recipe_file_loaded, #recipe_not_found, #registration_failed, #run_list_expand_failed

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_file_load_failed, #attribute_file_loaded, #attribute_load_complete, #attribute_load_start, #cookbook_sync_failed, #definition_file_load_failed, #definition_file_loaded, #definition_load_complete, #definition_load_start, #library_file_load_failed, #library_file_loaded, #library_load_complete, #lwrp_file_load_failed, #lwrp_file_loaded, #lwrp_load_complete, #lwrp_load_start, #msg, #recipe_file_load_failed, #recipe_file_loaded, #recipe_load_start, #recipe_not_found, #registration_failed, #resource_completed, #run_list_expand_failed, #run_started

Constructor Details

#initialize(out, err) ⇒ Doc

Returns a new instance of Doc.



15
16
17
18
19
20
21
22
# File 'lib/chef/formatters/doc.rb', line 15

def initialize(out, err)
  super

  @updated_resources = 0
  @up_to_date_resources = 0
  @start_time = Time.now
  @end_time = @start_time
end

Instance Attribute Details

#end_timeObject (readonly)

Returns the value of attribute end_time.



11
12
13
# File 'lib/chef/formatters/doc.rb', line 11

def end_time
  @end_time
end

#start_timeObject (readonly)

Returns the value of attribute start_time.



11
12
13
# File 'lib/chef/formatters/doc.rb', line 11

def start_time
  @start_time
end

Instance Method Details

#converge_completeObject

Called when the converge phase is finished.



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

def converge_complete
end

#converge_start(run_context) ⇒ Object

Called before convergence starts



144
145
146
# File 'lib/chef/formatters/doc.rb', line 144

def converge_start(run_context)
  puts "Converging #{run_context.resource_collection.all_resources.size} resources"
end

#cookbook_clean_completeObject

Called when cookbook cleaning is finished.



109
110
# File 'lib/chef/formatters/doc.rb', line 109

def cookbook_clean_complete
end

#cookbook_clean_startObject

Called before unneeded cookbooks are removed



99
100
# File 'lib/chef/formatters/doc.rb', line 99

def cookbook_clean_start
end

#cookbook_resolution_complete(cookbook_collection) ⇒ Object

Called when the cookbook collection is returned from the server.



95
96
# File 'lib/chef/formatters/doc.rb', line 95

def cookbook_resolution_complete(cookbook_collection)
end

#cookbook_resolution_failed(expanded_run_list, exception) ⇒ Object

Called when there is an error getting the cookbook collection from the server.



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

def cookbook_resolution_failed(expanded_run_list, exception)
  super
end

#cookbook_resolution_start(expanded_run_list) ⇒ Object

Called before the cookbook collection is fetched from the server.



84
85
86
# File 'lib/chef/formatters/doc.rb', line 84

def cookbook_resolution_start(expanded_run_list)
  puts "resolving cookbooks for run list: #{expanded_run_list.inspect}"
end

#cookbook_sync_completeObject

Called after all cookbooks have been sync’d.



127
128
# File 'lib/chef/formatters/doc.rb', line 127

def cookbook_sync_complete
end

#cookbook_sync_start(cookbook_count) ⇒ Object

Called before cookbook sync starts



113
114
115
# File 'lib/chef/formatters/doc.rb', line 113

def cookbook_sync_start(cookbook_count)
  puts "Synchronizing Cookbooks:"
end

#elapsed_timeObject



24
25
26
# File 'lib/chef/formatters/doc.rb', line 24

def elapsed_time
  end_time - start_time
end

#file_loaded(path) ⇒ Object

Called after a file in a cookbook is loaded.



136
137
# File 'lib/chef/formatters/doc.rb', line 136

def file_loaded(path)
end

#handler_executed(handler) ⇒ Object

Called after an individual handler has run



239
240
241
# File 'lib/chef/formatters/doc.rb', line 239

def handler_executed(handler)
  puts "  - #{handler.class.name}"
end

#handlers_completedObject

Called after all handlers have executed



244
245
246
# File 'lib/chef/formatters/doc.rb', line 244

def handlers_completed
  puts "Running handlers complete\n"
end

#handlers_start(handler_count) ⇒ Object

Called before handlers run



234
235
236
# File 'lib/chef/formatters/doc.rb', line 234

def handlers_start(handler_count)
  puts "\nRunning handlers:"
end

#library_load_start(file_count) ⇒ Object

Called when cookbook loading starts.



131
132
133
# File 'lib/chef/formatters/doc.rb', line 131

def library_load_start(file_count)
  puts "Compiling Cookbooks..."
end

#node_load_completed(node, expanded_run_list, config) ⇒ Object

Default and override attrs from roles have been computed, but not yet applied. Normal attrs from JSON have been added to the node.



80
81
# File 'lib/chef/formatters/doc.rb', line 80

def node_load_completed(node, expanded_run_list, config)
end

#node_load_failed(node_name, exception, config) ⇒ Object

Failed to load node data from the server



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

def node_load_failed(node_name, exception, config)
  super
end

#node_load_start(node_name, config) ⇒ Object



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

def node_load_start(node_name, config)
end

#ohai_completed(node) ⇒ Object

Called right after ohai runs.



55
56
# File 'lib/chef/formatters/doc.rb', line 55

def ohai_completed(node)
end

#output_record(line) ⇒ Object



197
198
199
# File 'lib/chef/formatters/doc.rb', line 197

def output_record(line)

end

#provider_requirement_failed(action, resource, exception, message) ⇒ Object

Called when an assertion declared by a provider fails



258
259
260
261
262
263
264
# File 'lib/chef/formatters/doc.rb', line 258

def provider_requirement_failed(action, resource, exception, message)
  return unless message
  color = Chef::Config[:why_run] ? :yellow : :red
  [ message ].flatten.each do |line|
    @output.color("\n    * #{line}", color)
  end
end

#recipe_load_completeObject

Called when recipes have been loaded.



140
141
# File 'lib/chef/formatters/doc.rb', line 140

def recipe_load_complete
end

#registration_completedObject



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

def registration_completed
end

#registration_start(node_name, config) ⇒ Object

About to attempt to register as node_name



63
64
65
# File 'lib/chef/formatters/doc.rb', line 63

def registration_start(node_name, config)
  puts "Creating a new client identity for #{node_name} using the validator key."
end

#removed_cookbook_file(path) ⇒ Object

Called after the file at path is removed. It may be removed if the cookbook containing it was removed from the run list, or if the file was removed from the cookbook.



105
106
# File 'lib/chef/formatters/doc.rb', line 105

def removed_cookbook_file(path)
end

#resource_action_start(resource, action, notification_type = nil, notifier = nil) ⇒ Object

Called before action is executed on a resource.



153
154
155
156
157
158
159
160
161
162
163
164
165
166
# File 'lib/chef/formatters/doc.rb', line 153

def resource_action_start(resource, action, notification_type=nil, notifier=nil)
  if resource.cookbook_name && resource.recipe_name
    resource_recipe = "#{resource.cookbook_name}::#{resource.recipe_name}"
  else
    resource_recipe = "<Dynamically Defined Resource>"
  end

  if resource_recipe != @current_recipe
    puts "Recipe: #{resource_recipe}"
    @current_recipe = resource_recipe
  end
  # TODO: info about notifies
  print "  * #{resource} action #{action}"
end

#resource_bypassed(resource, action, provider) ⇒ Object



193
194
195
# File 'lib/chef/formatters/doc.rb', line 193

def resource_bypassed(resource, action, provider)
  puts " (Skipped: whyrun not supported by provider #{provider.class.name})"
end

#resource_current_state_load_bypassed(resource, action, current_resource) ⇒ Object

Called when resource current state load is skipped due to the provider not supporting whyrun mode.



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

def resource_current_state_load_bypassed(resource, action, current_resource)
  @output.color("\n    * Whyrun not supported for #{resource}, bypassing load.", :yellow)
end

#resource_current_state_loaded(resource, action, current_resource) ⇒ Object

Called after #load_current_resource has run.



184
185
# File 'lib/chef/formatters/doc.rb', line 184

def resource_current_state_loaded(resource, action, current_resource)
end

#resource_failed(resource, action, exception) ⇒ Object

Called when a resource fails and will not be retried.



173
174
175
# File 'lib/chef/formatters/doc.rb', line 173

def resource_failed(resource, action, exception)
  super
end

#resource_failed_retriable(resource, action, retry_count, exception) ⇒ Object

Called when a resource fails, but will retry.



169
170
# File 'lib/chef/formatters/doc.rb', line 169

def resource_failed_retriable(resource, action, retry_count, exception)
end

#resource_skipped(resource, action, conditional) ⇒ Object

Called when a resource action has been skipped b/c of a conditional



178
179
180
181
# File 'lib/chef/formatters/doc.rb', line 178

def resource_skipped(resource, action, conditional)
  # TODO: more info about conditional
  puts " (skipped due to #{conditional.short_description})"
end

#resource_up_to_date(resource, action) ⇒ Object

Called when a resource has no converge actions, e.g., it was already correct.



188
189
190
191
# File 'lib/chef/formatters/doc.rb', line 188

def resource_up_to_date(resource, action)
  @up_to_date_resources+= 1
  puts " (up to date)"
end

#resource_update_applied(resource, action, update) ⇒ Object

Called when a change has been made to a resource. May be called multiple times per resource, e.g., a file may have its content updated, and then its permissions updated.



204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
# File 'lib/chef/formatters/doc.rb', line 204

def resource_update_applied(resource, action, update)
  prefix = Chef::Config[:why_run] ? "Would " : ""
  Array(update).each do |line|
    next if line.nil?
    output_record line
    if line.kind_of? String
      @output.color "\n    - #{prefix}#{line}", :green
    elsif line.kind_of? Array
      # Expanded output - delta
      # @todo should we have a resource_update_delta callback?
      line.each do |detail|
        @output.color "\n        #{detail}", :white
      end
    end
  end
end

#resource_updated(resource, action) ⇒ Object

Called after a resource has been completely converged.



222
223
224
225
# File 'lib/chef/formatters/doc.rb', line 222

def resource_updated(resource, action)
  @updated_resources += 1
  puts "\n"
end

#run_completed(node) ⇒ Object



36
37
38
39
40
41
42
43
# File 'lib/chef/formatters/doc.rb', line 36

def run_completed(node)
  @end_time = Time.now
  if Chef::Config[:why_run]
    puts "Chef Client finished, #{@updated_resources}/#{total_resources} resources would have been updated"
  else
    puts "Chef Client finished, #{@updated_resources}/#{total_resources} resources updated in #{elapsed_time} seconds"
  end
end

#run_failed(exception) ⇒ Object



45
46
47
48
49
50
51
52
# File 'lib/chef/formatters/doc.rb', line 45

def run_failed(exception)
  @end_time = Time.now
  if Chef::Config[:why_run]
    puts "Chef Client failed. #{@updated_resources} resources would have been updated"
  else
    puts "Chef Client failed. #{@updated_resources} resources updated in #{elapsed_time} seconds"
  end
end

#run_start(version) ⇒ Object



28
29
30
# File 'lib/chef/formatters/doc.rb', line 28

def run_start(version)
  puts "Starting Chef Client, version #{version}"
end

#skipping_registration(node_name, config) ⇒ Object

Already have a client key, assuming this node has registered.



59
60
# File 'lib/chef/formatters/doc.rb', line 59

def skipping_registration(node_name, config)
end

#synchronized_cookbook(cookbook_name) ⇒ Object

Called when cookbook cookbook_name has been sync’d



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

def synchronized_cookbook(cookbook_name)
  puts "  - #{cookbook_name}"
end

#total_resourcesObject



32
33
34
# File 'lib/chef/formatters/doc.rb', line 32

def total_resources
  @up_to_date_resources + @updated_resources
end

#updated_cookbook_file(cookbook_name, path) ⇒ Object

Called when an individual file in a cookbook has been updated



123
124
# File 'lib/chef/formatters/doc.rb', line 123

def updated_cookbook_file(cookbook_name, path)
end

#whyrun_assumption(action, resource, message) ⇒ Object

Called when a provider makes an assumption after a failed assertion in whyrun mode, in order to allow execution to continue



250
251
252
253
254
255
# File 'lib/chef/formatters/doc.rb', line 250

def whyrun_assumption(action, resource, message)
  return unless message
  [ message ].flatten.each do |line|
    @output.color("\n    * #{line}", :yellow)
  end
end