-
Notifications
You must be signed in to change notification settings - Fork 900
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix ChargebackVm.extra_resources_without_rollups
hard-coding SCVMM VMs
#22288
Fix ChargebackVm.extra_resources_without_rollups
hard-coding SCVMM VMs
#22288
Conversation
app/models/vm_or_template.rb
Outdated
|
||
# when looking at supported features, only look at the classes permitted to be used | ||
singleton_class.send(:alias_method, :supported_subclasses, :concrete_subclasses) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thinking this should probably go in a mixin or ApplicationRecord
since it is common for all classes which could use ActsAsStiLeafClass
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
+1 for mixin, but I'm curious what it would look like. Definitely for a separate PR.
supports :capture do | ||
metrics_capture_klass = "#{self.class.module_parent.name}::MetricsCapture".safe_constantize | ||
unless metrics_capture_klass&.method_defined?(:perf_collect_metrics) | ||
_('This provider does not support metrics collection') | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NOTE since this CiMixin
is included in base classes like ::VmOrTemplate
and ::Host
so every subclass would report that it supported capture, even if it didn't. You had to check each instance in order to tell if the class supported metrics.
ec813f3
to
47c056a
Compare
_('This provider does not support metrics collection') | ||
end | ||
end | ||
supports_not :capture |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Going to switch this to supports_not
at the base classes like we do for other features, and supports :capture
only in classes that support it.
These are the models which include Metric::CiMixin
app/models/miq_region.rb
app/models/service.rb
app/models/zone.rb
app/models/storage.rb
app/models/ext_management_system.rb
app/models/host.rb
app/models/vm_or_template.rb
app/models/availability_zone.rb
app/models/container.rb
app/models/container_group.rb
app/models/container_image.rb
app/models/container_node.rb
app/models/container_project.rb
app/models/container_replicator.rb
app/models/container_service.rb
app/models/ems_cluster.rb
app/models/host_aggregate.rb
app/models/miq_enterprise.rb
And this is the full list of classes we need to add supports :capture
to (some of these actually not like ManageIQ::Providers::Vmware::InfraManager::OvfService
)
ci_mixin_classes.flat_map do |klass|
?> klass.descendants.select { |k| klass_name = "#{k.module_parent}::MetricsCapture"; klass_name.safe_constantize&.name == klass_name }
>> end.map(&:name)
=>
["ManageIQ::Providers::Vmware::InfraManager::OvfService",
"ManageIQ::Providers::Vmware::InfraManager::Storage",
"ManageIQ::Providers::Ovirt::InfraManager::Storage",
"ManageIQ::Providers::Ovirt::InfraManager::IsoDatastore",
"ManageIQ::Providers::Redhat::InfraManager::Storage",
"ManageIQ::Providers::Redhat::InfraManager::IsoDatastore",
"ManageIQ::Providers::IbmPowerHmc::InfraManager::Storage",
"ManageIQ::Providers::IbmPowerHmc::InfraManager::MediaRepository",
"ManageIQ::Providers::Vmware::InfraManager::Host",
"ManageIQ::Providers::Vmware::InfraManager::HostEsx",
"ManageIQ::Providers::IbmPowerHmc::InfraManager::Host",
"ManageIQ::Providers::Ovirt::InfraManager::Host",
"ManageIQ::Providers::Redhat::InfraManager::Host",
"ManageIQ::Providers::Openstack::InfraManager::Host",
"ManageIQ::Providers::Vmware::InfraManager::Vm",
"ManageIQ::Providers::IbmPowerHmc::InfraManager::Vm",
"ManageIQ::Providers::IbmPowerHmc::InfraManager::Lpar",
"ManageIQ::Providers::IbmPowerHmc::InfraManager::Vios",
"ManageIQ::Providers::Ovirt::InfraManager::Vm",
"ManageIQ::Providers::Redhat::InfraManager::Vm",
"ManageIQ::Providers::Amazon::CloudManager::Vm",
"ManageIQ::Providers::Azure::CloudManager::Vm",
"ManageIQ::Providers::AzureStack::CloudManager::Vm",
"ManageIQ::Providers::Google::CloudManager::Vm",
"ManageIQ::Providers::IbmCloud::VPC::CloudManager::Vm",
"ManageIQ::Providers::Openstack::CloudManager::Vm",
"ManageIQ::Providers::IbmCic::CloudManager::Vm",
"ManageIQ::Providers::IbmPowerVc::CloudManager::Vm",
"ManageIQ::Providers::OracleCloud::CloudManager::Vm",
"ManageIQ::Providers::Vmware::InfraManager::Template",
"ManageIQ::Providers::IbmPowerHmc::InfraManager::Template",
"ManageIQ::Providers::Ovirt::InfraManager::Template",
"ManageIQ::Providers::Redhat::InfraManager::Template",
"ManageIQ::Providers::Openstack::InfraManager::Template",
"ManageIQ::Providers::Amazon::CloudManager::Template",
"ManageIQ::Providers::Azure::CloudManager::Template",
"ManageIQ::Providers::Google::CloudManager::Template",
"ManageIQ::Providers::IbmCloud::VPC::CloudManager::Template",
"ManageIQ::Providers::Openstack::CloudManager::BaseTemplate",
"ManageIQ::Providers::Openstack::CloudManager::Template",
"ManageIQ::Providers::IbmCic::CloudManager::Template",
"ManageIQ::Providers::IbmPowerVc::CloudManager::Template",
"ManageIQ::Providers::Openstack::CloudManager::VolumeSnapshotTemplate",
"ManageIQ::Providers::Openstack::CloudManager::VolumeTemplate",
"ManageIQ::Providers::OracleCloud::CloudManager::Template",
"ManageIQ::Providers::Amazon::CloudManager::AvailabilityZone",
"ManageIQ::Providers::Azure::CloudManager::AvailabilityZone",
"ManageIQ::Providers::AzureStack::CloudManager::AvailabilityZone",
"ManageIQ::Providers::Google::CloudManager::AvailabilityZone",
"ManageIQ::Providers::IbmCloud::VPC::CloudManager::AvailabilityZone",
"ManageIQ::Providers::Openstack::CloudManager::AvailabilityZone",
"ManageIQ::Providers::Openstack::CloudManager::AvailabilityZoneNull",
"ManageIQ::Providers::IbmCic::CloudManager::AvailabilityZone",
"ManageIQ::Providers::IbmCic::CloudManager::AvailabilityZoneNull",
"ManageIQ::Providers::IbmPowerVc::CloudManager::AvailabilityZone",
"ManageIQ::Providers::IbmPowerVc::CloudManager::AvailabilityZoneNull",
"ManageIQ::Providers::OracleCloud::CloudManager::AvailabilityZone",
"ManageIQ::Providers::Kubernetes::ContainerManager::Container",
"ManageIQ::Providers::IbmCloud::ContainerManager::Container",
"ManageIQ::Providers::Kubernetes::ContainerManager::ContainerGroup",
"ManageIQ::Providers::IbmCloud::ContainerManager::ContainerGroup",
"ManageIQ::Providers::Kubernetes::ContainerManager::ContainerNode",
"ManageIQ::Providers::IbmCloud::ContainerManager::ContainerNode",
"ManageIQ::Providers::Vmware::InfraManager::Cluster",
"ManageIQ::Providers::Ovirt::InfraManager::Cluster",
"ManageIQ::Providers::Redhat::InfraManager::Cluster",
"ManageIQ::Providers::Openstack::InfraManager::Cluster",
"ManageIQ::Providers::Openstack::CloudManager::HostAggregate",
"ManageIQ::Providers::IbmCic::CloudManager::HostAggregate",
"ManageIQ::Providers::IbmPowerVc::CloudManager::HostAggregate"]
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Total aside, but capture is kind of a terrible name for metrics collection We should consider a different name, like :metrics_capture
or even just :metrics
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah I like just supports :metrics
, we already have simply supports :events
From Pull Request: ManageIQ/manageiq#22288
f4512ef
to
4c1377e
Compare
24fc227
to
392c5cb
Compare
Checked commits agrare/manageiq@00e4a12~...392c5cb with ruby 2.6.10, rubocop 1.28.2, haml-lint 0.35.0, and yamllint |
ChargebackVm.extra_resources_without_rollups
hard-coding SCVMM VMsChargebackVm.extra_resources_without_rollups
hard-coding SCVMM VMs
@miq-bot cross-repo-tests manageiq-api, manageiq-ui-classic |
From Pull Request: ManageIQ/manageiq#22288
Cross-repo is "green" on UI/API (only failures are the usual authentication_spec errors we always see on -api) |
@Fryguy this should be good to go if you can take a look |
See also:
The
.extra_resources_without_rollups
method is checking for@options.include_metrics
and adding in SCVMM type VMs because they do not support metrics. This a. hard-codes a plugin class and b. ignores other types which do not support metrics capture.I suspect at the time SCVMM was the only VM provider which didn't support metrics, but that assumption is no longer true.
Depends on:
supports :capture
to supported subclasses manageiq-providers-amazon#803supports :capture
to supported subclasses manageiq-providers-azure#529supports :capture
to supported subclasses manageiq-providers-azure_stack#90supports :capture
to supported subclasses manageiq-providers-dummy_provider#51supports :capture
to supported subclasses manageiq-providers-google#241supports :capture
to supported subclasses manageiq-providers-ibm_cloud#442supports :capture
to supported subclasses manageiq-providers-ibm_cic#27supports :capture
to supported subclasses manageiq-providers-kubernetes#480supports :capture
to supported subclasses manageiq-providers-openstack#834supports :capture
to supported subclasses manageiq-providers-oracle_cloud#83supports :capture
to supported subclasses manageiq-providers-ovirt#627supports :capture
to supported subclasses manageiq-providers-ibm_power_hmc#130supports :capture
to supported subclasses manageiq-providers-cisco_intersight#86supports :capture
to supported subclasses manageiq-providers-vmware#846