Skip to content

Commit

Permalink
Allow MiqWorker.required_roles to be a lambda
Browse files Browse the repository at this point in the history
To allow for more complex deployment configurations allow the
required_roles property of MiqWorker to be a lambda
  • Loading branch information
agrare committed Jul 6, 2017
1 parent fa18025 commit 0d1eca1
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 18 deletions.
40 changes: 22 additions & 18 deletions app/models/miq_worker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -61,16 +61,18 @@ def self.workers_configured_count
end

def self.has_minimal_env_option?
return false if MiqServer.minimal_env_options.empty? || required_roles.blank?
roles = if required_roles.kind_of?(Proc)
required_roles.call
else
required_roles
end

case required_roles
when String
MiqServer.minimal_env_options.include?(required_roles)
when Array
required_roles.any? { |role| MiqServer.minimal_env_options.include?(role) }
else
raise _("Unexpected type: <self.required_roles.class.name>")
end
return false if MiqServer.minimal_env_options.empty? || roles.blank?

roles = Array(roles) if roles.kind_of?(String)
raise _("Unexpected type: <self.required_roles.class.name>") unless roles.kind_of?(Array)

roles.any? { |role| MiqServer.minimal_env_options.include?(role) }
end

class_attribute :check_for_minimal_role, :default_queue_name, :required_roles, :maximum_workers_count, :include_stopping_workers_on_synchronize
Expand Down Expand Up @@ -121,16 +123,18 @@ def self.find_alive(server_id = nil)
end

def self.has_required_role?
return true if required_roles.blank?
roles = if required_roles.kind_of?(Proc)
required_roles.call
else
required_roles
end

case required_roles
when String
MiqServer.my_server.has_active_role?(required_roles)
when Array
required_roles.any? { |role| MiqServer.my_server.has_active_role?(role) }
else
raise _("Unexpected type: <self.required_roles.class.name>")
end
return true if roles.blank?

roles = Array(roles) if roles.kind_of?(String)
raise _("Unexpected type: <self.required_roles.class.name>") unless roles.kind_of?(Array)

roles.any? { |role| MiqServer.my_server.has_active_role?(role) }
end

def self.enough_resource_to_start_worker?
Expand Down
14 changes: 14 additions & 0 deletions spec/models/miq_worker_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,20 @@ def check_has_required_role(worker_role_names, expected_result)
check_has_required_role(["bah"], false)
end
end

context "when worker roles is a lambda" do
it "that is empty" do
check_has_required_role(-> { [] }, true)
end

it "that is a subset of server roles" do
check_has_required_role(-> { ["foo"] }, true)
end

it "that is not a subset of server roles" do
check_has_required_role(-> { ["bah"] }, false)
end
end
end

context ".workers_configured_count" do
Expand Down

0 comments on commit 0d1eca1

Please sign in to comment.