diff --git a/lib/embedded_ansible.rb b/lib/embedded_ansible.rb index 255396951f7c..7a85ee8ac2bb 100644 --- a/lib/embedded_ansible.rb +++ b/lib/embedded_ansible.rb @@ -10,7 +10,7 @@ def self.new end def self.detect_available_platform - subclasses.detect(&:available?) || NullEmbeddedAnsible + subclasses.sort.detect(&:available?) || NullEmbeddedAnsible end def self.available? @@ -21,6 +21,14 @@ def self.enabled? MiqServer.my_server(true).has_active_role?(ANSIBLE_ROLE) end + def self.priority + 0 + end + + def self.<=>(other_embedded_ansible) + other_embedded_ansible.priority <=> priority + end + def alive? return false unless configured? && running? begin diff --git a/lib/embedded_ansible/appliance_embedded_ansible.rb b/lib/embedded_ansible/appliance_embedded_ansible.rb index d559c4573196..b13febb1353c 100644 --- a/lib/embedded_ansible/appliance_embedded_ansible.rb +++ b/lib/embedded_ansible/appliance_embedded_ansible.rb @@ -18,6 +18,10 @@ def self.available? required_rpms.subset?(LinuxAdmin::Rpm.list_installed.keys.to_set) end + def self.priority + 30 + end + def initialize require "linux_admin" end diff --git a/lib/embedded_ansible/container_embedded_ansible.rb b/lib/embedded_ansible/container_embedded_ansible.rb index 19855fdafe0b..2d4b4136af5f 100644 --- a/lib/embedded_ansible/container_embedded_ansible.rb +++ b/lib/embedded_ansible/container_embedded_ansible.rb @@ -5,6 +5,10 @@ def self.available? ContainerOrchestrator.available? end + def self.priority + 20 + end + def start miq_database.set_ansible_admin_authentication(:password => ENV["ANSIBLE_ADMIN_PASSWORD"]) ContainerOrchestrator.new.scale(ANSIBLE_DC_NAME, 1) diff --git a/lib/embedded_ansible/docker_embedded_ansible.rb b/lib/embedded_ansible/docker_embedded_ansible.rb index 36e89c4862b9..2e5ba5986432 100644 --- a/lib/embedded_ansible/docker_embedded_ansible.rb +++ b/lib/embedded_ansible/docker_embedded_ansible.rb @@ -8,6 +8,10 @@ def self.available? false end + def self.priority + 10 + end + def initialize super require 'docker' diff --git a/spec/lib/embedded_ansible_spec.rb b/spec/lib/embedded_ansible_spec.rb index be32c10a32c3..84334c485d12 100644 --- a/spec/lib/embedded_ansible_spec.rb +++ b/spec/lib/embedded_ansible_spec.rb @@ -1,6 +1,12 @@ require 'docker' describe EmbeddedAnsible do + describe ".<=>" do + it "allows classes to be sorted by priority" do + expect(EmbeddedAnsible.subclasses.sort).to eq([ApplianceEmbeddedAnsible, ContainerEmbeddedAnsible, DockerEmbeddedAnsible, NullEmbeddedAnsible]) + end + end + context "with no available subclass" do before do expect(MiqEnvironment::Command).to receive(:is_appliance?).and_return(false)