Skip to content

Commit

Permalink
subclass kubevirt for OSV
Browse files Browse the repository at this point in the history
  • Loading branch information
nasark committed Aug 29, 2024
1 parent 91d1f04 commit a7a29b6
Show file tree
Hide file tree
Showing 27 changed files with 4,857 additions and 1 deletion.
15 changes: 15 additions & 0 deletions app/assets/images/svg/vendor-openshift_infra.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 changes: 22 additions & 1 deletion app/models/manageiq/providers/openshift/container_manager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@
class ManageIQ::Providers::Openshift::ContainerManager < ManageIQ::Providers::Kubernetes::ContainerManager
DEFAULT_EXTERNAL_LOGGING_ROUTE_NAME = "logging-kibana-ops".freeze

has_one :infra_manager,
:foreign_key => :parent_ems_id,
:class_name => "ManageIQ::Providers::Openshift::InfraManager",
:autosave => true,
:inverse_of => :parent_manager,
:dependent => :destroy

include ManageIQ::Providers::Openshift::ContainerManager::Options

supports :catalog
Expand All @@ -21,9 +28,23 @@ def self.event_monitor_class
ManageIQ::Providers::Openshift::ContainerManager::EventCatcher
end

def self.virtualization_options
[
{
:label => _('Disabled'),
:value => 'none',
},
{
:label => _('OpenShift Virtualization'),
:value => 'kubevirt',
:pivot => 'endpoints.kubevirt.hostname',
},
]
end

def self.raw_connect(hostname, port, options)
options[:service] ||= "openshift"
send("#{options[:service]}_connect", hostname, port, options)
send(:"#{options[:service]}_connect", hostname, port, options)
end

def self.openshift_connect(hostname, port, options)
Expand Down
46 changes: 46 additions & 0 deletions app/models/manageiq/providers/openshift/infra_manager.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
ManageIQ::Providers::Kubevirt::InfraManager.include(ActsAsStiLeafClass)

class ManageIQ::Providers::Openshift::InfraManager < ManageIQ::Providers::Kubevirt::InfraManager
belongs_to :parent_manager,
:foreign_key => :parent_ems_id,
:inverse_of => :infra_manager,
:class_name => "ManageIQ::Providers::Openshift::ContainerManager"

#
# This is the list of features that this provider supports:
#
supports :catalog
supports :provisioning

def self.ems_type
@ems_type ||= "openshift_infra".freeze
end

def self.description
@description ||= "OpenShift Virtualization".freeze
end

def self.catalog_types
{"openshift" => N_("OpenShift Virtualization")}
end

def self.vendor
"openshift_infra".freeze
end

def self.product_name
"OpenShift Virtualization".freeze
end

def self.version
"0.1.0".freeze
end

def default_authentication_type
:openshift
end

def self.display_name(number = 1)
n_('Infrastructure Provider (OpenShift Virtualization)', 'Infrastructure Providers (OpenShift Virtualization)', number)
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ManageIQ::Providers::Kubevirt::InfraManager::Cluster.include(ActsAsStiLeafClass)

class ManageIQ::Providers::Openshift::InfraManager::Cluster < ManageIQ::Providers::Kubevirt::InfraManager::Cluster
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ManageIQ::Providers::Kubevirt::InfraManager::Connection.include(ActsAsStiLeafClass)

class ManageIQ::Providers::Openshift::InfraManager::Connection < ManageIQ::Providers::Kubevirt::InfraManager::Connection
end
4 changes: 4 additions & 0 deletions app/models/manageiq/providers/openshift/infra_manager/host.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ManageIQ::Providers::Kubevirt::InfraManager::Host.include(ActsAsStiLeafClass)

class ManageIQ::Providers::Openshift::InfraManager::Host < ManageIQ::Providers::Kubevirt::InfraManager::Host
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ManageIQ::Providers::Kubevirt::InfraManager::Provision.include(ActsAsStiLeafClass)

