Revision b5f207de
Added by Ori Rabin over 7 years ago
app/models/environment_class.rb | ||
---|---|---|
belongs_to :puppetclass_lookup_key
|
||
validates :puppetclass_lookup_key_id, :uniqueness => {:scope => [:environment_id, :puppetclass_id]}
|
||
validates :puppetclass_id, :environment_id, :presence => true
|
||
after_destroy :delete_orphaned_lookup_keys
|
||
|
||
scope :parameters_for_class, lambda {|puppetclasses_ids, environment_id|
|
||
all_parameters_for_class(puppetclasses_ids, environment_id).where(:puppetclass_lookup_keys => {:override => true})
|
||
... | ... | |
def self.key_in_environment(env, puppetclass, puppetclass_lookup_key)
|
||
EnvironmentClass.where(:environment_id => env, :puppetclass_id => puppetclass, :puppetclass_lookup_key_id => puppetclass_lookup_key).first
|
||
end
|
||
|
||
def delete_orphaned_lookup_keys
|
||
if puppetclass_lookup_key.present? && puppetclass_lookup_key.environment_classes.empty?
|
||
puppetclass_lookup_key.destroy
|
||
end
|
||
end
|
||
end
|
db/migrate/20161205142618_delete_orphaned_smart_class_parameters.rb | ||
---|---|---|
class DeleteOrphanedSmartClassParameters < ActiveRecord::Migration
|
||
def up
|
||
PuppetclassLookupKey.where("NOT EXISTS (SELECT * FROM environment_classes WHERE environment_classes.puppetclass_lookup_key_id = lookup_keys.id)").destroy_all
|
||
end
|
||
|
||
def down
|
||
end
|
||
end
|
test/models/lookup_keys/puppetclass_lookup_key_test.rb | ||
---|---|---|
lookup_key.override = false
|
||
assert lookup_key.valid?
|
||
end
|
||
|
||
context "delete params with class" do
|
||
setup do
|
||
@env1 = FactoryGirl.create(:environment)
|
||
@puppetclass = FactoryGirl.create(:puppetclass)
|
||
@lookup_key = FactoryGirl.create(:puppetclass_lookup_key, :key_type => 'string',
|
||
:default_value => "test123", :override => true)
|
||
FactoryGirl.create(:environment_class, :puppetclass => @puppetclass, :environment => @env1, :puppetclass_lookup_key => @lookup_key)
|
||
end
|
||
|
||
test "deleting puppetclass should delete smart class parameters" do
|
||
env2 = FactoryGirl.create(:environment)
|
||
FactoryGirl.create(:environment_class, :puppetclass => @puppetclass, :environment => env2, :puppetclass_lookup_key => @lookup_key)
|
||
|
||
@puppetclass.destroy
|
||
refute PuppetclassLookupKey.where(:key => @lookup_key.key).present?
|
||
end
|
||
|
||
test "deleting only environment a smart class parameters is in should delete the parameter" do
|
||
@env1.destroy
|
||
refute PuppetclassLookupKey.where(:key => @lookup_key.key).present?
|
||
end
|
||
|
||
test "deleting only one environment a smart class parameters is in should not delete the parameter" do
|
||
env2 = FactoryGirl.create(:environment)
|
||
FactoryGirl.create(:environment_class, :puppetclass => @puppetclass, :environment => env2, :puppetclass_lookup_key => @lookup_key)
|
||
|
||
@env1.destroy
|
||
assert PuppetclassLookupKey.where(:key => @lookup_key.key).present?
|
||
end
|
||
end
|
||
end
|
Also available in: Unified diff
Fixes #17810 - Deleting smart class parameters with puppetclass