Skip to content

Commit 8556bb9

Browse files
authored
Merge pull request #22234 from agrare/non_rails_worker_settings
Non rails worker settings
2 parents bd821db + fe2139e commit 8556bb9

File tree

3 files changed

+61
-16
lines changed

3 files changed

+61
-16
lines changed

app/models/miq_worker.rb

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,10 @@ def self.concrete_subclasses
9090
leaf_subclasses | descendants.select { |d| d.try(:acts_as_sti_leaf_class?) }
9191
end
9292

93-
class_attribute :default_queue_name, :required_roles, :maximum_workers_count, :include_stopping_workers_on_synchronize
93+
class_attribute :default_queue_name, :required_roles, :maximum_workers_count, :include_stopping_workers_on_synchronize, :worker_settings_paths
9494
self.include_stopping_workers_on_synchronize = false
9595
self.required_roles = []
96+
self.worker_settings_paths = []
9697

9798
def self.server_scope
9899
return current_scope if current_scope && current_scope.where_values_hash.include?('miq_server_id')
@@ -205,31 +206,38 @@ def self.fetch_worker_settings_from_options_hash(options_hash, raw = false)
205206
classes.each do |c|
206207
section = section[c]
207208
raise _("Missing config section %{section_name}") % {:section_name => c} if section.nil?
209+
208210
defaults = section[:defaults]
209211
unless defaults.nil?
210-
defaults.delete_if {|k, v| v == Vmdb::Settings::RESET_VALUE }
212+
defaults.delete_if { |_k, v| v == Vmdb::Settings::RESET_VALUE }
211213
settings.merge!(defaults)
212214
end
213215
end
214216

215-
section.delete_if {|k, v| v == Vmdb::Settings::RESET_VALUE }
217+
section.delete_if { |_k, v| v == Vmdb::Settings::RESET_VALUE }
216218
settings.merge!(section)
219+
normalize_settings!(settings) unless raw == true
220+
end
217221

218-
# If not specified, provide the worker_settings cleaned up in fixnums, etc. instead of 1.seconds, 10.megabytes
219-
# Clean up the configuration values in a format like "30.seconds"
220-
unless raw == true
221-
settings.keys.each do |k|
222-
if settings[k].kind_of?(String)
223-
if settings[k].number_with_method?
224-
settings[k] = settings[k].to_i_with_method
225-
elsif settings[k] =~ /\A\d+(.\d+)?\z/ # case where int/float saved as string
226-
settings[k] = settings[k].to_i
227-
end
228-
end
222+
settings
223+
end
224+
225+
# If not specified, provide the worker_settings cleaned up in fixnums, etc. instead of 1.seconds, 10.megabytes
226+
# and decrypt any values which are encrypted with ManageIQ::Password.
227+
def self.normalize_settings!(settings, recurse: false)
228+
settings.each_key do |k|
229+
if settings[k].kind_of?(Hash) && recurse
230+
normalize_settings!(settings[k])
231+
elsif settings[k].kind_of?(String)
232+
if settings[k].number_with_method?
233+
settings[k] = settings[k].to_i_with_method
234+
elsif settings[k].match?(/\A\d+(.\d+)?\z/) # case where int/float saved as string
235+
settings[k] = settings[k].to_i
236+
elsif ManageIQ::Password.encrypted?(settings[k])
237+
settings[k] = ManageIQ::Password.decrypt(settings[k])
229238
end
230239
end
231240
end
232-
settings
233241
end
234242

235243
def worker_settings(options = {})

app/models/miq_worker/runner.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,9 +485,17 @@ def set_process_title
485485
private
486486

487487
def worker_options
488+
settings = {
489+
:worker_settings => worker_settings
490+
}
491+
492+
worker.class.worker_settings_paths.to_a.each do |settings_path|
493+
settings.store_path(settings_path, Settings.to_hash.dig(*settings_path))
494+
end
495+
488496
{
489497
:messaging => MiqQueue.messaging_client_options,
490-
:settings => Settings.to_hash
498+
:settings => worker.class.normalize_settings!(settings, :recurse => true)
491499
}
492500
end
493501

spec/models/miq_worker_spec.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,35 @@ def check_has_required_role(worker_role_names, expected_result)
267267
.worker_settings(:config => settings)[:memory_threshold]
268268
expect(actual).to eq(1.terabyte)
269269
end
270+
271+
context "with encrypted values" do
272+
let(:settings) do
273+
{
274+
:workers => {
275+
:worker_base => {
276+
:defaults => {:memory_threshold => "100.megabytes"},
277+
:queue_worker_base => {
278+
:defaults => {:memory_threshold => "300.megabytes"},
279+
:ems_refresh_worker => {
280+
:defaults => {:memory_threshold => "500.megabytes"},
281+
:ems_refresh_worker_amazon => {
282+
:memory_threshold => "700.megabytes",
283+
:proxy_password => ManageIQ::Password.encrypt("password")
284+
}
285+
}
286+
}
287+
}
288+
},
289+
:ems => {:ems_amazon => {}}
290+
}
291+
end
292+
293+
it "decrypts values" do
294+
expect(
295+
ManageIQ::Providers::Amazon::CloudManager::RefreshWorker.worker_settings[:proxy_password]
296+
).to eq("password")
297+
end
298+
end
270299
end
271300

272301
context "with two servers" do

0 commit comments

Comments
 (0)