On 01/27/2011 10:43 AM, jzigmund(a)redhat.com wrote:
From: Jozef Zigmund<jzigmund(a)redhat.com>
Inside this patch I rename model of CloudAccount to ProviderAccount. Also I refactor all
codes where this model was called.
---
.../admin/provider_accounts_controller.rb | 16 +-
src/app/controllers/cloud_accounts_controller.rb | 181 -----------------
src/app/controllers/dashboard_controller.rb | 6 +-
src/app/controllers/permissions_controller.rb | 6 +-
.../controllers/provider_accounts_controller.rb | 181 +++++++++++++++++
src/app/controllers/quotas_controller.rb | 2 +-
src/app/models/cloud_account.rb | 205 --------------------
src/app/models/image.rb | 2 +-
src/app/models/permission.rb | 2 +-
src/app/models/provider.rb | 4 +-
src/app/models/provider_account.rb | 204 +++++++++++++++++++
src/app/services/data_service_active_record.rb | 8 +-
src/app/services/graph_service.rb | 2 +-
src/app/views/cloud_accounts/_form.haml | 52 -----
src/app/views/cloud_accounts/edit.haml | 17 --
src/app/views/cloud_accounts/index.haml | 25 ---
src/app/views/cloud_accounts/new.haml | 17 --
src/app/views/provider_accounts/_form.haml | 52 +++++
src/app/views/provider_accounts/edit.haml | 17 ++
src/app/views/provider_accounts/index.haml | 25 +++
src/app/views/provider_accounts/new.haml | 17 ++
src/classad_plugin/classad_plugin.rb | 2 +-
src/config/old_navigation.rb | 2 +-
src/config/routes.rb | 4 +-
...824_rename_cloud_account_to_provider_account.rb | 9 +
src/db/seeds.rb | 12 +-
src/dbomatic/dbomatic | 2 +-
.../step_definitions/provider_account_steps.rb | 8 +-
src/features/step_definitions/provider_steps.rb | 2 +-
src/features/support/custom.rb | 2 +-
src/features/support/paths.rb | 2 +-
src/lib/tasks/demo_data.rake | 4 +-
.../controllers/cloud_accounts_controller_spec.rb | 92 ---------
.../provider_accounts_controller_spec.rb | 92 +++++++++
src/spec/factories/cloud_account.rb | 21 --
src/spec/factories/provider_account.rb | 21 ++
src/spec/models/cloud_account_spec.rb | 80 --------
src/spec/models/provider_account_spec.rb | 80 ++++++++
src/test/fixtures/roles.yml | 4 +-
src/test/unit/cloud_account_test.rb | 8 -
src/test/unit/provider_account_test.rb | 8 +
41 files changed, 755 insertions(+), 741 deletions(-)
delete mode 100644 src/app/controllers/cloud_accounts_controller.rb
create mode 100644 src/app/controllers/provider_accounts_controller.rb
delete mode 100644 src/app/models/cloud_account.rb
create mode 100644 src/app/models/provider_account.rb
delete mode 100644 src/app/views/cloud_accounts/_form.haml
delete mode 100644 src/app/views/cloud_accounts/edit.haml
delete mode 100644 src/app/views/cloud_accounts/index.haml
delete mode 100644 src/app/views/cloud_accounts/new.haml
create mode 100644 src/app/views/provider_accounts/_form.haml
create mode 100644 src/app/views/provider_accounts/edit.haml
create mode 100644 src/app/views/provider_accounts/index.haml
create mode 100644 src/app/views/provider_accounts/new.haml
create mode 100644
src/db/migrate/20110117140824_rename_cloud_account_to_provider_account.rb
delete mode 100644 src/spec/controllers/cloud_accounts_controller_spec.rb
create mode 100644 src/spec/controllers/provider_accounts_controller_spec.rb
delete mode 100644 src/spec/factories/cloud_account.rb
create mode 100644 src/spec/factories/provider_account.rb
delete mode 100644 src/spec/models/cloud_account_spec.rb
create mode 100644 src/spec/models/provider_account_spec.rb
delete mode 100644 src/test/unit/cloud_account_test.rb
create mode 100644 src/test/unit/provider_account_test.rb
diff --git a/src/app/controllers/admin/provider_accounts_controller.rb
b/src/app/controllers/admin/provider_accounts_controller.rb
index d422a53..e5d3ccd 100644
--- a/src/app/controllers/admin/provider_accounts_controller.rb
+++ b/src/app/controllers/admin/provider_accounts_controller.rb
@@ -17,8 +17,12 @@ class Admin::ProviderAccountsController< ApplicationController
def show
@tab_captions = ['Properties', 'Credentials', 'History',
'Permissions']
+<<<<<<< HEAD
@account = CloudAccount.find(params[:id])
require_privilege(Privilege::VIEW, @account)
+=======
+ @account = ProviderAccount.find(params[:id])
+>>>>>>> Rename CloudAccount to ProviderAccount
@details_tab = params[:details_tab].blank? ? 'properties' :
params[:details_tab]
This is a merge/rebase conflict -- it needs to be resolved before
generating the patch -- like this the code won't actually work. In this
case just put the require_privilege line below the updated @account
assignment
diff --git a/src/app/controllers/provider_accounts_controller.rb
b/src/app/controllers/provider_accounts_controller.rb
new file mode 100644
index 0000000..9fbf126
--- /dev/null
+++ b/src/app/controllers/provider_accounts_controller.rb
@@ -0,0 +1,181 @@
+class ProviderAccountsController< ApplicationController
+ def index
+ @provider = Provider.find(params[:provider_id])
+ require_privilege(Privilege::VIEW, CloudAccount, @provider)
+ end
That should be changed to ProviderAccount from CloudAccount
+
+ def new
+ @provider = Provider.find(params[:provider_id])
+ @cloud_account = ProviderAccount.new
+ @quota = Quota.new
+ require_privilege(Privilege::CREATE, CloudAccount, @provider)
+ end
That should be changed to ProviderAccount from CloudAccount
+
+ def create
+ @provider = Provider.find(params[:provider_id])
+ require_privilege(Privilege::CREATE, ProviderAccount, @provider)
+ @cloud_account = ProviderAccount.new(params[:cloud_account])
params and
instance variables should probably change to
provider_account too
+ @cloud_account.provider = @provider
+ @cloud_account.quota = @quota = Quota.new
+
+ if params[:test_account]
+ test_account(@cloud_account)
+ render :action => 'new' and return
+ end
+
+ limit = params[:quota][:maximum_running_instances] if params[:quota]
+ @cloud_account.quota.set_maximum_running_instances(limit)
+
+ if @cloud_account.invalid?
+ if not @cloud_account.valid_credentials?
+ flash.now[:error] = "The entered credential information is incorrect"
+ elsif @cloud_account.errors.on(:username)
+ flash.now[:error] = "The access key
'#{params[:cloud_account][:username]}' has already been taken."
+ else
+ flash.now[:error] = "You must fill in all the required fields"
+ end
+ render :action => 'new' and return
+ end
+
+ @cloud_account.pool_families<< PoolFamily.default
+ @cloud_account.save!
+ if @cloud_account.populate_realms
+ flash[:notice] = "Provider account added."
+ end
+ redirect_to provider_accounts_path(@provider)
+ kick_condor
+ end
+
+ def edit
+ @cloud_account = ProviderAccount.find(params[:id])
+ @quota = @cloud_account.quota
+ @provider = @cloud_account.provider
+ require_privilege(Privilege::MODIFY, @cloud_account)
+ end
+
+ def update_accounts
+ @provider = Provider.find(params[:provider][:id])
+ require_privilege(Privilege::MODIFY, CloudAccount, @provider)
+ @providers = Provider.list_for_user(@current_user, Privilege::VIEW)
+
+ success = true
+ @provider.cloud_accounts.each do |cloud_account|
+ attributes = params[:cloud_accounts][cloud_account.id.to_s]
+
+ password = attributes[:password]
+ # blank password means the user didn't change it -- don't update it then
+ if password.blank?
+ attributes.delete :password
+ end
+ cloud_account.quota.maximum_running_instances =
quota_from_string(params[:quota][cloud_account.id.to_s][:maximum_running_instances])
+
+ private_cert = attributes[:x509_cert_priv_file]
+ unless private_cert.blank?
+ attributes[:x509_cert_priv] = private_cert.read
+ end
+ attributes.delete :x509_cert_priv_file
+
+ public_cert = attributes[:x509_cert_pub_file]
+ unless public_cert.blank?
+ attributes[:x509_cert_pub] = public_cert.read
+ end
+ attributes.delete :x509_cert_pub_file
+
+ begin
+ cloud_account.update_attributes!(attributes)
+ cloud_account.quota.save!
+ rescue
+ success = false
+ end
+ end
+ if success
+ flash[:notice] = "Account updated."
+ redirect_to :controller => 'providers', :action =>
'accounts', :id => @provider
+ else
+ flash.now[:notice] = "Error updating the cloud account."
+ render :template => 'provider/accounts'
+ end
+ end
+
+ def update
+ @cloud_account = ProviderAccount.find(params[:id])
+ @provider = @cloud_account.provider
+ require_privilege(Privilege::MODIFY, @cloud_account)
+ @quota = @cloud_account.quota
+
+ limit = params[:quota][:maximum_running_instances] if params[:quota]
+ @cloud_account.quota.set_maximum_running_instances(limit)
+ if @cloud_account.update_attributes(params[:cloud_account])
+ flash[:notice] = "Cloud Account updated!"
+ redirect_to provider_accounts_path(@provider)
+ else
+ render :action => :edit
+ end
+ end
+
+ def key
+ @cloud_account = ProviderAccount.find(params[:id])
+ require_privilege(Privilege::MODIFY,@provider_account)
+ unless @cloud_account.instance_key.nil?
+ render :text => @cloud_account.instance_key.pem
+ end
+ end
+
+ def destroy
+ account = ProviderAccount.find(params[:id])
+ provider = account.provider
+ require_privilege(Privilege::MODIFY, account)
+ if account.destroy
+ flash[:notice] = "Cloud Account destroyed"
+ else
+ flash[:error] = "Cloud Account could not be destroyed"
+ end
+ redirect_to provider_accounts_path(provider)
+ end
+
+ def test_account(account)
+ if account.valid_credentials?
+ flash.now[:notice] = "Test Connection Success: Valid Account Details"
+ else
+ flash.now[:error] = "Test Connection Failed: Invalid Account Details"
+ end
+ rescue
+ flash.now[:error] = "Test Connection Failed: Could not connect to
provider"
+ end
+
+ private
+
+ def load_providers
+ @providers = Provider.list_for_user(@current_user, Privilege::VIEW)
+ end
+end
diff --git a/src/app/models/cloud_account.rb b/src/app/models/cloud_account.rb
deleted file mode 100644
index 4eba087..0000000
--- a/src/app/models/cloud_account.rb
+++ /dev/null
@@ -1,205 +0,0 @@
-class CloudAccount< ActiveRecord::Base
- end
-end
diff --git a/src/app/models/provider.rb b/src/app/models/provider.rb
index 1e89958..affe1ae 100644
--- a/src/app/models/provider.rb
+++ b/src/app/models/provider.rb
@@ -29,7 +29,9 @@ class Provider< ActiveRecord::Base
require 'util/deltacloud'
include PermissionedObject
- has_many :cloud_accounts, :dependent => :destroy
+ PROVIDERS = { 1 => "AWS", 2 => "GoGrid" , 3 =>
"Rackspace", 4 => "RHEVM", 5 => "OpenNebula" }
Should this be PROVIDER_TYPES?
+
+ has_many :provider_accounts, :dependent => :destroy
has_many :hardware_profiles, :dependent => :destroy
has_many :replicated_images, :dependent => :destroy
has_many :realms, :dependent => :destroy
diff --git a/src/app/services/data_service_active_record.rb
b/src/app/services/data_service_active_record.rb
index 66da011..5833baa 100644
--- a/src/app/services/data_service_active_record.rb
+++ b/src/app/services/data_service_active_record.rb
@@ -65,7 +65,7 @@ class DataServiceActiveRecord
data_points = []
free_instances = 0
- cloud_accounts = CloudAccount.find(:all, :conditions => {:provider_id =>
provider.id})
+ cloud_accounts = ProviderAccount.find(:all, :conditions => {:provider_id =>
provider.id})
For consistency we should probably update internal variables to use
provider_account too. Do this for the remainder of the files too.
cloud_accounts.each do |cloud_account|
quota = cloud_account.quota
if quota
@@ -175,11 +175,11 @@ class DataServiceActiveRecord
instances = []
if parent.class == Provider
- cloud_accounts = CloudAccount.find(:all, :conditions => {:provider_id =>
parent.id})
+ cloud_accounts = ProviderAccount.find(:all, :conditions => {:provider_id =>
parent.id})
cloud_accounts.each do |cloud_account|
instances.concat(cloud_account.instances)
end
- elsif parent.class == Pool || parent.class == CloudAccount
+ elsif parent.class == Pool || parent.class == ProviderAccount
instances = parent.instances
else
return nil
@@ -209,7 +209,7 @@ class DataServiceActiveRecord
end
end
- # returns the failure rate of instance starts for instances associated with the
parent, (pool/cloudaccount) given the failure code
+ # returns the failure rate of instance starts for instances associated with the
parent, (pool/ProviderAccount) given the failure code
def self.failure_rate(parent, start_time, end_time, failure_code)
instances = get_parent_instances(parent)
tasks = Task.find(:all, :conditions => {:created_at =>
start_time...end_time,
diff --git a/src/app/views/provider_accounts/_form.haml
b/src/app/views/provider_accounts/_form.haml
new file mode 100644
index 0000000..2d35d47
--- /dev/null
+++ b/src/app/views/provider_accounts/_form.haml
@@ -0,0 +1,52 @@
+= error_messages_for 'cloud_account'
provider_account
+%fieldset.clearfix.nomargin
+ %label.grid_4.la.alpha
+ = t('.account_name')
+ %span.required *
+ %label.grid_3.la
+ = t('.user_name')
+ %span.required *
+ %label.grid_3.la
+ = t('.password')
+ %span.required *
+ %label.grid_3.la.omega
+ = t('.quota_instances')
+ %span.required *
diff --git a/src/db/migrate/20110117140824_rename_cloud_account_to_provider_account.rb
b/src/db/migrate/20110117140824_rename_cloud_account_to_provider_account.rb
new file mode 100644
index 0000000..154649d
--- /dev/null
+++ b/src/db/migrate/20110117140824_rename_cloud_account_to_provider_account.rb
@@ -0,0 +1,9 @@
+class RenameCloudAccountToProviderAccount< ActiveRecord::Migration
+ def self.up
+ rename_table (:cloud_accounts,:provider_accounts)
+ end
+
+ def self.down
+ drop_table :provider_accounts
+ end
+end
This migration needs to update roles and privileges data to replicate
the effect caused by the change below to seeds.rb. For new database,
seeds.rb will load the proper data, but for migrating an existing
detabase, you need to update all roles with a scope of "CloudAccount" to
change scope to "ProviderAccount", and all Privileges with a target_type
of "CloudAccount" to change target_type to "ProviderAccount"
To be really complete you should probably also look for Permissions with
permission_object_type="CloudAccount" and change those records
accordingly as well.
diff --git a/src/db/seeds.rb b/src/db/seeds.rb
index 9a6065c..1ed2329 100644
--- a/src/db/seeds.rb
+++ b/src/db/seeds.rb
@@ -30,17 +30,17 @@ roles =
Quota => [VIEW]}},
Provider =>
{"Provider Owner" => {Provider => [VIEW, MOD,
VPRM,GPRM],
- CloudAccount => [VIEW,USE,MOD,CRE,VPRM,GPRM]}},
- CloudAccount =>
- {"Provider Account User" => {CloudAccount => [VIEW,USE]},
- "Provider Account Owner" => {CloudAccount => [VIEW,USE,MOD,
VPRM,GPRM]}},
+ ProviderAccount =>
[VIEW,USE,MOD,CRE,VPRM,GPRM]}},
+ ProviderAccount =>
+ {"Provider Account User" => {ProviderAccount => [VIEW,USE]},
+ "Provider Account Owner" => {ProviderAccount => [VIEW,USE,MOD,
VPRM,GPRM]}},
Template =>
{"Template User" => {Template => [VIEW,USE]},
"Template Owner" => {Template => [VIEW,USE,MOD,
VPRM,GPRM]}},
BasePermissionObject =>
{"Provider Creator" => {Provider => [
CRE]},
"Provider Administrator" => {Provider => [VIEW,
MOD,CRE,VPRM,GPRM],
- CloudAccount => [VIEW,USE,MOD,CRE,VPRM,GPRM]},
+ ProviderAccount =>
[VIEW,USE,MOD,CRE,VPRM,GPRM]},
"HWP Administrator" => {HardwareProfile => [
MOD,CRE,VPRM,GPRM]},
"Realm Administrator" => {Realm => [
USE,MOD,CRE,VPRM,GPRM]},
"Pool Creator" => {Pool => [
CRE]},
@@ -50,7 +50,7 @@ roles =
PoolFamily => [VIEW, MOD,CRE,VPRM,GPRM]},
"Template Administrator" => {Template =>
[VIEW,USE,MOD,CRE,VPRM,GPRM]},
"Administrator" => {Provider => [VIEW,
MOD,CRE,VPRM,GPRM],
- CloudAccount => [VIEW,USE,MOD,CRE,VPRM,GPRM],
+ ProviderAccount => [VIEW,USE,MOD,CRE,VPRM,GPRM],
HardwareProfile => [ MOD,CRE,VPRM,GPRM],
Realm => [ USE,MOD,CRE,VPRM,GPRM],
User => [VIEW, MOD,CRE],
+end
Scott