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

Reply via email to