Project

General

Profile

« Previous | Next » 

Revision 709ad8d6

Added by Joseph Magen over 10 years ago

fixes #2866 - Changing a hostgroup name doesn't update associated Smart Variable matchers

View differences:

app/models/hostgroup.rb
before_save :remove_duplicated_nested_class
before_save :set_label, :on => [:create, :update, :destroy]
after_save :set_other_labels, :on => [:update, :destroy]
after_save :update_matchers , :on => :update, :if => Proc.new {|hg| hg.label_changed? }
alias_attribute :os, :operatingsystem
audited :except => [:label], :allow_mass_assignment => true
......
self.puppetclasses -= ancestors.map(&:puppetclasses).flatten
end
def update_matchers
lookup_values = LookupValue.where(:match => "hostgroup=#{label_was}")
lookup_values.update_all(:match => "hostgroup=#{label}")
end
end
test/fixtures/lookup_values.yml
match: hostgroup=Common
lookup_key: two
value: 8443
five:
match: hostgroup=Parent
lookup_key: four
value: 8443
six:
match: hostgroup=Parent/inherited
lookup_key: four
value: 8443
test/functional/hostgroups_controller_test.rb
assert_equal one, Hostgroup.find_by_name("second").users.first
end
test "hostgroup rename changes matcher" do
hostgroup = hostgroups(:common)
put :update, {:id => hostgroup.id, :hostgroup => {:name => 'new_common'}}, set_session_user
assert_equal 'hostgroup=new_common', lookup_values(:hostgroupcommon).match
assert_equal 'hostgroup=new_common', lookup_values(:four).match
end
test "hostgroup rename changes matcher" do
hostgroup = hostgroups(:common)
put :update, {:id => hostgroup.id, :hostgroup => {:name => 'new_common'}}, set_session_user
assert_equal 'hostgroup=new_common', lookup_values(:hostgroupcommon).match
assert_equal 'hostgroup=new_common', lookup_values(:four).match
end
test "hostgroup rename of parent changes matcher of parent and child hostgroup" do
hostgroup = hostgroups(:parent)
put :update, {:id => hostgroup.id, :hostgroup => {:name => 'new_parent'}}, set_session_user
assert_equal 'hostgroup=new_parent', lookup_values(:five).match
assert_equal 'hostgroup=new_parent/inherited', lookup_values(:six).match
end
test "hostgroup rename of child only changes matcher of child hostgroup" do
hostgroup = hostgroups(:inherited)
put :update, {:id => hostgroup.id, :hostgroup => {:name => 'new_child'}}, set_session_user
assert_equal 'hostgroup=Parent/new_child', lookup_values(:six).match
end
end
test/unit/hostgroup_test.rb
lv = lookup_values(:four)
lv.match = "hostgroup=#{hostgroup.name}"
lv.save!
assert_equal [lookup_values(:four)], hostgroup.lookup_values
assert_equal [lookup_values(:hostgroupcommon), lookup_values(:four)], hostgroup.lookup_values.sort
end
end

Also available in: Unified diff