As an SA I want to enable the pool so that it can be used for a deployment.
This feature includes 2 subtasks: - #1109 - Add switch on pool model for enable/disable pool - #1110 - Update UI to reflect enabled/disabled pools
From: Jozef Zigmund jzigmund@redhat.com
--- src/app/models/instance.rb | 6 ++++++ src/app/models/pool.rb | 1 + .../migrate/20110413093434_add_enabled_to_pool.rb | 19 +++++++++++++++++++ src/db/seeds.rb | 2 +- src/spec/controllers/pools_controller_spec.rb | 3 ++- src/spec/factories/pool.rb | 1 + src/spec/models/instance_spec.rb | 6 ++++++ 7 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 src/db/migrate/20110413093434_add_enabled_to_pool.rb
diff --git a/src/app/models/instance.rb b/src/app/models/instance.rb index 1841ecc..545afb4 100644 --- a/src/app/models/instance.rb +++ b/src/app/models/instance.rb @@ -104,6 +104,8 @@ class Instance < ActiveRecord::Base validates_uniqueness_of :name, :scope => :pool_id validates_length_of :name, :maximum => 1024
+ before_save :check_enabled_pool + STATE_NEW = "new" STATE_PENDING = "pending" STATE_RUNNING = "running" @@ -128,6 +130,10 @@ class Instance < ActiveRecord::Base end end
+ def check_enabled_pool + pool.enabled == true ? return : errors.add(:pool, "You don't have enabled pool for this instance") + end + def object_list super + [pool, deployment] end diff --git a/src/app/models/pool.rb b/src/app/models/pool.rb index c158403..234904e 100644 --- a/src/app/models/pool.rb +++ b/src/app/models/pool.rb @@ -50,6 +50,7 @@ class Pool < ActiveRecord::Base
validates_presence_of :name validates_presence_of :pool_family + validates_inclusion_of :enabled, :in => [true, false] validates_uniqueness_of :name validates_uniqueness_of :exported_as, :if => :exported_as validates_length_of :name, :maximum => 255 diff --git a/src/db/migrate/20110413093434_add_enabled_to_pool.rb b/src/db/migrate/20110413093434_add_enabled_to_pool.rb new file mode 100644 index 0000000..a5c8948 --- /dev/null +++ b/src/db/migrate/20110413093434_add_enabled_to_pool.rb @@ -0,0 +1,19 @@ +class AddEnabledToPool < ActiveRecord::Migration + def self.up + add_column :pools, :enabled, :boolean, :default => false + set_enabled + end + + def self.down + remove_column :pools, :enabled + end + + def self.set_enabled + unless Pool.all.empty? + Pool.all.each do |pool| + pool.enabled = pool.name == 'default_pool' ? true : false + pool.save! + end + end + end +end diff --git a/src/db/seeds.rb b/src/db/seeds.rb index 69be3f4..a42517b 100644 --- a/src/db/seeds.rb +++ b/src/db/seeds.rb @@ -2,7 +2,7 @@ PoolFamily.create!(:name => "default", :description => "default pool family")
# Default Pool -Pool.create!(:name => "default_pool", :quota => Quota.create, :pool_family => PoolFamily.find_by_name('default')) +Pool.create!(:name => "default_pool", :quota => Quota.create, :pool_family => PoolFamily.find_by_name('default'), :enabled => true)
# Create default roles diff --git a/src/spec/controllers/pools_controller_spec.rb b/src/spec/controllers/pools_controller_spec.rb index ae84666..9c730c3 100644 --- a/src/spec/controllers/pools_controller_spec.rb +++ b/src/spec/controllers/pools_controller_spec.rb @@ -25,7 +25,8 @@ describe Resources::PoolsController do lambda do post :create, :pool => { :name => 'foopool', - :pool_family_id => PoolFamily.find_by_name('default').id + :pool_family_id => PoolFamily.find_by_name('default').id, + :enabled => true } end.should change(Pool, :count).by(1) id = Pool.find(:first, :conditions => ['name = ?', 'foopool']).id diff --git a/src/spec/factories/pool.rb b/src/spec/factories/pool.rb index 3b20f96..918335b 100644 --- a/src/spec/factories/pool.rb +++ b/src/spec/factories/pool.rb @@ -2,6 +2,7 @@ Factory.define :pool do |p| p.sequence(:name) { |n| "mypool#{n}" } p.pool_family { |p| PoolFamily.find_by_name('default') } p.association :quota + p.enabled true end
Factory.define :tpool, :parent => :pool do |p| diff --git a/src/spec/models/instance_spec.rb b/src/spec/models/instance_spec.rb index 8d279de..409342c 100644 --- a/src/spec/models/instance_spec.rb +++ b/src/spec/models/instance_spec.rb @@ -8,6 +8,12 @@ describe Instance do @actions = ['start', 'stop'] end
+ it "should not save when pool is not enabled" do + @instance.pool.enabled = false + @instance.save + @instance.errors[:pool].should == "You don't have enabled pool for this instance" + end + it "should require pool to be set" do @instance.pool_id = nil @instance.should_not be_valid
On 04/18/2011 09:38 AM, jzigmund@redhat.com wrote:
From: Jozef Zigmundjzigmund@redhat.com
src/app/models/instance.rb | 6 ++++++ src/app/models/pool.rb | 1 + .../migrate/20110413093434_add_enabled_to_pool.rb | 19 +++++++++++++++++++ src/db/seeds.rb | 2 +- src/spec/controllers/pools_controller_spec.rb | 3 ++- src/spec/factories/pool.rb | 1 + src/spec/models/instance_spec.rb | 6 ++++++ 7 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 src/db/migrate/20110413093434_add_enabled_to_pool.rb
diff --git a/src/app/models/instance.rb b/src/app/models/instance.rb index 1841ecc..545afb4 100644 --- a/src/app/models/instance.rb +++ b/src/app/models/instance.rb @@ -104,6 +104,8 @@ class Instance< ActiveRecord::Base validates_uniqueness_of :name, :scope => :pool_id validates_length_of :name, :maximum => 1024
- before_save :check_enabled_pool
We should only check this when launching -- not when saving. Otherwise when a pool is disabled (w/ running instances) we won't be able to save the instances for any reason (including stopping them).
Scott
STATE_NEW = "new" STATE_PENDING = "pending" STATE_RUNNING = "running"
@@ -128,6 +130,10 @@ class Instance< ActiveRecord::Base end end
- def check_enabled_pool
- pool.enabled == true ? return : errors.add(:pool, "You don't have enabled pool for this instance")
- end
- def object_list super + [pool, deployment] end
diff --git a/src/app/models/pool.rb b/src/app/models/pool.rb index c158403..234904e 100644 --- a/src/app/models/pool.rb +++ b/src/app/models/pool.rb @@ -50,6 +50,7 @@ class Pool< ActiveRecord::Base
validates_presence_of :name validates_presence_of :pool_family
- validates_inclusion_of :enabled, :in => [true, false] validates_uniqueness_of :name validates_uniqueness_of :exported_as, :if => :exported_as validates_length_of :name, :maximum => 255
diff --git a/src/db/migrate/20110413093434_add_enabled_to_pool.rb b/src/db/migrate/20110413093434_add_enabled_to_pool.rb new file mode 100644 index 0000000..a5c8948 --- /dev/null +++ b/src/db/migrate/20110413093434_add_enabled_to_pool.rb @@ -0,0 +1,19 @@ +class AddEnabledToPool< ActiveRecord::Migration
- def self.up
- add_column :pools, :enabled, :boolean, :default => false
- set_enabled
- end
- def self.down
- remove_column :pools, :enabled
- end
- def self.set_enabled
- unless Pool.all.empty?
Pool.all.each do |pool|
pool.enabled = pool.name == 'default_pool' ? true : false
pool.save!
end
- end
- end
+end diff --git a/src/db/seeds.rb b/src/db/seeds.rb index 69be3f4..a42517b 100644 --- a/src/db/seeds.rb +++ b/src/db/seeds.rb @@ -2,7 +2,7 @@ PoolFamily.create!(:name => "default", :description => "default pool family")
# Default Pool -Pool.create!(:name => "default_pool", :quota => Quota.create, :pool_family => PoolFamily.find_by_name('default')) +Pool.create!(:name => "default_pool", :quota => Quota.create, :pool_family => PoolFamily.find_by_name('default'), :enabled => true)
# Create default roles diff --git a/src/spec/controllers/pools_controller_spec.rb b/src/spec/controllers/pools_controller_spec.rb index ae84666..9c730c3 100644 --- a/src/spec/controllers/pools_controller_spec.rb +++ b/src/spec/controllers/pools_controller_spec.rb @@ -25,7 +25,8 @@ describe Resources::PoolsController do lambda do post :create, :pool => { :name => 'foopool',
:pool_family_id => PoolFamily.find_by_name('default').id
:pool_family_id => PoolFamily.find_by_name('default').id,
:enabled => true } end.should change(Pool, :count).by(1) id = Pool.find(:first, :conditions => ['name = ?', 'foopool']).id
diff --git a/src/spec/factories/pool.rb b/src/spec/factories/pool.rb index 3b20f96..918335b 100644 --- a/src/spec/factories/pool.rb +++ b/src/spec/factories/pool.rb @@ -2,6 +2,7 @@ Factory.define :pool do |p| p.sequence(:name) { |n| "mypool#{n}" } p.pool_family { |p| PoolFamily.find_by_name('default') } p.association :quota
p.enabled true end
Factory.define :tpool, :parent => :pool do |p|
diff --git a/src/spec/models/instance_spec.rb b/src/spec/models/instance_spec.rb index 8d279de..409342c 100644 --- a/src/spec/models/instance_spec.rb +++ b/src/spec/models/instance_spec.rb @@ -8,6 +8,12 @@ describe Instance do @actions = ['start', 'stop'] end
- it "should not save when pool is not enabled" do
- @instance.pool.enabled = false
- @instance.save
- @instance.errors[:pool].should == "You don't have enabled pool for this instance"
- end
- it "should require pool to be set" do @instance.pool_id = nil @instance.should_not be_valid
From: Jozef Zigmund jzigmund@redhat.com
--- .../controllers/resources/instances_controller.rb | 2 +- src/app/controllers/resources/pools_controller.rb | 3 ++- src/app/models/instance.rb | 7 +------ src/app/views/resources/pools/_list.haml | 2 ++ src/app/views/resources/pools/edit.haml | 3 +++ src/app/views/resources/pools/new.haml | 5 ++++- src/spec/models/instance_spec.rb | 2 +- 7 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/src/app/controllers/resources/instances_controller.rb b/src/app/controllers/resources/instances_controller.rb index 75d6f96..29466fb 100644 --- a/src/app/controllers/resources/instances_controller.rb +++ b/src/app/controllers/resources/instances_controller.rb @@ -190,7 +190,7 @@ class Resources::InstancesController < ApplicationController end
def init_new_instance_attrs - @pools = Pool.list_for_user(@current_user, Privilege::CREATE, :target_type => Instance) + @pools = Pool.list_for_user(@current_user, Privilege::CREATE, {:target_type => Instance,:conditions=>{ :enabled => true}}) @realms = FrontendRealm.all @hardware_profiles = HardwareProfile.all( :include => :architecture, diff --git a/src/app/controllers/resources/pools_controller.rb b/src/app/controllers/resources/pools_controller.rb index cd4840a..78ef793 100644 --- a/src/app/controllers/resources/pools_controller.rb +++ b/src/app/controllers/resources/pools_controller.rb @@ -102,7 +102,8 @@ class Resources::PoolsController < ApplicationController { :name => "Pool name", :sort_attr => :name }, { :name => "Quota (Instances)", :sort_attr => "quotas.total_instances"}, { :name => "% Quota used", :sortable => false }, - { :name => "Pool Family", :sort_attr => "pool_families.name" } + { :name => "Pool Family", :sort_attr => "pool_families.name" }, + { :name => "Enabled", :sort_attr => :enabled } ] end
diff --git a/src/app/models/instance.rb b/src/app/models/instance.rb index 545afb4..d9fae4a 100644 --- a/src/app/models/instance.rb +++ b/src/app/models/instance.rb @@ -104,8 +104,6 @@ class Instance < ActiveRecord::Base validates_uniqueness_of :name, :scope => :pool_id validates_length_of :name, :maximum => 1024
- before_save :check_enabled_pool - STATE_NEW = "new" STATE_PENDING = "pending" STATE_RUNNING = "running" @@ -128,10 +126,7 @@ class Instance < ActiveRecord::Base errors.add(:assembly, "Please specify either template or assembly, but not both") errors.add(:template, "Please specify either template or assembly, but not both") end - end - - def check_enabled_pool - pool.enabled == true ? return : errors.add(:pool, "You don't have enabled pool for this instance") + pool.enabled == true ? return : errors.add(:pool, "is not enabled") if pool end
def object_list diff --git a/src/app/views/resources/pools/_list.haml b/src/app/views/resources/pools/_list.haml index 1e7b3d7..c8083b7 100644 --- a/src/app/views/resources/pools/_list.haml +++ b/src/app/views/resources/pools/_list.haml @@ -21,6 +21,8 @@ ='%' %td = pool.pool_family.name + %td + = pool.enabled
:javascript $(document).ready(function () { diff --git a/src/app/views/resources/pools/edit.haml b/src/app/views/resources/pools/edit.haml index cc00233..d4c511f 100644 --- a/src/app/views/resources/pools/edit.haml +++ b/src/app/views/resources/pools/edit.haml @@ -17,6 +17,9 @@ %button.linkbutton.nospace{ :type => 'button', :onclick => "set_unlimited_quota("quota_instances");" }<> = t('provider_accounts.form.unlimited_quota') ) + %fieldset + = form.label :enabled, "Enabled:",{ :class => "grid_2 alpha" } + = form.check_box :enabled %fieldset.clear
= form.submit "Save" diff --git a/src/app/views/resources/pools/new.haml b/src/app/views/resources/pools/new.haml index dde52c9..5c48c9e 100644 --- a/src/app/views/resources/pools/new.haml +++ b/src/app/views/resources/pools/new.haml @@ -8,12 +8,15 @@ = form.label :pool_family_id, "Pool Family:", :class => "grid_2 alpha" = form.collection_select :pool_family_id, PoolFamily.all, :id, :name %fieldset - = label_tag "Quota" + = label_tag "Quota:" = text_field :quota, :maximum_running_instances, :title => t('provider_accounts.form.quota_instances'), :value => @quota.maximum_running_instances || "unlimited", :id => "quota_instances", :class => "grid_3 omega" ( %button.linkbutton.nospace{ :type => 'button', :onclick => "set_unlimited_quota("quota_instances");" }<> = t('provider_accounts.form.unlimited_quota') ) + %fieldset + = form.label :enabled, "Enabled:",{ :class => "grid_2 alpha" } + = form.check_box :enabled %fieldset.clear
= form.submit "Save" diff --git a/src/spec/models/instance_spec.rb b/src/spec/models/instance_spec.rb index 409342c..1290184 100644 --- a/src/spec/models/instance_spec.rb +++ b/src/spec/models/instance_spec.rb @@ -11,7 +11,7 @@ describe Instance do it "should not save when pool is not enabled" do @instance.pool.enabled = false @instance.save - @instance.errors[:pool].should == "You don't have enabled pool for this instance" + @instance.errors[:pool].should == "is not enabled" end
it "should require pool to be set" do
aeolus-devel@lists.fedorahosted.org