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.
-
#profile_name ⇒ Object
readonly
Returns the value of attribute profile_name.
-
#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 43 44 |
# 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 @profile_name = @conf['profile'].profile_name || @profile_id if @conf['profile'] @skip_only_if_eval = @conf['check_mode'] @rules = {} @control_subcontexts = [] @lib_subcontexts = [] @require_loader = ::Inspec::RequireLoader.new Inspec::AttributeRegistry.register_profile_alias(@profile_id, @profile_name) if @profile_id != @profile_name @attributes = Inspec::AttributeRegistry.list_attributes_for_profile(@profile_id) # 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.
168 169 170 |
# File 'lib/inspec/profile_context.rb', line 168 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 |
#profile_name ⇒ Object (readonly)
Returns the value of attribute profile_name.
21 22 23 |
# File 'lib/inspec/profile_context.rb', line 21 def profile_name @profile_name 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
107 108 109 110 111 112 |
# File 'lib/inspec/profile_context.rb', line 107 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
114 115 116 |
# File 'lib/inspec/profile_context.rb', line 114 def add_subcontext(context) @control_subcontexts << context end |
#all_controls ⇒ Object Also known as: all_rules
88 89 90 91 92 |
# File 'lib/inspec/profile_context.rb', line 88 def all_controls ret = @rules.values ret += @control_subcontexts.map(&:all_rules).flatten ret end |
#control_eval_context ⇒ Object
58 59 60 61 62 63 |
# File 'lib/inspec/profile_context.rb', line 58 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
46 47 48 49 50 51 52 |
# File 'lib/inspec/profile_context.rb', line 46 def dependencies if @conf['profile'].nil? {} else @conf['profile'].locked_dependencies end end |
#load_control_file(*args) ⇒ Object Also known as: load
141 142 143 144 145 |
# File 'lib/inspec/profile_context.rb', line 141 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
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/inspec/profile_context.rb', line 118 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
148 149 150 |
# File 'lib/inspec/profile_context.rb', line 148 def load_library_file(*args) load_with_context(@library_eval_context, *args) end |
#load_with_context(context, content, source = nil, line = nil) ⇒ Object
152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/inspec/profile_context.rb', line 152 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
75 76 77 78 79 |
# File 'lib/inspec/profile_context.rb', line 75 def profile_supports_inspec_version? return true if @conf['profile'].nil? @conf['profile'].supports_runtime? end |
#profile_supports_platform? ⇒ Boolean
69 70 71 72 73 |
# File 'lib/inspec/profile_context.rb', line 69 def profile_supports_platform? return true if @conf['profile'].nil? @conf['profile'].supports_platform? end |
#register_attribute(name, options = {}) ⇒ Object
190 191 192 193 194 195 |
# File 'lib/inspec/profile_context.rb', line 190 def register_attribute(name, = {}) # we need to return an attribute object, to allow dermination of default values attribute = Inspec::AttributeRegistry.register_attribute(name, @profile_id, ) attribute.value = @conf['attributes'][name] unless @conf['attributes'].nil? || @conf['attributes'][name].nil? attribute.value end |
#register_rule(r) ⇒ Object
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/inspec/profile_context.rb', line 170 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
65 66 67 |
# File 'lib/inspec/profile_context.rb', line 65 def reload_dsl @control_eval_context = nil end |
#remove_rule(id) ⇒ Object
81 82 83 84 85 86 |
# File 'lib/inspec/profile_context.rb', line 81 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
95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/inspec/profile_context.rb', line 95 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
54 55 56 |
# File 'lib/inspec/profile_context.rb', line 54 def to_resources_dsl Inspec::Resource.create_dsl(self) end |
#unregister_rule(id) ⇒ Object
164 165 166 |
# File 'lib/inspec/profile_context.rb', line 164 def unregister_rule(id) @rules.delete(full_id(@profile_id, id)) end |