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 |
# 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) 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.
165 166 167 |
# File 'lib/inspec/profile_context.rb', line 165 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
104 105 106 107 108 109 |
# File 'lib/inspec/profile_context.rb', line 104 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
111 112 113 |
# File 'lib/inspec/profile_context.rb', line 111 def add_subcontext(context) @control_subcontexts << context end |
#all_controls ⇒ Object Also known as: all_rules
85 86 87 88 89 |
# File 'lib/inspec/profile_context.rb', line 85 def all_controls ret = @rules.values ret += @control_subcontexts.map(&:all_rules).flatten ret end |
#control_eval_context ⇒ Object
55 56 57 58 59 60 |
# File 'lib/inspec/profile_context.rb', line 55 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
43 44 45 46 47 48 49 |
# File 'lib/inspec/profile_context.rb', line 43 def dependencies if @conf['profile'].nil? {} else @conf['profile'].locked_dependencies end end |
#load_control_file(*args) ⇒ Object Also known as: load
138 139 140 141 142 |
# File 'lib/inspec/profile_context.rb', line 138 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
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/inspec/profile_context.rb', line 115 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
145 146 147 |
# File 'lib/inspec/profile_context.rb', line 145 def load_library_file(*args) load_with_context(@library_eval_context, *args) end |
#load_with_context(context, content, source = nil, line = nil) ⇒ Object
149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/inspec/profile_context.rb', line 149 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
72 73 74 75 76 |
# File 'lib/inspec/profile_context.rb', line 72 def profile_supports_inspec_version? return true if @conf['profile'].nil? @conf['profile'].supports_runtime? end |
#profile_supports_platform? ⇒ Boolean
66 67 68 69 70 |
# File 'lib/inspec/profile_context.rb', line 66 def profile_supports_platform? return true if @conf['profile'].nil? @conf['profile'].supports_platform? end |
#register_attribute(name, options = {}) ⇒ Object
187 188 189 190 191 192 193 194 |
# File 'lib/inspec/profile_context.rb', line 187 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
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
# File 'lib/inspec/profile_context.rb', line 167 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
62 63 64 |
# File 'lib/inspec/profile_context.rb', line 62 def reload_dsl @control_eval_context = nil end |
#remove_rule(id) ⇒ Object
78 79 80 81 82 83 |
# File 'lib/inspec/profile_context.rb', line 78 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
196 197 198 |
# File 'lib/inspec/profile_context.rb', line 196 def set_header(field, val) @current_load[field] = val end |
#subcontext_by_name(name) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/inspec/profile_context.rb', line 92 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
51 52 53 |
# File 'lib/inspec/profile_context.rb', line 51 def to_resources_dsl Inspec::Resource.create_dsl(self) end |
#unregister_rule(id) ⇒ Object
161 162 163 |
# File 'lib/inspec/profile_context.rb', line 161 def unregister_rule(id) @rules.delete(full_id(@profile_id, id)) end |