Class: Inspec::ProfileContext
- Inherits:
-
Object
- Object
- Inspec::ProfileContext
show all
- Defined in:
- lib/inspec/profile_context.rb
Defined Under Namespace
Modules: DomainSpecificLunacy
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(profile_id, backend, conf) ⇒ ProfileContext
Returns a new instance of ProfileContext.
19
20
21
22
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 19
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.key?("profile") ? @conf["profile"].profile_name : @profile_id
@skip_only_if_eval = @conf["check_mode"]
@rules = {}
@control_subcontexts = []
@lib_subcontexts = []
@require_loader = ::Inspec::RequireLoader.new
Inspec::InputRegistry.register_profile_alias(@profile_id, @profile_name) if @profile_id != @profile_name
@resource_registry = Inspec::Resource.new_registry
@library_eval_context = Inspec::LibraryEvalContext.create(@resource_registry, @require_loader)
@current_load = nil
end
|
Instance Attribute Details
#backend ⇒ Object
Returns the value of attribute backend.
17
18
19
|
# File 'lib/inspec/profile_context.rb', line 17
def backend
@backend
end
|
#current_load ⇒ Object
Returns the value of attribute current_load.
182
183
184
|
# File 'lib/inspec/profile_context.rb', line 182
def current_load
@current_load
end
|
#library_eval_context ⇒ Object
Returns the value of attribute library_eval_context.
16
17
18
|
# File 'lib/inspec/profile_context.rb', line 16
def library_eval_context
@library_eval_context
end
|
#profile_id ⇒ Object
Returns the value of attribute profile_id.
17
18
19
|
# File 'lib/inspec/profile_context.rb', line 17
def profile_id
@profile_id
end
|
#profile_name ⇒ Object
Returns the value of attribute profile_name.
17
18
19
|
# File 'lib/inspec/profile_context.rb', line 17
def profile_name
@profile_name
end
|
#resource_registry ⇒ Object
Returns the value of attribute resource_registry.
17
18
19
|
# File 'lib/inspec/profile_context.rb', line 17
def resource_registry
@resource_registry
end
|
#rules ⇒ Object
Returns the value of attribute rules.
18
19
20
|
# File 'lib/inspec/profile_context.rb', line 18
def rules
@rules
end
|
Class Method Details
.for_profile(profile, backend) ⇒ Object
12
13
14
|
# File 'lib/inspec/profile_context.rb', line 12
def self.for_profile(profile, backend)
new(profile.name, backend, { "profile" => profile, "check_mode" => profile.check_mode })
end
|
Instance Method Details
#add_resources(context) ⇒ Object
113
114
115
116
117
118
|
# File 'lib/inspec/profile_context.rb', line 113
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
120
121
122
|
# File 'lib/inspec/profile_context.rb', line 120
def add_subcontext(context)
@control_subcontexts << context
end
|
#all_controls ⇒ Object
Also known as:
all_rules
94
95
96
97
98
|
# File 'lib/inspec/profile_context.rb', line 94
def all_controls
ret = @rules.values.compact
ret += @control_subcontexts.map(&:all_rules).flatten
ret
end
|
#attributes ⇒ Object
43
44
45
|
# File 'lib/inspec/profile_context.rb', line 43
def attributes
Inspec::AttributeRegistry.list_attributes_for_profile(@profile_id)
end
|
#control_eval_context ⇒ Object
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/inspec/profile_context.rb', line 59
def control_eval_context
@control_eval_context ||=
Inspec::ControlEvalContext.new(self,
to_resources_dsl,
@backend,
@conf,
dependencies,
@require_loader,
@skip_only_if_eval)
end
|
#dependencies ⇒ Object
47
48
49
50
51
52
53
|
# File 'lib/inspec/profile_context.rb', line 47
def dependencies
if @conf["profile"].nil?
{}
else
@conf["profile"].locked_dependencies
end
end
|
#load_control_file(*args) ⇒ Object
Also known as:
load
152
153
154
155
156
|
# File 'lib/inspec/profile_context.rb', line 152
def load_control_file(*args)
control_eval_context.skip_file = false
load_with_context(control_eval_context, *args)
end
|
#load_libraries(libs) ⇒ Object
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
# File 'lib/inspec/profile_context.rb', line 124
def load_libraries(libs)
lib_prefix = "libraries" + File::SEPARATOR
autoloads = []
libs.sort_by! { |l| l[1] } libs.each do |content, source, line|
next unless source.end_with?(".rb")
path = source
if source.start_with?(lib_prefix)
path = source.sub(lib_prefix, "")
no_subdir = File.dirname(path) == "."
autoloads.push(path) if no_subdir
end
@require_loader.add(path, content, source, line)
end
autoloads.each do |path|
load_library_file(*@require_loader.load(path)) unless
@require_loader.loaded?(path)
end
reload_dsl
end
|
#load_library_file(*args) ⇒ Object
159
160
161
|
# File 'lib/inspec/profile_context.rb', line 159
def load_library_file(*args)
load_with_context(@library_eval_context, *args)
end
|
#load_with_context(context, content, source = nil, line = nil) ⇒ Object
163
164
165
166
167
168
169
170
171
172
173
|
# File 'lib/inspec/profile_context.rb', line 163
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
81
82
83
84
85
|
# File 'lib/inspec/profile_context.rb', line 81
def profile_supports_inspec_version?
return true if @conf["profile"].nil?
@conf["profile"].supports_runtime?
end
|
75
76
77
78
79
|
# File 'lib/inspec/profile_context.rb', line 75
def profile_supports_platform?
return true if @conf["profile"].nil?
@conf["profile"].supports_platform?
end
|
#register_rule(r) ⇒ Object
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
|
# File 'lib/inspec/profile_context.rb', line 184
def register_rule(r)
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])
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
70
71
72
73
|
# File 'lib/inspec/profile_context.rb', line 70
def reload_dsl
@resource_registry.merge!(Inspec::Resource.new_registry)
@control_eval_context = nil
end
|
#remove_rule(id) ⇒ Object
87
88
89
90
91
92
|
# File 'lib/inspec/profile_context.rb', line 87
def remove_rule(id)
@rules[id] = nil if @rules.key?(id)
@control_subcontexts.each do |c|
c.remove_rule(id)
end
end
|
204
205
206
|
# File 'lib/inspec/profile_context.rb', line 204
def (field, val)
@current_load[field] = val
end
|
#subcontext_by_name(name) ⇒ Object
101
102
103
104
105
106
107
108
109
110
111
|
# File 'lib/inspec/profile_context.rb', line 101
def subcontext_by_name(name)
found = @lib_subcontexts.find { |c| c.profile_id == name }
unless found
@lib_subcontexts.each do |c|
found = c.subcontext_by_name(name)
break if found
end
end
found
end
|
#to_resources_dsl ⇒ Object
#unregister_rule(id) ⇒ Object
175
176
177
178
179
180
|
# File 'lib/inspec/profile_context.rb', line 175
def unregister_rule(id)
@rules.delete(full_id(@profile_id, id))
@control_subcontexts.each do |c|
c.unregister_rule(id)
end
end
|