From: Tomas Sedovic <[email protected]>
Adding a new cloud account imports all the backend realms from the given
provider. Additionaly, we add frontend realms that map to the backend.
Only one frontend realm is created for every actual realm that the cloud
provider serves, but each cloud account imports its own set of backend realms.
---
src/app/models/cloud_account.rb | 16 ++++++++++++++++
src/app/models/realm.rb | 13 ++++++++++++-
src/db/migrate/20090804141600_create_realms.rb | 8 +++++++-
3 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/src/app/models/cloud_account.rb b/src/app/models/cloud_account.rb
index e5978a1..8ea22e1 100644
--- a/src/app/models/cloud_account.rb
+++ b/src/app/models/cloud_account.rb
@@ -97,6 +97,22 @@ class CloudAccount < ActiveRecord::Base
:name => realm.name ? realm.name : realm.id,
:provider_id => provider.id)
ar_realm.save!
+
+ frontend_realm = Realm.new(:external_key => ar_realm.external_key,
+ :name => ar_realm.name,
+ :provider_id => nil)
+
+ available_realms = Realm.frontend.find(:all, :conditions => {
+ :external_key => frontend_realm.external_key })
+
+ if available_realms.empty?
+ frontend_realm.backend_realms << ar_realm
+ frontend_realm.save!
+ else
+ available_realms.each do |r|
+ r.backend_realms << ar_realm
+ end
+ end
end
end
images.each do |image|
diff --git a/src/app/models/realm.rb b/src/app/models/realm.rb
index 07bb306..bfc9144 100644
--- a/src/app/models/realm.rb
+++ b/src/app/models/realm.rb
@@ -22,8 +22,19 @@
class Realm < ActiveRecord::Base
has_many :instances
belongs_to :provider
+ named_scope :frontend, :conditions => { :provider_id => nil }
- validates_presence_of :provider_id
+ has_and_belongs_to_many :frontend_realms,
+ :class_name => "Realm",
+ :join_table => "realm_map",
+ :foreign_key => "backend_realm_id",
+ :association_foreign_key => "frontend_realm_id"
+
+ has_and_belongs_to_many :backend_realms,
+ :class_name => "Realm",
+ :join_table => "realm_map",
+ :foreign_key => "frontend_realm_id",
+ :association_foreign_key => "backend_realm_id"
validates_presence_of :external_key
validates_uniqueness_of :external_key, :scope => :provider_id
diff --git a/src/db/migrate/20090804141600_create_realms.rb
b/src/db/migrate/20090804141600_create_realms.rb
index 3d557d8..054721f 100644
--- a/src/db/migrate/20090804141600_create_realms.rb
+++ b/src/db/migrate/20090804141600_create_realms.rb
@@ -24,13 +24,19 @@ class CreateRealms < ActiveRecord::Migration
create_table :realms do |t|
t.string :external_key, :null => false
t.string :name, :null => false, :limit => 1024
- t.integer :provider_id, :null => false
+ t.integer :provider_id
t.integer :lock_version, :default => 0
t.timestamps
end
+
+ create_table "realm_map", :force => true, :id => false do |t|
+ t.column "frontend_realm_id", :integer
+ t.column "backend_realm_id", :integer
+ end
end
def self.down
+ drop_table :realm_map
drop_table :realms
end
end
--
1.7.2.2
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel