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