@@ -20,6 +20,8 @@ def initialize(*args, &block)
20
20
@subscribes = [ ]
21
21
@requires = [ ]
22
22
@befores = [ ]
23
+ @tagged = [ ]
24
+ @not_tagged = [ ]
23
25
end
24
26
25
27
def with ( *args , &block )
@@ -60,6 +62,16 @@ def that_comes_before(resource)
60
62
self
61
63
end
62
64
65
+ def tagged ( resource )
66
+ @tagged . concat ( Array ( resource ) )
67
+ self
68
+ end
69
+
70
+ def not_tagged ( resource )
71
+ @not_tagged . concat ( Array ( resource ) )
72
+ self
73
+ end
74
+
63
75
def method_missing ( method , *args , &block )
64
76
if method . to_s =~ /^with_/
65
77
param = method . to_s . gsub ( /^with_/ , '' )
@@ -109,6 +121,8 @@ def matches?(catalogue)
109
121
110
122
check_params ( rsrc_hsh , @expected_params , :should ) if @expected_params . any?
111
123
check_params ( rsrc_hsh , @expected_undef_params , :not ) if @expected_undef_params . any?
124
+ check_tags ( resource , @tagged , :should ) if @tagged . any?
125
+ check_tags ( resource , @not_tagged , :not ) if @not_tagged . any?
112
126
check_befores ( @catalogue , resource ) if @befores . any?
113
127
check_requires ( @catalogue , resource ) if @requires . any?
114
128
check_notifies ( @catalogue , resource ) if @notifies . any?
@@ -162,6 +176,16 @@ def description
162
176
values = @befores
163
177
end
164
178
179
+ if @tagged . any?
180
+ value_str_prefix = "that is tagged"
181
+ values = @tagged
182
+ end
183
+
184
+ if @not_tagged . any?
185
+ value_str_prefix = "that is not tagged"
186
+ values = @not_tagged
187
+ end
188
+
165
189
unless values . empty?
166
190
if values . length == 1
167
191
value_str = " #{ value_str_prefix } #{ values . first } "
@@ -371,6 +395,25 @@ def check_params(resource, list, type)
371
395
end
372
396
end
373
397
end
398
+ # @param resource [Puppet::Resource] The resource in the catalog
399
+ # @param list [Array<String>] The expected tags for the resource
400
+ # @param type [:should, :not] Whether the given tags should/not be present
401
+ def check_tags ( resource , list , type )
402
+ case type
403
+ when :should
404
+ list . each do |tag |
405
+ unless resource . tags . include? tag
406
+ @errors << "#{ tag } is not set"
407
+ end
408
+ end
409
+ when :not
410
+ list . each do |tag |
411
+ if resource . tags . include? tag
412
+ @errors << "#{ tag } is set"
413
+ end
414
+ end
415
+ end
416
+ end
374
417
end
375
418
end
376
419
end
0 commit comments