class ManageIQ::Providers::Openshift::InfraManager::Provision < ManageIQ::Providers::Kubevirt::InfraManager::Provision
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class ManageIQ::Providers::Openshift::InfraManager::ProvisionWorkflow < ManageIQ::Providers::Kubevirt::InfraManager::ProvisionWorkflow
def self.provider_model
ManageIQ::Providers::Openshift::InfraManager
end

def dialog_name_from_automate(message = 'get_dialog_name')
super(message, {'platform' => 'openshift'})
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class ManageIQ::Providers::Openshift::InfraManager::RefreshWorker < ManageIQ::Providers::BaseManager::RefreshWorker
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
require 'concurrent/atomic/atomic_boolean'

class ManageIQ::Providers::Openshift::InfraManager::RefreshWorker::Runner < ManageIQ::Providers::Kubevirt::InfraManager::RefreshWorker::Runner
private

def provider_class
ManageIQ::Providers::Openshift
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class ManageIQ::Providers::Openshift::InfraManager::Refresher < ManageIQ::Providers::Kubevirt::InfraManager::Refresher
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ManageIQ::Providers::Kubevirt::InfraManager::Storage.include(ActsAsStiLeafClass)

class ManageIQ::Providers::Openshift::InfraManager::Storage < ManageIQ::Providers::Kubevirt::InfraManager::Storage
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
ManageIQ::Providers::Kubevirt::InfraManager::Template.include(ActsAsStiLeafClass)

class ManageIQ::Providers::Openshift::InfraManager::Template < ManageIQ::Providers::Kubevirt::InfraManager::Template
def self.display_name(number = 1)
n_('Template (OpenShift Virtualization)', 'Templates (OpenShift Virtualization)', number)
end
end
7 changes: 7 additions & 0 deletions app/models/manageiq/providers/openshift/infra_manager/vm.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
ManageIQ::Providers::Kubevirt::InfraManager::Vm.include(ActsAsStiLeafClass)

class ManageIQ::Providers::Openshift::InfraManager::Vm < ManageIQ::Providers::Kubevirt::InfraManager::Vm
def self.display_name(number = 1)
n_('Virtual Machine (OpenShift Virtualization)', 'Virtual Machines (OpenShift Virtualization)', number)
end
end
37 changes: 37 additions & 0 deletions app/models/manageiq/providers/openshift/inventory.rb
Original file line number Diff line number Diff line change
@@ -1,2 +1,39 @@
class ManageIQ::Providers::Openshift::Inventory < ManageIQ::Providers::Kubernetes::Inventory
def self.parser_class_for(ems, target)
if !ems.kind_of?(EmsInfra)
super
else
parser_type = if target_is_vm?(target)
"PartialTargetRefresh"
else
"FullRefresh"
end
"ManageIQ::Providers::Openshift::Inventory::Parser::InfraManager::#{parser_type}".safe_constantize
end
end

def self.build(ems, target)
if !ems.kind_of?(EmsInfra)
super
else
collector_class = collector_class_for(ems, target)

collector = if target_is_vm?(target)
collector_class.new(ems, target)
else
collector_class.new(ems, ems)
end

persister = persister_class_for(ems, target).new(ems, target)
new(
persister,
collector,
parser_classes_for(ems, target).map(&:new)
)
end
end

def self.target_is_vm?(target)
target.kind_of?(ManageIQ::Providers::Openshift::InfraManager::Vm)
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class ManageIQ::Providers::Openshift::Inventory::Collector::InfraManager < ManageIQ::Providers::Kubevirt::Inventory::Collector
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class ManageIQ::Providers::Openshift::Inventory::Parser::InfraManager < ManageIQ::Providers::Kubevirt::Inventory::Parser
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class ManageIQ::Providers::Openshift::Inventory::Parser::InfraManager::FullRefresh < ManageIQ::Providers::Kubevirt::Inventory::Parser::FullRefresh
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class ManageIQ::Providers::Openshift::Inventory::Parser::InfraManager::PartialRefresh < ManageIQ::Providers::Kubevirt::Inventory::Parser::PartialRefresh
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class ManageIQ::Providers::Openshift::Inventory::Parser::InfraManager::PartialTargetRefresh < ManageIQ::Providers::Kubevirt::Inventory::Parser::PartialTargetRefresh
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class ManageIQ::Providers::Openshift::Inventory::Persister::InfraManager < ManageIQ::Providers::Kubevirt::Inventory::Persister
end
1 change: 1 addition & 0 deletions config/settings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,4 @@
:ems_metrics_collector_worker_openshift: {}
:ems_refresh_worker:
:ems_refresh_worker_openshift: {}
:ems_refresh_worker_openshift_infra: {}
7 changes: 7 additions & 0 deletions spec/factories/ext_management_system.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,11 @@
zone
end
end

factory :ems_openshift_infra,
:aliases => ["manageiq/providers/openshift/infra_manager"],
:class => "ManageIQ::Providers::Openshift::InfraManager",
:parent => :ems_kubevirt do
parent_manager { FactoryBot.create(:ems_openshift) }
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
require 'json'
require 'recursive_open_struct'

describe ManageIQ::Providers::Openshift::Inventory::Parser::InfraManager::FullRefresh do
context '#refresh' do
let(:ems) do
host = Rails.application.secrets.openshift[:hostname]
token = Rails.application.secrets.openshift[:token]
port = Rails.application.secrets.openshift[:port]

FactoryBot.create(:ems_openshift_infra,
:name => "openshift Virtualization Manager",
:connection_configurations => [{:endpoint => {:role => :default,
:hostname => host,
:port => port,
:security_protocol => "ssl-without-validation"},
:authentication => {:role => :bearer,
:auth_key => token,
:userid => "_"}}])
end

it 'works correctly with one node' do
2.times do
VCR.use_cassette("full_refresh") do
EmsRefresh.refresh(ems)
end

assert_counts
assert_specific_vm
assert_specific_host
assert_specific_cluster
assert_specific_storage
end
end

def assert_counts
expect(ems.vms.count).to eq(1)
expect(ems.hosts.count).to eq(6)
expect(ems.clusters.count).to eq(1)
expect(ems.storages.count).to eq(1)
end

def assert_specific_vm
vm = ems.vms.find_by(:name => "fedora-gold-porcupine-50")
expect(vm).to have_attributes(
:ems_ref => "50c54ad2-c2a6-44ae-89f5-14d2f313882c",
:name => "fedora-gold-porcupine-50",
:type => "ManageIQ::Providers::Openshift::InfraManager::Vm",
:uid_ems => "50c54ad2-c2a6-44ae-89f5-14d2f313882c",
:vendor => "openshift_infra",
:power_state => "on",
:connection_state => "connected"
)
end

def assert_specific_host
host = ems.hosts.find_by(:ems_ref => "248af02e-7da9-49a4-b026-1dd1a341b0de")
expect(host).to have_attributes(
:connection_state => "connected",
:ems_ref => "248af02e-7da9-49a4-b026-1dd1a341b0de",
:type => "ManageIQ::Providers::Openshift::InfraManager::Host",
:uid_ems => "248af02e-7da9-49a4-b026-1dd1a341b0de",
:vmm_product => "OpenShift Virtualization",
:vmm_vendor => "openshift_infra",
:vmm_version => "0.1.0",
:ems_cluster => ems.ems_clusters.find_by(:ems_ref => "0")
)
end

def assert_specific_cluster
cluster = ems.ems_clusters.find_by(:ems_ref => "0")
expect(cluster).to have_attributes(
:ems_ref => "0",
:name => "openshift Virtualization Manager",
:uid_ems => "0",
:type => "ManageIQ::Providers::Openshift::InfraManager::Cluster"
)
end

def assert_specific_storage
storage = ems.storages.find_by(:ems_ref => "0")
expect(storage).to have_attributes(
:name => "openshift Virtualization Manager",
:total_space => 0,
:free_space => 0,
:ems_ref => "0",
:type => "ManageIQ::Providers::Openshift::InfraManager::Storage"
)
end
end
end
Loading

0 comments on commit a7a29b6

Please sign in to comment.