Project

General

Profile

« Previous | Next » 

Revision b3424682

Added by Tom Caspy about 9 years ago

fixes #4424 - overriden attributes get overridden in the UI

(cherry picked from commit 0575b5b0a07c59c443bf2be663cb67d6a5e40f19)

View differences:

app/assets/stylesheets/application.scss
text-decoration: line-through;
}
#title_action {
tr.override-param{
text-decoration: none;
span.col-md-2, textarea {
text-decoration: line-through;
}
a, i {
text-decoration: none;
}
}
#title_action{
padding-bottom: 12px;
}
app/helpers/lookup_keys_helper.rb
end
end
text_area_class = ['col-md-5']
text_area_class << "override-param" if key.overridden?(host)
content_tag :div, :class => ['form-group', 'condensed'] + diagnostic_class do
row_count = original_value.to_s.lines.count rescue 1
text_area_tag("value_#{key.key}", original_value, :rows => row_count == 0 ? 1 : row_count,
:class => ['col-md-5'], :'data-property' => 'value', :disabled => true) +
content_tag(:span, :class => "help-block") { diagnostic_helper }
text_area_tag("value_#{key.key}", original_value, :rows => (row_count == 0 ? 1 : row_count),
:class => text_area_class, :'data-property' => 'value', :disabled => true) +
content_tag(:span, :class => "help-block") { diagnostic_helper }
end
end
end
app/models/concerns/nested_ancestry_common.rb
def get_title
return name if ancestry.empty?
ancestors.map { |a| a.name + '/' }.join + name
ancestors.map { |a| a.name + '/' }.join + name.to_s
end
alias_method :get_label, :get_title
app/models/lookup_key.rb
value =~ /<%.*%>/
end
def overridden?(host)
return false unless host.is_a?(Host::Base) || host.is_a?(Hostgroup)
lookup_values.find_by_match(host.send(:lookup_value_match)).present?
end
private
# Generate possible lookup values type matches to a given host
app/views/common_parameters/_inherited_parameters.html.erb
<tbody>
<% keys = inherited_parameters.keys.sort %>
<% keys.each do |name| %>
<tr>
<tr class="<%="override-param" if @host.host_parameters.map(&:name).include?(name)%>">
<%= "<td class='col-md-3' rowspan='#{keys.size}'>#{_('Global')}</td>".html_safe if name == keys.first %>
<td class='col-md-2'><%= content_tag :span, name, :id => "name_#{name}", :class => "col-md-2" %></td>
<td class='col-md-2'><%= content_tag :span, name, :id => "name_#{name}", :class => "col-md-2" %>
</td>
<td class='col-md-7'><%= parameter_value_field inherited_parameters[name] %></td>
<td>
<%= link_to_function(_("override"), "override_param(this)", :title => _("Override this value"),
:'data-tag' => 'override', :class => "btn btn-default") if authorized_via_my_scope("host_editing", "create_params") %>
:'data-tag' => 'override', :class => "btn btn-default") if authorized_via_my_scope("host_editing", "create_params") && !@host.host_parameters.map(&:name).include?(name) %>
</td>
</tr>
<% end %>
app/views/puppetclasses/_class_parameters.html.erb
# Plus, we make the class name available from javascript without having to look at any previous row.
content_tag :span, puppetclass.name, :'data-property' => 'class'
end %>
<td><%= content_tag :span, key.key, :class => "col-md-2", :'data-property' => 'name' %></td>
<td>
<%= content_tag :span, key.key, :class => "col-md-2 #{"override-param" if key.overridden?(obj)}", :'data-property' => 'name' %></td>
<td><%= obj.class.model_name == "Host" ? host_key_with_diagnostic(obj, value_hash, key) : hostgroup_key_with_diagnostic(obj, key)%></td>
<td>
<%= link_to_function(_("override"), "override_class_param(this)", :title => _("Override this value"),
:'data-tag' => 'override', :class =>"btn btn-default") if authorized_via_my_scope("host_editing", "create_params") %>
:'data-tag' => 'override', :class =>"btn btn-default") if authorized_via_my_scope("host_editing", "create_params") && !key.overridden?(obj) %>
</td>
</tr>
<% end %>
test/unit/lookup_key_test.rb
key = LookupKey.create!(:key => "dns", :path => "environment,hostgroup \n hostgroup", :puppetclass => puppetclass, :default_value => default, :override=>true)
value1 = LookupValue.create!(:value => "v1", :match => "environment=testing,hostgroup=Common", :lookup_key => key)
value2 = LookupValue.create!(:value => "v2", :match => "hostgroup=Unusual", :lookup_key => key)
LookupValue.create!(:value => "v22", :match => "fqdn=#{@host2.fqdn}", :lookup_key => key)
EnvironmentClass.create!(:puppetclass => puppetclass, :environment => environments(:testing), :lookup_key => key)
HostClass.create!(:host => @host1,:puppetclass=>puppetclass)
HostClass.create!(:host => @host2,:puppetclass=>puppetclass)
......
assert_equal value1.value, Classification::ClassParam.new(:host=>@host1).enc['apache']['dns']
assert_equal value2.value, Classification::ClassParam.new(:host=>@host2).enc['apache']['dns']
assert_equal default, Classification::ClassParam.new(:host=>@host3).enc['apache']['dns']
assert key.overridden?(@host2)
refute key.overridden?(@host1)
end
def test_parameters_multiple_paths

Also available in: Unified diff