Skip to content

Commit 4b61465

Browse files
committed
extend relationships to define the appropriate class names
WIP: quite a bit of stuff has happened since then. there is a HasNetworkManagerMixin that may meet many of the needs WIP: do a diff with origin to make sure the rebase didn't change too much seems quite a few concepts have been changed in master so definitely need to re-evaluate this use parent definition of ensure since they are now pretty generic. They may be no longer necessary and a build_ may suffice. Use parent definition of propagation so all attributes go across Extend parent managers to group the functionality together WIP: quite a bit of stuff has happened since then. there is a HasNetworkManagerMixin that may meet many of the needs
1 parent 7f75ccc commit 4b61465

File tree

2 files changed

+26
-49
lines changed

2 files changed

+26
-49
lines changed

app/models/manageiq/providers/openstack/cloud_manager.rb

Lines changed: 18 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,17 @@ class ManageIQ::Providers::Openstack::CloudManager < ManageIQ::Providers::CloudM
2727
:foreign_key => :parent_ems_id,
2828
:class_name => "ManageIQ::Providers::Openstack::NetworkManager",
2929
:autosave => true,
30-
:dependent => :destroy
30+
:dependent => :destroy,
31+
:inverse_of => :parent_manager
3132
has_many :storage_managers,
3233
:foreign_key => :parent_ems_id,
33-
:class_name => "ManageIQ::Providers::StorageManager",
34+
:class_name => "ManageIQ::Providers::Openstack::StorageManager",
3435
:autosave => true,
35-
:dependent => :destroy
36+
:dependent => :destroy,
37+
:auto_save => true,
38+
:inverse_of => :parent_manager
3639
has_many :snapshots, :through => :vms_and_templates
40+
3741
include ManageIQ::Providers::Openstack::CinderManagerMixin
3842
include ManageIQ::Providers::Openstack::SwiftManagerMixin
3943
include ManageIQ::Providers::Openstack::ManagerMixin
@@ -67,9 +71,12 @@ class ManageIQ::Providers::Openstack::CloudManager < ManageIQ::Providers::CloudM
6771
unsupported_reason_add(:swift_service, "Swift service unavailable") unless openstack_handle.detect_volume_service.name == :swift
6872
end
6973

74+
# TODO: move to after_initialization
7075
before_create :ensure_managers
7176

77+
# TODO: move to before_validation
7278
before_update :ensure_managers_zone_and_provider_region
79+
# TODO: after fixing inverse_of, this may go away
7380
after_save :refresh_parent_infra_manager
7481

7582
private_class_method def self.provider_id_options
@@ -445,51 +452,19 @@ def ensure_managers
445452
ensure_network_manager
446453
ensure_cinder_manager
447454
ensure_swift_manager
455+
# TODO: remove when this moves to before_initialization
448456
ensure_managers_zone_and_provider_region
449457
end
450458

451-
def ensure_managers_zone_and_provider_region
452-
if network_manager
453-
network_manager.enabled = enabled
454-
network_manager.zone_id = zone_id
455-
network_manager.tenant_id = tenant_id
456-
network_manager.provider_region = provider_region
457-
end
458-
459-
if cinder_manager
460-
cinder_manager.enabled = enabled
461-
cinder_manager.zone_id = zone_id
462-
cinder_manager.tenant_id = tenant_id
463-
cinder_manager.provider_region = provider_region
464-
end
465-
466-
if swift_manager
467-
swift_manager.enabled = enabled
468-
swift_manager.zone_id = zone_id
469-
swift_manager.tenant_id = tenant_id
470-
swift_manager.provider_region = provider_region
471-
end
459+
# sigh, methods like this always start out innocent enough
460+
def child_manager_references
461+
[network_manager, cinder_manager, swift_manager].compact
472462
end
473463

474-
def ensure_network_manager
475-
build_network_manager unless network_manager
476-
end
477-
478-
def ensure_cinder_manager
479-
build_cinder_manager unless cinder_manager
480-
end
481-
482-
def ensure_swift_manager
483-
build_swift_manager unless swift_manager
484-
end
485-
486-
after_save :save_on_other_managers
487-
488-
def save_on_other_managers
489-
storage_managers.update_all(:tenant_mapping_enabled => tenant_mapping_enabled)
490-
if network_manager
491-
network_manager.tenant_mapping_enabled = tenant_mapping_enabled
492-
network_manager.save!
464+
def ensure_managers_zone_and_provider_region
465+
child_manager_references.each do |child_manager|
466+
propagate_child_manager_attributes(child_manager)
467+
child_manager.tenant_mapping_enabled = tenant_mapping_enabled
493468
end
494469
end
495470

app/models/manageiq/providers/openstack/infra_manager.rb

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,17 @@ class ManageIQ::Providers::Openstack::InfraManager < ManageIQ::Providers::InfraM
1414

1515
include ManageIQ::Providers::Openstack::ManagerMixin
1616
include HasManyOrchestrationStackMixin
17-
include HasNetworkManagerMixin
17+
include HasNetworkManagerMixin # TODO: also included in parent class
18+
19+
has_one :network_manager,
20+
:foreign_key => :parent_ems_id,
21+
:class_name => "ManageIQ::Providers::Openstack::NetworkManager",
22+
:autosave => true,
23+
:dependent => :destroy
1824

1925
before_save :ensure_parent_provider
2026
before_destroy :destroy_parent_provider
21-
before_create :ensure_managers
27+
before_create :ensure_managers # defined by HasNetworkManagerMixin
2228
before_update :ensure_managers_zone_and_provider_region
2329

2430
supports :create
@@ -286,10 +292,6 @@ def self.params_for_create
286292
}
287293
end
288294

289-
def ensure_network_manager
290-
build_network_manager(:type => 'ManageIQ::Providers::Openstack::NetworkManager') unless network_manager
291-
end
292-
293295
def allow_targeted_refresh?
294296
false
295297
end

0 commit comments

Comments
 (0)