class Puppet::ResourceApi::BaseContext
This class provides access to all common external dependencies of providers and transports. The runtime environment will inject an appropriate implementation.
Attributes
type[R]
Public Class Methods
new(definition)
click to toggle source
# File lib/puppet/resource_api/base_context.rb, line 15 def initialize(definition) if definition.is_a?(Hash) # this is only for backwards compatibility @type = Puppet::ResourceApi::TypeDefinition.new(definition) elsif definition.is_a? Puppet::ResourceApi::BaseTypeDefinition @type = definition else raise ArgumentError, 'BaseContext requires definition to be a child of Puppet::ResourceApi::BaseTypeDefinition, not <%{actual_type}>' % { actual_type: definition.class } end end
Public Instance Methods
attribute_changed(title, attribute, is, should, message: nil)
click to toggle source
# File lib/puppet/resource_api/base_context.rb, line 120 def attribute_changed(title, attribute, is, should, message: nil) raise "#{__method__} only accepts a single resource title" if title.respond_to?(:each) printable_is = 'nil' printable_should = 'nil' if is printable_is = is.is_a?(Numeric) ? is : "'#{is}'" end if should printable_should = should.is_a?(Numeric) ? should : "'#{should}'" end notice("#{title}: attribute '#{attribute}' changed from #{printable_is} to #{printable_should}#{message ? ": #{message}" : ''}") end
device()
click to toggle source
# File lib/puppet/resource_api/base_context.rb, line 26 def device raise 'Received device() on an unprepared BaseContext. Use a PuppetContext instead.' end
failed(titles, message: 'Updating has failed')
click to toggle source
# File lib/puppet/resource_api/base_context.rb, line 133 def failed(titles, message: 'Updating has failed') setup_context(titles) begin err(message) # raise message ensure @context = nil end end
failed?()
click to toggle source
# File lib/puppet/resource_api/base_context.rb, line 34 def failed? @failed end
failing(titles, message: 'Failing') { || ... }
click to toggle source
# File lib/puppet/resource_api/base_context.rb, line 78 def failing(titles, message: 'Failing') start_time = Time.now setup_context(titles, message) begin debug('Start') yield warning("Finished failing in #{format_seconds(Time.now - start_time)} seconds") rescue StandardError => e log_exception(e, message: "Failed after #{format_seconds(Time.now - start_time)} seconds") @failed = true ensure @context = nil end end
feature_support?(feature)
click to toggle source
# File lib/puppet/resource_api/base_context.rb, line 42 def feature_support?(feature) Puppet.deprecation_warning('context.feature_support? is deprecated. Please use context.type.feature? instead.') type.feature?(feature) end
log_exception(exception, message: 'Error encountered', trace: false)
click to toggle source
# File lib/puppet/resource_api/base_context.rb, line 143 def log_exception(exception, message: 'Error encountered', trace: false) message = "#{message}: #{exception}" if trace message += "\n" message += exception.backtrace.join("\n") end err(message) end
processed(title, is, should)
click to toggle source
# File lib/puppet/resource_api/base_context.rb, line 115 def processed(title, is, should) raise "#{__method__} only accepts a single resource title" if title.respond_to?(:each) notice("Processed #{title} from #{is} to #{should}") end
processing(title, is, should, message = 'Processing') { || ... }
click to toggle source
# File lib/puppet/resource_api/base_context.rb, line 93 def processing(title, is, should, message = 'Processing') raise "#{__method__} only accepts a single resource title" if title.respond_to?(:each) start_time = Time.now setup_context(title, message) begin debug("Starting processing of #{title} from #{is} to #{should}") yield notice("Finished processing #{title} in #{format_seconds(Time.now - start_time)} seconds: #{should}") rescue StandardError => e log_exception(e, message: "Failed processing #{title} after #{format_seconds(Time.now - start_time)} seconds") @failed = true ensure @context = nil end end
reset_failed()
click to toggle source
# File lib/puppet/resource_api/base_context.rb, line 38 def reset_failed @failed = false end
send_log(_level, _message)
click to toggle source
# File lib/puppet/resource_api/base_context.rb, line 152 def send_log(_level, _message) raise 'Received send_log() on an unprepared BaseContext. Use IOContext, or PuppetContext instead.' end
transport()
click to toggle source
# File lib/puppet/resource_api/base_context.rb, line 30 def transport raise 'No transport available.' end
Private Instance Methods
format_seconds(seconds)
click to toggle source
# File lib/puppet/resource_api/base_context.rb, line 171 def format_seconds(seconds) return '%.6f' % seconds if seconds < 1 '%.2f' % seconds end
format_titles(titles)
click to toggle source
# File lib/puppet/resource_api/base_context.rb, line 158 def format_titles(titles) if titles.length.zero? && !titles.is_a?(String) @type.name else "#{@type.name}[#{[titles].flatten.compact.join(', ')}]" end end
setup_context(titles, message = nil)
click to toggle source
# File lib/puppet/resource_api/base_context.rb, line 166 def setup_context(titles, message = nil) @context = format_titles(titles) @context += ": #{message}" if message end