Class: Inspec::ProfileContext
- Inherits:
-
Object
- Object
- Inspec::ProfileContext
- Defined in:
- lib/inspec/profile_context.rb
Instance Attribute Summary collapse
-
#attributes ⇒ Object
readonly
Returns the value of attribute attributes.
-
#backend ⇒ Object
readonly
Returns the value of attribute backend.
-
#current_load ⇒ Object
readonly
Returns the value of attribute current_load.
-
#profile_id ⇒ Object
readonly
Returns the value of attribute profile_id.
-
#resource_registry ⇒ Object
readonly
Returns the value of attribute resource_registry.
-
#rules ⇒ Object
Returns the value of attribute rules.
Class Method Summary collapse
Instance Method Summary collapse
- #add_resources(context) ⇒ Object
- #add_subcontext(context) ⇒ Object
- #all_controls ⇒ Object (also: #all_rules)
- #control_eval_context ⇒ Object
- #dependencies ⇒ Object
-
#initialize(profile_id, backend, conf) ⇒ ProfileContext
constructor
A new instance of ProfileContext.
- #load_control_file(*args) ⇒ Object (also: #load)
- #load_libraries(libs) ⇒ Object
- #load_library_file(*args) ⇒ Object
- #load_with_context(context, content, source = nil, line = nil) ⇒ Object
- #profile_supports_inspec_version? ⇒ Boolean
- #profile_supports_platform? ⇒ Boolean
- #register_attribute(name, options = {}) ⇒ Object
- #register_rule(r) ⇒ Object
- #reload_dsl ⇒ Object
- #remove_rule(id) ⇒ Object
- #set_header(field, val) ⇒ Object
- #subcontext_by_name(name) ⇒ Object
- #to_resources_dsl ⇒ Object
- #unregister_rule(id) ⇒ Object
Constructor Details
#initialize(profile_id, backend, conf) ⇒ ProfileContext
Returns a new instance of ProfileContext.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/inspec/profile_context.rb', line 23 def initialize(profile_id, backend, conf) if backend.nil? raise 'ProfileContext is initiated with a backend == nil. ' \ 'This is a backend error which must be fixed upstream.' end @profile_id = profile_id @backend = backend @conf = conf.dup @skip_only_if_eval = @conf['check_mode'] @rules = {} @control_subcontexts = [] @lib_subcontexts = [] @require_loader = ::Inspec::RequireLoader.new @attributes = [] # A local resource registry that only contains resources defined # in the transitive dependency tree of the loaded profile. @resource_registry = Inspec::Resource.new_registry @library_eval_context = Inspec::LibraryEvalContext.create(@resource_registry, @require_loader) @current_load = nil end |
Instance Attribute Details
#attributes ⇒ Object (readonly)
Returns the value of attribute attributes.
21 22 23 |
# File 'lib/inspec/profile_context.rb', line 21 def attributes @attributes end |
#backend ⇒ Object (readonly)
Returns the value of attribute backend.
21 22 23 |
# File 'lib/inspec/profile_context.rb', line 21 def backend @backend end |
#current_load ⇒ Object (readonly)
Returns the value of attribute current_load.
166 167 168 |
# File 'lib/inspec/profile_context.rb', line 166 def current_load @current_load end |
#profile_id ⇒ Object (readonly)
Returns the value of attribute profile_id.
21 22 23 |
# File 'lib/inspec/profile_context.rb', line 21 def profile_id @profile_id end |
#resource_registry ⇒ Object (readonly)
Returns the value of attribute resource_registry.
21 22 23 |
# File 'lib/inspec/profile_context.rb', line 21 def resource_registry @resource_registry end |
#rules ⇒ Object
Returns the value of attribute rules.
22 23 24 |
# File 'lib/inspec/profile_context.rb', line 22 def rules @rules end |
Class Method Details
.for_profile(profile, backend, attributes) ⇒ Object
15 16 17 18 19 |
# File 'lib/inspec/profile_context.rb', line 15 def self.for_profile(profile, backend, attributes) new(profile.name, backend, { 'profile' => profile, 'attributes' => attributes, 'check_mode' => profile.check_mode }) end |
Instance Method Details
#add_resources(context) ⇒ Object
105 106 107 108 109 110 |
# File 'lib/inspec/profile_context.rb', line 105 def add_resources(context) @resource_registry.merge!(context.resource_registry) control_eval_context.add_resources(context) @lib_subcontexts << context reload_dsl end |
#add_subcontext(context) ⇒ Object
112 113 114 |
# File 'lib/inspec/profile_context.rb', line 112 def add_subcontext(context) @control_subcontexts << context end |
#all_controls ⇒ Object Also known as: all_rules
86 87 88 89 90 |
# File 'lib/inspec/profile_context.rb', line 86 def all_controls ret = @rules.values ret += @control_subcontexts.map(&:all_rules).flatten ret end |
#control_eval_context ⇒ Object
56 57 58 59 60 61 |
# File 'lib/inspec/profile_context.rb', line 56 def control_eval_context @control_eval_context ||= begin ctx = Inspec::ControlEvalContext.create(self, to_resources_dsl) ctx.new(@backend, @conf, dependencies, @require_loader, @skip_only_if_eval) end end |
#dependencies ⇒ Object
44 45 46 47 48 49 50 |
# File 'lib/inspec/profile_context.rb', line 44 def dependencies if @conf['profile'].nil? {} else @conf['profile'].locked_dependencies end end |
#load_control_file(*args) ⇒ Object Also known as: load
139 140 141 142 143 |
# File 'lib/inspec/profile_context.rb', line 139 def load_control_file(*args) # Set `skip_file` to `false` between file loads to prevent skips from spanning multiple control files control_eval_context.skip_file = false load_with_context(control_eval_context, *args) end |
#load_libraries(libs) ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/inspec/profile_context.rb', line 116 def load_libraries(libs) lib_prefix = 'libraries' + File::SEPARATOR autoloads = [] libs.sort_by! { |l| l[1] } # Sort on source path so load order is deterministic libs.each do |content, source, line| path = source if source.start_with?(lib_prefix) path = source.sub(lib_prefix, '') autoloads.push(path) if File.dirname(path) == '.' end @require_loader.add(path, content, source, line) end # load all files directly that are flat inside the libraries folder autoloads.each do |path| next unless path.end_with?('.rb') load_library_file(*@require_loader.load(path)) unless @require_loader.loaded?(path) end reload_dsl end |
#load_library_file(*args) ⇒ Object
146 147 148 |
# File 'lib/inspec/profile_context.rb', line 146 def load_library_file(*args) load_with_context(@library_eval_context, *args) end |
#load_with_context(context, content, source = nil, line = nil) ⇒ Object
150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/inspec/profile_context.rb', line 150 def load_with_context(context, content, source = nil, line = nil) Inspec::Log.debug("Loading #{source || '<anonymous content>'} into #{self}") @current_load = { file: source } if content.is_a? Proc context.instance_eval(&content) elsif source.nil? && line.nil? context.instance_eval(content) else context.instance_eval(content, source || 'unknown', line || 1) end end |
#profile_supports_inspec_version? ⇒ Boolean
73 74 75 76 77 |
# File 'lib/inspec/profile_context.rb', line 73 def profile_supports_inspec_version? return true if @conf['profile'].nil? @conf['profile'].supports_runtime? end |
#profile_supports_platform? ⇒ Boolean
67 68 69 70 71 |
# File 'lib/inspec/profile_context.rb', line 67 def profile_supports_platform? return true if @conf['profile'].nil? @conf['profile'].supports_platform? end |
#register_attribute(name, options = {}) ⇒ Object
188 189 190 191 192 193 194 195 |
# File 'lib/inspec/profile_context.rb', line 188 def register_attribute(name, = {}) # we need to return an attribute object, to allow dermination of default values attr = Attribute.new(name, ) # read value from given gived values attr.value = @conf['attributes'][attr.name] unless @conf['attributes'].nil? @attributes.push(attr) attr.value end |
#register_rule(r) ⇒ Object
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
# File 'lib/inspec/profile_context.rb', line 168 def register_rule(r) # get the full ID file = if @current_load.nil? 'unknown' else @current_load[:file] || 'unknown' end r.instance_variable_set(:@__file, file) r.instance_variable_set(:@__group_title, current_load[:title]) # add the rule to the registry fid = full_id(Inspec::Rule.profile_id(r), Inspec::Rule.rule_id(r)) existing = @rules[fid] if existing.nil? @rules[fid] = r else Inspec::Rule.merge(existing, r) end end |
#reload_dsl ⇒ Object
63 64 65 |
# File 'lib/inspec/profile_context.rb', line 63 def reload_dsl @control_eval_context = nil end |
#remove_rule(id) ⇒ Object
79 80 81 82 83 84 |
# File 'lib/inspec/profile_context.rb', line 79 def remove_rule(id) @rules[id] = nil if @rules.key?(id) @control_subcontexts.each do |c| c.remove_rule(id) end end |
#set_header(field, val) ⇒ Object
197 198 199 |
# File 'lib/inspec/profile_context.rb', line 197 def set_header(field, val) @current_load[field] = val end |
#subcontext_by_name(name) ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/inspec/profile_context.rb', line 93 def subcontext_by_name(name) found = @lib_subcontexts.find { |c| c.profile_id == name } if !found @lib_subcontexts.each do |c| found = c.subcontext_by_name(name) break if found end end found end |
#to_resources_dsl ⇒ Object
52 53 54 |
# File 'lib/inspec/profile_context.rb', line 52 def to_resources_dsl Inspec::Resource.create_dsl(self) end |
#unregister_rule(id) ⇒ Object
162 163 164 |
# File 'lib/inspec/profile_context.rb', line 162 def unregister_rule(id) @rules.delete(full_id(@profile_id, id)) end |