ACK after you fix two whitespace issues (highlighted inline).
On 09/15/2010 04:24 PM, [email protected] wrote:
> From: Michal Fojtik<[email protected]>
>
> ---
> src/app/controllers/cloud_accounts_controller.rb | 8 +++
> src/app/models/cloud_account.rb | 13 ++++
> src/app/models/instance_key.rb | 27 +++++++++
> src/app/views/provider/accounts.haml | 2 +
> src/db/migrate/20090804142049_create_instances.rb | 1 +
> .../migrate/20100902081651_create_instance_keys.rb | 14 +++++
> src/spec/factories/cloud_account.rb | 6 ++
> src/spec/factories/hardware_profile.rb | 18 ++++++
> src/spec/factories/hardware_profile_property.rb | 61
> ++++++++++++++++++++
> src/spec/factories/instance_key.rb | 33 +++++++++++
> src/spec/factories/provider.rb | 8 +++
> src/spec/factories/realm.rb | 3 +
> src/spec/models/cloud_account_spec.rb | 17 ++++++
> 13 files changed, 211 insertions(+), 0 deletions(-)
> create mode 100644 src/app/models/instance_key.rb
> create mode 100644 src/db/migrate/20100902081651_create_instance_keys.rb
> create mode 100644 src/spec/factories/instance_key.rb
>
> diff --git a/src/app/controllers/cloud_accounts_controller.rb
> b/src/app/controllers/cloud_accounts_controller.rb
> index e0c612b..6fb2398 100644
> --- a/src/app/controllers/cloud_accounts_controller.rb
> +++ b/src/app/controllers/cloud_accounts_controller.rb
> @@ -68,6 +68,14 @@ class CloudAccountsController< ApplicationController
> end
> end
>
> + def key
> + @cloud_account = CloudAccount.find(params[:id])
> + require_privilege(Privilege::ACCOUNT_MODIFY,@cloud_account.provider)
> + unless @cloud_account.instance_key.nil?
> + render :text => @cloud_account.instance_key.pem
> + end
> + end
> +
> def destroy
> acct = CloudAccount.find(params[:id])
> provider = acct.provider
> diff --git a/src/app/models/cloud_account.rb b/src/app/models/cloud_account.rb
> index e5978a1..7762039 100644
> --- a/src/app/models/cloud_account.rb
> +++ b/src/app/models/cloud_account.rb
> @@ -38,6 +38,8 @@ class CloudAccount< ActiveRecord::Base
> :include => [:role],
> :order => "permissions.id ASC"
>
> + has_one :instance_key, :dependent => :destroy
> + after_create :generate_clound_account_key
>
> before_destroy {|entry| entry.destroyable? }
>
> @@ -137,4 +139,15 @@ class CloudAccount< ActiveRecord::Base
> errors.add_to_base("Login Credentials are Invalid for this Provider")
> unless valid_credentials?
> end
>
> + private
> +
trailing whitespace here ^^^
> + def generate_clound_account_key
> + client = connect
> + if client.feature?(:instances, :authentication_key)
> + key = client.create_key(:name => "#{self.id}_#{self.name}")
> + InstanceKey.create(:cloud_account => self, :pem => key.pem, :name =>
> key.id) if key
> + end
> + end
> +
> +
> end
> diff --git a/src/app/models/instance_key.rb b/src/app/models/instance_key.rb
> new file mode 100644
> index 0000000..b3b7513
> --- /dev/null
> +++ b/src/app/models/instance_key.rb
> @@ -0,0 +1,27 @@
> + #
> +# Copyright (C) 2009 Red Hat, Inc.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; version 2 of the License.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
> +# MA 02110-1301, USA. A copy of the GNU General Public License is
> +# also available at http://www.gnu.org/copyleft/gpl.html.
> +
> +# Filters added to this controller apply to all controllers in the
> application.
> +# Likewise, all the methods added will be available for all controllers.
> +#
> +class InstanceKey< ActiveRecord::Base
> +
> + belongs_to :cloud_account
> + has_many :instances
> +
> +end
> diff --git a/src/app/views/provider/accounts.haml
> b/src/app/views/provider/accounts.haml
> index 647f44a..67d811a 100644
> --- a/src/app/views/provider/accounts.haml
> +++ b/src/app/views/provider/accounts.haml
> @@ -6,6 +6,7 @@
> %tr
> %th{:scope => "col"} Label
> %th{:scope => "col"} Username
> + %th{:scope => "col"} Key
> %th{:scope => "col"}
> %th{:scope => "col"}
> %tbody
> @@ -13,6 +14,7 @@
> %tr
> %td= acct.label
> %td= acct.username
> + %td= (acct.instance_key.nil?) ? 'N/A' :
> link_to(acct.instance_key.name, :controller => :cloud_accounts, :action =>
> :key, :id => acct.id)
> %td= link_to "Edit", {:controller => 'cloud_accounts', :action
> => 'edit', :id => acct.id} if has_account_modify?(@provider)
> %td= link_to "Delete", {:controller => 'cloud_accounts', :action
> => 'destroy', :id => acct.id} if has_account_modify?(@provider)&&
> acct.destroyable?
> %td= link_to "Quota", {:controller => 'quota', :action => 'show',
> :id => acct.id, :parent_type => "cloud_account"}
> diff --git a/src/db/migrate/20090804142049_create_instances.rb
> b/src/db/migrate/20090804142049_create_instances.rb
> index 42706e1..4222782 100644
> --- a/src/db/migrate/20090804142049_create_instances.rb
> +++ b/src/db/migrate/20090804142049_create_instances.rb
> @@ -33,6 +33,7 @@ class CreateInstances< ActiveRecord::Migration
> t.string :private_address
> t.string :state
> t.string :condor_job_id
> + t.integer :instance_key_id
> t.integer :lock_version, :default => 0
> t.integer :acc_pending_time, :default => 0
> t.integer :acc_running_time, :default => 0
> diff --git a/src/db/migrate/20100902081651_create_instance_keys.rb
> b/src/db/migrate/20100902081651_create_instance_keys.rb
> new file mode 100644
> index 0000000..841d7ff
> --- /dev/null
> +++ b/src/db/migrate/20100902081651_create_instance_keys.rb
> @@ -0,0 +1,14 @@
> +class CreateInstanceKeys< ActiveRecord::Migration
> + def self.up
> + create_table :instance_keys do |t|
> + t.integer :cloud_account_id, :null => false
> + t.string :name, :null => false
> + t.text :pem
> + t.timestamps
> + end
> + end
> +
> + def self.down
> + drop_table :instance_keys
> + end
> +end
> diff --git a/src/spec/factories/cloud_account.rb
> b/src/spec/factories/cloud_account.rb
> index b623b43..27d0a1e 100644
> --- a/src/spec/factories/cloud_account.rb
> +++ b/src/spec/factories/cloud_account.rb
> @@ -9,3 +9,9 @@ Factory.define :mock_cloud_account, :parent =>
> :cloud_account do |f|
> f.password "mockpassword"
> f.provider { |p| p.association(:mock_provider) }
> end
> +
> +Factory.define :ec2_cloud_account, :parent => :cloud_account do |f|
> + f.username "mockuser"
> + f.password "mockpassword"
> + f.provider { |p| p.association(:ec2_provider) }
> +end
> diff --git a/src/spec/factories/hardware_profile.rb
> b/src/spec/factories/hardware_profile.rb
> index 4e6a85f..c4956df 100644
> --- a/src/spec/factories/hardware_profile.rb
> +++ b/src/spec/factories/hardware_profile.rb
> @@ -35,3 +35,21 @@ Factory.define :agg_hwp2, :parent => :hardware_profile do
> |p|
> p.provider_hardware_profiles { |hp| [hp.association(:mock_hwp2)] }
> p.external_key 'agg_hwp2_key'
> end
> +
> +
> +Factory.define :ec2_hwp1, :parent => :hardware_profile do |p|
> + p.memory { |p| p.association(:ec2_hwp1_memory) }
> + p.storage { |p| p.association(:ec2_hwp1_storage) }
> + p.cpu { |p| p.association(:ec2_hwp1_cpu) }
> + p.architecture { |p| p.association(:ec2_hwp1_arch) }
> + p.sequence(:external_key) { |n| "ec2_hwp1_key#{n}" }
> +end
> +
> +Factory.define :agg_hwp3, :parent => :hardware_profile do |p|
> + p.memory { |p| p.association(:agg_hwp3_memory) }
> + p.storage { |p| p.association(:agg_hwp3_storage) }
> + p.cpu { |p| p.association(:agg_hwp3_cpu) }
> + p.architecture { |p| p.association(:agg_hwp3_arch) }
> + p.provider_hardware_profiles { |hp| [hp.association(:ec2_hwp1)] }
> + p.external_key 'agg_hwp3_key'
> +end
> diff --git a/src/spec/factories/hardware_profile_property.rb
> b/src/spec/factories/hardware_profile_property.rb
> index 91c40a1..9ec541a 100644
> --- a/src/spec/factories/hardware_profile_property.rb
> +++ b/src/spec/factories/hardware_profile_property.rb
> @@ -120,3 +120,64 @@ Factory.define :agg_hwp2_arch, :parent =>
> :hardware_profile_property do |p|
> p.unit 'label'
> p.value 'x86_64'
> end
> +
> +
> +# EC2 Profiles:
> +
> +
> +Factory.define :ec2_hwp1_memory, :parent => :hardware_profile_property do
> |p|
> + p.name 'memory'
> + p.kind 'fixed'
> + p.unit 'MB'
> + p.value 1740.8
> +end
> +
> +Factory.define :ec2_hwp1_storage, :parent => :hardware_profile_property do
> |p|
> + p.name 'storage'
> + p.kind 'fixed'
> + p.unit 'GB'
> + p.value 160
> +end
> +
> +Factory.define :ec2_hwp1_cpu, :parent => :hardware_profile_property do |p|
> + p.name 'cpu'
> + p.kind 'fixed'
> + p.unit 'count'
> + p.value 1.0
> +end
> +
> +Factory.define :ec2_hwp1_arch, :parent => :hardware_profile_property do |p|
> + p.name 'architecture'
> + p.kind 'fixed'
> + p.unit 'label'
> + p.value 'i386'
> +end
> +
> +Factory.define :agg_hwp3_memory, :parent => :hardware_profile_property do
> |p|
> + p.name 'memory'
> + p.kind 'fixed'
> + p.unit 'MB'
> + p.value 1740.8
> +end
> +
> +Factory.define :agg_hwp3_storage, :parent => :hardware_profile_property do
> |p|
> + p.name 'storage'
> + p.kind 'fixed'
> + p.unit 'GB'
> + p.value 160
> +end
> +
> +Factory.define :agg_hwp3_cpu, :parent => :hardware_profile_property do |p|
> + p.name 'cpu'
> + p.kind 'fixed'
> + p.unit 'count'
> + p.value 1
> +end
> +
> +Factory.define :agg_hwp3_arch, :parent => :hardware_profile_property do |p|
> + p.name 'architecture'
> + p.kind 'fixed'
> + p.unit 'label'
> + p.value 'i386'
> +end
> +
empty line at EOF here ^^^
> diff --git a/src/spec/factories/instance_key.rb
> b/src/spec/factories/instance_key.rb
> new file mode 100644
> index 0000000..f4bcaed
> --- /dev/null
> +++ b/src/spec/factories/instance_key.rb
> @@ -0,0 +1,33 @@
> +Factory.define :instance_key do |p|
> + p.sequence(:name) { |n| "instance_key#{n}" }
> +end
> +
> +Factory.define :ec2_instance_key1, :parent => :instance_key do |p|
> + p.cloud_account { |p| p.association(:ec2_cloud_account) }
> + p.name "1_user"
> + p.text "
> +-----BEGIN RSA PRIVATE KEY-----
> +MIIEpAIBAAKCAQEAm+Ri7uZz7iVTLLxtPiV2gLD37OOvovZ0VpWR3T7HK5NgxjlJssIjc8uKqPqY
> +EdXssF+ZKKypiQzFkMhowthkw1sGN5R3NBrIiRKR1mcVuE7iiRBFikBoF/CaaXP2LSNtMv4xkUXO
> +IdYfi+JFXIxjPHKpei3yuilZhoTdv8EH/oTsow7BZuK9R0XMc3a+U1btvoZ6CwRc0tTWmJyOkuh2
> +wVeQOTeaNbWzpuTWgJ5oda3CY7v+hbu1CT0AZ5vhSFWzDuvEEd4r15SQhH8X9Y7DnRhqDYDbBUdI
> +slQOFYi5KU5dJSzcjfSsA2u8UbcV24QsXOA3C9UofFNmJHG9hgQOgwIDAQABAoIBADdN9NMwKpyn
> +3TQXvOG5RKsvHSWLOPolWOyGr3LAHMSWylRIap7iRNWFtjFwhZZ+QDPqFlnZt2OJhmVw08mcH1M2
> +7aO2Jfv0LISEc/yOIaR7R968SQ9c/hDQKNeUbhdhZBIdH9Sb4R8b6aEkqtrEa0g8nWdc+amVlc8l
> +P84RWxat3wdZUH8c9inAD3UYrRFFA1ETZGt0fOr207qOfBSf0ytBgovlhmN2bfFjzKdpNluTXh62
> +vbgHkQMqf7pRU7ZjuuZiG/czV3a0aN4gg/SW7zFA+6+6R/0vmF1+vnsZ5YYUtDC4Fckc6wpms5oy
> +cpdBFuSYvs83Mph/SFXNai2aTTECgYEA3dvn4JVgTbOQgCc/hQwUlzGkmvXOlifdp/tfsh/3Hxj7
> +QOzZLuKPDiu8IYzqQtHC4of2N8vY9h/fHkLuQL6Tsfdu2S11SAk4vqfDjGDy8/BxZw1U5kcV+5MF
> +4dy5mHKKwQCuMybYSXZQcFUGSWsaVEDk9kzuD7j1P5JC4Z6M7CUCgYEAs+G6YUPfh1o1JD/4ZQN/
> +geM+K0o6VJSYMhmzcJ6XJQSwdMNwNaAhDzr4Gtqqrio6yzkzSNIYYPAREAFM0frBnZ6Oh+nEwZsu
> +nUTbaNGCpJ7MhqjQEDtNJDG/RoRtQeDpJ1MnwmJNbNe9h3qydqsrnBqqBamV+LmoWp4wARv7O4cC
> +gYEAwKM2JqptcWpuGOh7XgIMSu/e9nJiy7yX2UkKYbchs03UtB4zwmMURgCxnQwnSJesOVhG8VG9
> +9I/eAv+osm0H/2pSRJ8VC9R+AgXXZKe1rRxky08nHcAxlTymyeQG/xjN5CG8IEwlVzw1QiSBjfRC
> +a0/hvv8zYlF+GZHdItyxjkUCgYAoegOxfU9gKqlIlehz+nyHorXLkfFcNO+mXmglUFpcZxi5vXyT
> +ZIvr3G4VxNyhQjlmn2Ft4nC/52U/f7tkiJNmv1X9OVof4qZzlxn0FSjbmCwXpQbkkCOEoHkVChl3
> +uH9ebPTGZc5cTpOEV9SupUez4cAedBGeHVDHy06sATrgIwKBgQCdqFhrse+uhRacK1LAymvBsou5
> +5jj99IUCqIdgLelQ1yfI3Boj3qm8eZCBa8u7kbLx8F6zLCi6ry/k+JOwo3oa1pL9dfhXAnu/wwwt
> +1FGvv2zb+xR/fB/6+a4RMFsp9jO6lzTn/K1wsaZ6FNcdxB4V8ouveF0exhH/MEc0vWI47A==
> +-----END RSA PRIVATE KEY-----
> +"
> +end
> diff --git a/src/spec/factories/provider.rb b/src/spec/factories/provider.rb
> index d53fc67..76fb4af 100644
> --- a/src/spec/factories/provider.rb
> +++ b/src/spec/factories/provider.rb
> @@ -17,3 +17,11 @@ Factory.define :mock_provider2, :parent => :provider do
> |p|
> p.url 'http://localhost:3001/api'
> p.after_create { |p| p.realms<< Factory(:realm3, :provider => p) }
> end
> +
> +Factory.define :ec2_provider, :parent => :provider do |p|
> + p.name 'amazon-ec2'
> + p.cloud_type 'ec2'
> + p.url 'http://localhost:3001/api'
> + p.hardware_profiles { |hp| [hp.association(:ec2_hwp1)] }
> + p.after_create { |p| p.realms<< Factory(:realm4, :provider => p) }
> +end
> diff --git a/src/spec/factories/realm.rb b/src/spec/factories/realm.rb
> index f4df03b..5da284f 100644
> --- a/src/spec/factories/realm.rb
> +++ b/src/spec/factories/realm.rb
> @@ -12,3 +12,6 @@ end
>
> Factory.define :realm3, :parent => :realm do |r|
> end
> +
> +Factory.define :realm4, :parent => :realm do |r|
> +end
> diff --git a/src/spec/models/cloud_account_spec.rb
> b/src/spec/models/cloud_account_spec.rb
> index 89fdf27..8784f2b 100644
> --- a/src/spec/models/cloud_account_spec.rb
> +++ b/src/spec/models/cloud_account_spec.rb
> @@ -34,4 +34,21 @@ describe CloudAccount do
> cloud_account.save.should == false
> end
>
> + it "should create an instance_key if provider is EC2" do
> + @client = mock('DeltaCloud', :null_object => true)
> + @provider = Factory.build :ec2_provider
> + @key = mock('Key', :null_object => true)
> + @key.stub!(:pem).and_return("PEM")
> + @key.stub!(:id).and_return("1_user")
> + @client.stub!(:"feature?").and_return(true)
> + @client.stub!(:"create_key").and_return(@key)
> +
> + cloud_account = Factory.build :ec2_cloud_account
> + cloud_account.stub!(:connect).and_return(@client)
> + cloud_account.save
> + cloud_account.instance_key.should_not == nil
> + cloud_account.instance_key.pem == "PEM"
> + cloud_account.instance_key.id == "1_user"
> + end
> +
> end
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel