Class: Chef::Compliance::InputCollection

Inherits:
Array
  • Object
show all
Defined in:
lib/chef/compliance/input_collection.rb

Constant Summary collapse

HIDDEN_IVARS =
[ :@events ].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(events) ⇒ InputCollection

Returns a new instance of InputCollection.



29
30
31
# File 'lib/chef/compliance/input_collection.rb', line 29

def initialize(events)
  @events = events
end

Instance Attribute Details

#eventsChef::EventDispatch::Dispatcher (readonly)

Event dispatcher for this run.



27
28
29
# File 'lib/chef/compliance/input_collection.rb', line 27

def events
  @events
end

Instance Method Details

#from_file(filename, cookbook_name) ⇒ Object

Add a input to the input collection. The cookbook_name needs to be determined by the caller and is used in the include_input API to match on. The path should be the complete path on the host of the yml file, including the filename.

Parameters:



40
41
42
43
44
# File 'lib/chef/compliance/input_collection.rb', line 40

def from_file(filename, cookbook_name)
  new_input = Input.from_file(events, filename, cookbook_name)
  self << new_input
  events&.compliance_input_loaded(new_input)
end

#from_hash(hash) ⇒ Object

Add a input from a raw hash. This input will be enabled by default.

Parameters:



51
52
53
54
55
# File 'lib/chef/compliance/input_collection.rb', line 51

def from_hash(hash)
  new_input = Input.from_hash(events, hash)
  new_input.enable!
  self << new_input
end

#include_input(arg) ⇒ Object

DSL method to enable input files. This matches on the filename of the input file. If the specific input is omitted then it uses the default input. The string supports regular expression matching.

include_input "acme_cookbook::ssh-001"

include_input "acme_cookbook"

include_input "acme_cookbook::.*"

include_input "acme_cookbook::ssh.*"

include_input ".::ssh."

include_input({ "ssh_custom_path": "/usr/local/bin" })

Examples:

Specific input file in a cookbook

The compliance/inputs/default.yml input in a cookbook

Every input file in a cookbook

Matching inputs by regexp in a cookbook

Matching inputs by regexp in any cookbook in the cookbook collection

Adding an arbitrary hash of data (not from any file in a cookbook)



91
92
93
94
95
96
97
98
99
100
101
# File 'lib/chef/compliance/input_collection.rb', line 91

def include_input(arg)
  raise "include_input was given a nil value" if arg.nil?

  # if we're given a hash argument just shove it in the raw_hash
  if arg.is_a?(Hash)
    from_hash(arg)
    return
  end

  matching_inputs(arg).each(&:enable!)
end

#inspec_dataArray<Input>

Returns inspec inputs which are enabled in a form suitable to pass to inspec.

Returns:

  • (Array<Input>)

    inspec inputs which are enabled in a form suitable to pass to inspec



59
60
61
# File 'lib/chef/compliance/input_collection.rb', line 59

def inspec_data
  select(&:enabled?).each_with_object({}) { |input, hash| hash.merge!(input.inspec_data) }
end

#inspectObject

Omit the event object from error output



111
112
113
114
115
116
# File 'lib/chef/compliance/input_collection.rb', line 111

def inspect
  ivar_string = (instance_variables.map(&:to_sym) - HIDDEN_IVARS).map do |ivar|
    "#{ivar}=#{instance_variable_get(ivar).inspect}"
  end.join(", ")
  "#<#{self.class}:#{object_id} #{ivar_string}>"
end

#valid?(arg) ⇒ Boolean

Returns:

  • (Boolean)


103
104
105
# File 'lib/chef/compliance/input_collection.rb', line 103

def valid?(arg)
  !matching_inputs(arg).empty?
end