summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
authorBrice Figureau <brice-puppet@daysofwonder.com>2009-06-03 21:10:36 +0200
committerJames Turnbull <james@lovedthanlost.net>2009-06-06 09:52:53 +1000
commitf9516d49a02facb43e2856766b6439673450fdd1 (patch)
tree06df981d0a51f55d8a749706ae7d349e6b5401ec /lib/puppet
parentb5855ec1a5af2bec6c4ac35f8e6a885999b09bf9 (diff)
downloadpuppet-f9516d49a02facb43e2856766b6439673450fdd1.tar.gz
puppet-f9516d49a02facb43e2856766b6439673450fdd1.tar.xz
puppet-f9516d49a02facb43e2856766b6439673450fdd1.zip
Make sure virtual and rails query use tags when tag are searched
Up to now, when trying to match with tags: File<<| tag == 'value' |>> in fact we were querying parameters. Hopefully all the user tags are stored in parameters so it was working. But it wasn't possible to search on auto-tags (like class name). This patch makes sure searching by tag is done on tags both on the rails side and the resource side. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/parser/ast/collexpr.rb15
-rw-r--r--lib/puppet/parser/collector.rb2
2 files changed, 12 insertions, 5 deletions
diff --git a/lib/puppet/parser/ast/collexpr.rb b/lib/puppet/parser/ast/collexpr.rb
index 54b003a91..eae2b0e42 100644
--- a/lib/puppet/parser/ast/collexpr.rb
+++ b/lib/puppet/parser/ast/collexpr.rb
@@ -31,10 +31,14 @@ class CollExpr < AST::Branch
when "and"; code1.call(resource) and code2.call(resource)
when "or"; code1.call(resource) or code2.call(resource)
when "=="
- if resource[str1].is_a?(Array)
- resource[str1].include?(str2)
+ if str1 == "tag"
+ resource.tagged?(str2)
else
- resource[str1] == str2
+ if resource[str1].is_a?(Array)
+ resource[str1].include?(str2)
+ else
+ resource[str1] == str2
+ end
end
when "!="; resource[str1] != str2
end
@@ -58,8 +62,11 @@ class CollExpr < AST::Branch
if oper == "=" or oper == "!="
# Add the rails association info where necessary
- if str1 == "title"
+ case str1
+ when "title"
str = "title #{oper} '#{str2}'"
+ when "tag"
+ str = "puppet_tags.name #{oper} '#{str2}'"
else
str = "param_values.value #{oper} '#{str2}' and " +
"param_names.name = '#{str1}'"
diff --git a/lib/puppet/parser/collector.rb b/lib/puppet/parser/collector.rb
index ece420536..5f11a6cea 100644
--- a/lib/puppet/parser/collector.rb
+++ b/lib/puppet/parser/collector.rb
@@ -102,7 +102,7 @@ class Puppet::Parser::Collector
raise Puppet::DevError, "Cannot collect resources for a nil host" unless @scope.host
host = Puppet::Rails::Host.find_by_name(@scope.host)
- query = {:include => {:param_values => :param_name}}
+ query = {:include => {:param_values => :param_name, :puppet_tags => :resource_tags}}
search = "(exported=? AND restype=?)"
values = [true, @type]