@@ -25,13 +25,18 @@ class ManageIQ::Providers::Openstack::CloudManager < ManageIQ::Providers::CloudM
2525 require_nested :Template
2626 require_nested :Vm
2727
28+ # may want to just us an array of child managers instead of this
29+ # it looks cleaner having this relationship,
30+ # but this will not be in sync with cinder/swift manager references
2831 has_many :storage_managers ,
2932 :foreign_key => :parent_ems_id ,
3033 :class_name => "ManageIQ::Providers::StorageManager" ,
3134 :autosave => true
3235 has_many :snapshots , :through => :vms_and_templates
36+
3337 include ManageIQ ::Providers ::Openstack ::CinderManagerMixin
34- include SwiftManagerMixin
38+ include ManageIQ ::Providers ::Openstack ::SwiftManagerMixin
39+ include ManageIQ ::Providers ::Openstack ::NetworkManagerMixin
3540 include ManageIQ ::Providers ::Openstack ::ManagerMixin
3641 include ManageIQ ::Providers ::Openstack ::IdentitySyncMixin
3742
@@ -49,9 +54,12 @@ class ManageIQ::Providers::Openstack::CloudManager < ManageIQ::Providers::CloudM
4954 supports :swift_service
5055 supports :create_host_aggregate
5156
57+ # TODO: move to after_initialization
5258 before_create :ensure_managers
5359
60+ # TODO: move to before_validation
5461 before_update :ensure_managers_zone_and_provider_region
62+ # TODO: after fixing inverse_of, this may go away
5563 after_save :refresh_parent_infra_manager
5664
5765 private_class_method def self . provider_id_options
@@ -419,52 +427,19 @@ def ensure_managers
419427 ensure_network_manager
420428 ensure_cinder_manager
421429 ensure_swift_manager
430+ # TODO: remove when this moves to before_initialization
422431 ensure_managers_zone_and_provider_region
423432 end
424433
425- def ensure_managers_zone_and_provider_region
426- if network_manager
427- network_manager . zone_id = zone_id
428- network_manager . tenant_id = tenant_id
429- network_manager . provider_region = provider_region
430- end
431-
432- if cinder_manager
433- cinder_manager . zone_id = zone_id
434- cinder_manager . tenant_id = tenant_id
435- cinder_manager . provider_region = provider_region
436- end
437-
438- if swift_manager
439- swift_manager . zone_id = zone_id
440- swift_manager . tenant_id = tenant_id
441- swift_manager . provider_region = provider_region
442- end
443- end
444-
445- def ensure_network_manager
446- build_network_manager ( :type => 'ManageIQ::Providers::Openstack::NetworkManager' ) unless network_manager
434+ # sigh, methods like this always start out innocent enough
435+ def child_manager_references
436+ [ network_manager , cinder_manager , swift_manager ] . compact
447437 end
448438
449- def ensure_cinder_manager
450- return false if cinder_manager
451- build_cinder_manager ( :type => 'ManageIQ::Providers::Openstack::StorageManager::CinderManager' )
452- true
453- end
454-
455- def ensure_swift_manager
456- return false if swift_manager
457- build_swift_manager ( :type => 'ManageIQ::Providers::StorageManager::SwiftManager' )
458- true
459- end
460-
461- after_save :save_on_other_managers
462-
463- def save_on_other_managers
464- storage_managers . update_all ( :tenant_mapping_enabled => tenant_mapping_enabled )
465- if network_manager
466- network_manager . tenant_mapping_enabled = tenant_mapping_enabled
467- network_manager . save!
439+ def ensure_managers_zone_and_provider_region
440+ child_manager_references . each do |child_manager |
441+ propagate_child_manager_attributes ( child_manager )
442+ child_manager . tenant_mapping_enabled = tenant_mapping_enabled
468443 end
469444 end
470445
0 commit comments