summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-05-13 18:27:22 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-05-13 18:27:22 +0000
commit9e9ef1acc6231254e52b96257ed1e81475d2d1bc (patch)
treedb3fec56ad53ee8741c1c07e56e4f965e1f24320
parent8ed666a7c202420d4bc59cea77f3bd0bec95cc11 (diff)
downloadpuppet-9e9ef1acc6231254e52b96257ed1e81475d2d1bc.tar.gz
puppet-9e9ef1acc6231254e52b96257ed1e81475d2d1bc.tar.xz
puppet-9e9ef1acc6231254e52b96257ed1e81475d2d1bc.zip
The "collectable" syntax now works end-to-end -- the parser correctly recognizes it, the AST objects retain the settings, the scopes do the right conversion, the interpreter stores them all in the database, and then it strips the collectable objects out before sending the object list to the client
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1189 980ebf18-57e1-0310-9a29-db15c13687c0
-rw-r--r--lib/puppet/parser/ast/objectdef.rb7
-rw-r--r--lib/puppet/parser/grammar.ra22
-rw-r--r--lib/puppet/parser/interpreter.rb10
-rw-r--r--lib/puppet/parser/lexer.rb3
-rw-r--r--lib/puppet/parser/parser.rb799
-rw-r--r--lib/puppet/parser/scope.rb120
-rw-r--r--lib/puppet/rails.rb44
-rw-r--r--lib/puppet/rails/host.rb2
-rw-r--r--lib/puppet/rails/rails_object.rb8
-rw-r--r--lib/puppet/transportable.rb30
-rwxr-xr-xtest/language/interpreter.rb8
-rw-r--r--test/language/lexer.rb35
-rw-r--r--test/language/parser.rb34
-rwxr-xr-xtest/language/rails.rb38
-rwxr-xr-xtest/language/scope.rb55
-rwxr-xr-xtest/language/transportable.rb88
-rw-r--r--test/puppettest.rb61
17 files changed, 809 insertions, 555 deletions
diff --git a/lib/puppet/parser/ast/objectdef.rb b/lib/puppet/parser/ast/objectdef.rb
index 9acf56b49..f15a082e2 100644
--- a/lib/puppet/parser/ast/objectdef.rb
+++ b/lib/puppet/parser/ast/objectdef.rb
@@ -2,7 +2,7 @@ class Puppet::Parser::AST
# Any normal puppet object declaration. Can result in a class or a
# component, in addition to builtin types.
class ObjectDef < AST::Branch
- attr_accessor :name, :type
+ attr_accessor :name, :type, :collectable
attr_reader :params
# probably not used at all
@@ -93,6 +93,11 @@ class Puppet::Parser::AST
:file => @file,
:line => @line
)
+
+ # Retain our collectable marking
+ if self.collectable
+ obj.collectable = true
+ end
rescue Puppet::ParseError => except
except.line = self.line
except.file = self.file
diff --git a/lib/puppet/parser/grammar.ra b/lib/puppet/parser/grammar.ra
index c3b694534..b10999bbd 100644
--- a/lib/puppet/parser/grammar.ra
+++ b/lib/puppet/parser/grammar.ra
@@ -7,7 +7,7 @@ class Puppet::Parser::Parser
token LBRACK DQTEXT SQTEXT RBRACK LBRACE RBRACE SYMBOL FARROW COMMA TRUE FALSE EQUALS
token QMARK LPAREN RPAREN ISEQUAL GREATEREQUAL GREATERTHAN LESSTHAN LESSEQUAL NOTEQUAL
token IF ELSE IMPORT DEFINE ELSIF VARIABLE CLASS INHERITS NODE BOOLEAN DOT COLON TYPE
-token NAME SEMIC CASE DEFAULT INCLUDE TAG FUNCTION
+token NAME SEMIC CASE DEFAULT FUNCTION AT
# We have 2 shift/reduce conflicts
expect 2
@@ -40,6 +40,7 @@ statements: statement
# The main list of valid statements
statement: object
+ | collectable
| assignment
| casestatement
| import
@@ -148,6 +149,25 @@ object: name LBRACE objectinstances endsemi RBRACE {
)
}
+# Collectable objects; these get stored in the database, instead of
+# being passed to the client.
+collectable: AT object {
+ if val[1].is_a? AST::TypeDefaults
+ raise Puppet::ParseError, "Defaults are not collectable"
+ end
+
+ # Just mark our objects as collectable and pass them through.
+ if val[1].instance_of?(AST::ASTArray)
+ val[1].each do |obj|
+ obj.collectable = true
+ end
+ else
+ val[1].collectable = true
+ end
+
+ result = val[1]
+}
+
objectinst: objectname COLON params endcomma {
result = AST::ObjectInst.new(
:line => @lexer.line,
diff --git a/lib/puppet/parser/interpreter.rb b/lib/puppet/parser/interpreter.rb
index a11e870ab..5ddd82829 100644
--- a/lib/puppet/parser/interpreter.rb
+++ b/lib/puppet/parser/interpreter.rb
@@ -246,13 +246,21 @@ module Puppet
raise LoadError,
"storeconfigs is enabled but rails is unavailable"
end
- Puppet::Rails.init
end
+
+ Puppet::Rails.init
+
+ # We store all of the objects, even the collectable ones
Puppet::Rails::Host.store(
:objects => objects,
:host => client,
:facts => facts
)
+
+ # Now that we've stored everything, we need to strip out
+ # the collectable objects so that they are not sent on
+ # to the host
+ objects.collectstrip!
end
return objects
diff --git a/lib/puppet/parser/lexer.rb b/lib/puppet/parser/lexer.rb
index e3fc9ded7..65a513624 100644
--- a/lib/puppet/parser/lexer.rb
+++ b/lib/puppet/parser/lexer.rb
@@ -34,6 +34,9 @@ module Puppet
%r{,} => :COMMA,
%r{\.} => :DOT,
%r{:} => :COLON,
+ %r{@} => :AT,
+ %r{<\|} => :LCOLLECT,
+ %r{\|>} => :RCOLLECT,
%r{;} => :SEMIC,
%r{\?} => :QMARK,
%r{\\} => :BACKSLASH,
diff --git a/lib/puppet/parser/parser.rb b/lib/puppet/parser/parser.rb
index 7a5fd7c55..5b3495a8c 100644
--- a/lib/puppet/parser/parser.rb
+++ b/lib/puppet/parser/parser.rb
@@ -29,7 +29,7 @@ module Puppet
class Parser < Racc::Parser
-module_eval <<'..end grammar.ra modeval..id81e5fd5119', 'grammar.ra', 737
+module_eval <<'..end grammar.ra modeval..id4642cdeefd', 'grammar.ra', 757
require 'puppet/parser/functions'
attr_reader :file
@@ -155,52 +155,54 @@ end
# $Id$
-..end grammar.ra modeval..id81e5fd5119
+..end grammar.ra modeval..id4642cdeefd
##### racc 1.4.4 generates ###
racc_reduce_table = [
0, 0, :racc_error,
- 1, 44, :_reduce_1,
+ 1, 43, :_reduce_1,
+ 1, 44, :_reduce_none,
+ 2, 44, :_reduce_3,
1, 45, :_reduce_none,
- 2, 45, :_reduce_3,
- 1, 46, :_reduce_none,
- 1, 46, :_reduce_none,
- 1, 46, :_reduce_none,
- 1, 46, :_reduce_none,
- 1, 46, :_reduce_none,
- 1, 46, :_reduce_none,
- 1, 46, :_reduce_none,
- 1, 46, :_reduce_none,
- 4, 51, :_reduce_12,
- 2, 51, :_reduce_13,
+ 1, 45, :_reduce_none,
+ 1, 45, :_reduce_none,
+ 1, 45, :_reduce_none,
+ 1, 45, :_reduce_none,
+ 1, 45, :_reduce_none,
+ 1, 45, :_reduce_none,
+ 1, 45, :_reduce_none,
+ 1, 45, :_reduce_none,
+ 4, 51, :_reduce_13,
+ 2, 51, :_reduce_14,
1, 55, :_reduce_none,
- 3, 55, :_reduce_15,
+ 3, 55, :_reduce_16,
1, 56, :_reduce_none,
1, 56, :_reduce_none,
- 5, 47, :_reduce_18,
- 5, 47, :_reduce_19,
- 5, 47, :_reduce_20,
- 4, 64, :_reduce_21,
+ 5, 46, :_reduce_19,
+ 5, 46, :_reduce_20,
+ 5, 46, :_reduce_21,
+ 2, 47, :_reduce_22,
+ 4, 64, :_reduce_23,
1, 59, :_reduce_none,
- 3, 59, :_reduce_23,
+ 3, 59, :_reduce_25,
0, 60, :_reduce_none,
1, 60, :_reduce_none,
- 1, 57, :_reduce_26,
- 1, 63, :_reduce_27,
+ 1, 57, :_reduce_28,
+ 1, 63, :_reduce_29,
1, 65, :_reduce_none,
1, 65, :_reduce_none,
1, 65, :_reduce_none,
1, 65, :_reduce_none,
1, 65, :_reduce_none,
1, 65, :_reduce_none,
- 3, 48, :_reduce_34,
- 0, 61, :_reduce_35,
- 1, 61, :_reduce_36,
- 3, 61, :_reduce_37,
- 3, 70, :_reduce_38,
+ 3, 48, :_reduce_36,
+ 0, 61, :_reduce_37,
+ 1, 61, :_reduce_38,
+ 3, 61, :_reduce_39,
+ 3, 70, :_reduce_40,
1, 71, :_reduce_none,
- 3, 71, :_reduce_40,
+ 3, 71, :_reduce_42,
1, 69, :_reduce_none,
1, 69, :_reduce_none,
1, 69, :_reduce_none,
@@ -211,258 +213,268 @@ racc_reduce_table = [
1, 69, :_reduce_none,
1, 69, :_reduce_none,
1, 69, :_reduce_none,
- 4, 75, :_reduce_51,
- 1, 66, :_reduce_52,
- 1, 66, :_reduce_53,
- 1, 73, :_reduce_54,
- 4, 74, :_reduce_55,
- 5, 49, :_reduce_56,
+ 4, 75, :_reduce_53,
+ 1, 66, :_reduce_54,
+ 1, 66, :_reduce_55,
+ 1, 73, :_reduce_56,
+ 4, 74, :_reduce_57,
+ 5, 49, :_reduce_58,
1, 76, :_reduce_none,
- 2, 76, :_reduce_58,
- 5, 77, :_reduce_59,
- 4, 77, :_reduce_60,
+ 2, 76, :_reduce_60,
+ 5, 77, :_reduce_61,
+ 4, 77, :_reduce_62,
1, 78, :_reduce_none,
- 3, 78, :_reduce_62,
- 3, 67, :_reduce_63,
+ 3, 78, :_reduce_64,
+ 3, 67, :_reduce_65,
1, 80, :_reduce_none,
- 3, 80, :_reduce_65,
+ 3, 80, :_reduce_67,
1, 82, :_reduce_none,
- 3, 82, :_reduce_67,
- 3, 81, :_reduce_68,
+ 3, 82, :_reduce_69,
+ 3, 81, :_reduce_70,
1, 79, :_reduce_none,
1, 79, :_reduce_none,
1, 79, :_reduce_none,
1, 79, :_reduce_none,
1, 79, :_reduce_none,
1, 79, :_reduce_none,
- 1, 79, :_reduce_75,
- 2, 50, :_reduce_76,
- 6, 52, :_reduce_77,
- 5, 52, :_reduce_78,
- 6, 53, :_reduce_79,
- 5, 53, :_reduce_80,
- 6, 54, :_reduce_81,
- 5, 54, :_reduce_82,
+ 1, 79, :_reduce_77,
+ 2, 50, :_reduce_78,
+ 6, 52, :_reduce_79,
+ 5, 52, :_reduce_80,
+ 6, 53, :_reduce_81,
+ 5, 53, :_reduce_82,
+ 6, 54, :_reduce_83,
+ 5, 54, :_reduce_84,
1, 85, :_reduce_none,
- 2, 85, :_reduce_84,
- 1, 86, :_reduce_85,
- 1, 86, :_reduce_86,
- 0, 87, :_reduce_87,
+ 2, 85, :_reduce_86,
+ 1, 86, :_reduce_87,
+ 1, 86, :_reduce_88,
+ 0, 87, :_reduce_89,
1, 83, :_reduce_none,
- 3, 83, :_reduce_89,
- 3, 83, :_reduce_90,
+ 3, 83, :_reduce_91,
+ 3, 83, :_reduce_92,
1, 88, :_reduce_none,
- 3, 88, :_reduce_92,
- 3, 89, :_reduce_93,
- 1, 89, :_reduce_94,
+ 3, 88, :_reduce_94,
+ 3, 89, :_reduce_95,
+ 1, 89, :_reduce_96,
1, 84, :_reduce_none,
- 2, 84, :_reduce_96,
- 1, 58, :_reduce_97,
- 3, 68, :_reduce_98,
+ 2, 84, :_reduce_98,
+ 1, 58, :_reduce_99,
+ 3, 68, :_reduce_100,
1, 72, :_reduce_none,
1, 72, :_reduce_none,
0, 62, :_reduce_none,
- 1, 62, :_reduce_102 ]
+ 1, 62, :_reduce_104 ]
-racc_reduce_n = 103
+racc_reduce_n = 105
-racc_shift_n = 170
+racc_shift_n = 173
racc_action_table = [
- 32, 27, 28, 146, 51, 32, 27, 28, 58, 91,
- 161, 87, 106, 107, 91, 149, 80, 32, 27, 28,
- 25, 39, 32, 27, 28, 87, 39, 145, -69, 7,
- 46, 39, 85, 3, 7, 46, 50, 40, 3, 7,
- 44, 51, 40, 39, 7, 44, 122, 46, 39, 123,
- 3, 7, 46, 39, 40, 3, 7, 44, 39, 40,
- 93, 7, 44, 32, 27, 28, 7, 85, 32, 27,
- 28, 39, 135, 50, 97, 49, 27, 28, 134, 7,
- 32, 27, 28, -70, 91, 32, 27, 28, 125, 39,
- 127, 98, -70, 46, 39, -73, 3, 7, 46, 82,
- 40, 3, 65, 44, 130, 40, 39, 131, 44, 87,
- 46, 39, 103, 3, 7, 46, 97, 40, 3, 7,
- 44, 136, 40, 137, 94, 44, 32, 27, 28, -74,
- 104, 32, 27, 28, 106, 107, -72, 81, 144, 93,
- 79, -72, -71, 152, 27, 28, 74, 97, 7, 27,
- 28, 59, 39, 148, 49, 48, 46, 39, -69, 3,
- 7, 46, 162, 40, 3, 7, 44, 47, 40, 39,
- 29, 44, -71, 46, 39, 25, 3, 7, 46, 23,
- 40, 3, 7, 44, 141, 40, 27, 28, 44, nil,
- nil, 27, 28, nil, nil, nil, nil, nil, nil, nil,
- nil, nil, nil, 27, 28, nil, 114, nil, 27, 28,
- nil, 39, nil, nil, nil, 46, 39, nil, 3, 7,
- 46, nil, 40, 3, 7, 44, nil, 40, 39, nil,
- 44, 169, 46, 39, nil, 3, 7, 46, nil, 40,
- 3, 7, 44, nil, 40, nil, 151, 44, nil, 6,
- 9, nil, 13, 15, nil, 19, nil, nil, nil, 3,
- 7, 158, 11, nil, 6, 9, 20, 13, 15, nil,
- 19, nil, nil, nil, 3, 7, 164, 11, nil, 6,
- 9, 20, 13, 15, nil, 19, nil, nil, nil, 3,
- 7, 165, 11, nil, 6, 9, 20, 13, 15, nil,
- 19, nil, nil, nil, 3, 7, 168, 11, nil, 6,
- 9, 20, 13, 15, nil, 19, nil, nil, nil, 3,
- 7, 139, 11, nil, 6, 9, 20, 13, 15, nil,
- 19, nil, nil, nil, 3, 7, 154, 11, nil, 6,
- 9, 20, 13, 15, nil, 19, nil, nil, nil, 3,
- 7, nil, 11, nil, 6, 9, 20, 13, 15, nil,
- 19, nil, nil, nil, 3, 7, nil, 11, nil, 6,
- 9, 20, 13, 15, nil, 19, nil, nil, nil, 3,
- 7, nil, 11, nil, 6, 9, 20, 13, 15, nil,
- 19, nil, nil, nil, 3, 7, nil, 11, nil, nil,
- nil, 20 ]
+ 33, 28, 29, 58, 149, 40, 33, 28, 29, 140,
+ 58, 56, 40, 7, -76, 33, 28, 29, 89, -72,
+ 7, 33, 28, 29, 128, 138, 40, 84, 148, 87,
+ 47, 137, 40, 3, 7, 57, 47, 41, 42, 3,
+ 7, 40, 57, 41, 42, 47, -74, 40, 3, 67,
+ 54, 47, 41, 42, 3, 7, 40, 100, 41, 42,
+ 33, 28, 29, 40, 7, 107, 33, 28, 29, 109,
+ 110, 7, 89, 28, 29, 33, 28, 29, 152, 3,
+ 7, 33, 28, 29, 125, 164, 40, 109, 110, 126,
+ 47, 97, 40, 3, 7, 96, 47, 41, 42, 3,
+ 7, 40, 96, 41, 42, 47, 100, 40, 3, 7,
+ 130, 47, 41, 42, 3, 7, 83, -74, 41, 42,
+ 33, 28, 29, 133, 134, 91, 33, 28, 29, 82,
+ 91, -71, 139, 26, -72, 81, 28, 29, -73, 144,
+ 76, -71, 28, 29, 147, -73, 40, 61, 95, 91,
+ 47, 155, 40, 3, 7, 56, 47, 41, 42, 3,
+ 7, 40, 100, 41, 42, 47, 7, 40, 3, 7,
+ 106, 47, 41, 42, 3, 7, 28, 29, 41, 42,
+ 151, 89, 28, 29, 49, 7, 165, 48, 30, 101,
+ 26, 28, 29, 87, -75, nil, nil, 28, 29, nil,
+ 117, 40, nil, nil, nil, 47, nil, 40, 3, 7,
+ nil, 47, 41, 42, 3, 7, 40, 157, 41, 42,
+ 47, nil, 40, 3, 7, nil, 47, 41, 42, 3,
+ 7, nil, nil, 41, 42, 6, 9, 142, 13, 15,
+ nil, 21, nil, nil, nil, 3, 7, nil, 11, nil,
+ 16, 18, nil, nil, 161, 6, 9, nil, 13, 15,
+ nil, 21, nil, nil, nil, 3, 7, nil, 11, nil,
+ 16, 18, 6, 9, 167, 13, 15, nil, 21, nil,
+ nil, nil, 3, 7, nil, 11, nil, 16, 18, nil,
+ nil, 168, 6, 9, nil, 13, 15, nil, 21, nil,
+ nil, nil, 3, 7, nil, 11, nil, 16, 18, 6,
+ 9, 171, 13, 15, nil, 21, nil, nil, nil, 3,
+ 7, nil, 11, nil, 16, 18, nil, nil, 154, 6,
+ 9, nil, 13, 15, nil, 21, nil, nil, nil, 3,
+ 7, nil, 11, nil, 16, 18, 6, 9, 172, 13,
+ 15, nil, 21, nil, nil, nil, 3, 7, nil, 11,
+ nil, 16, 18, nil, nil, nil, 6, 9, nil, 13,
+ 15, nil, 21, nil, nil, nil, 3, 7, nil, 11,
+ nil, 16, 18, 6, 9, nil, 13, 15, nil, 21,
+ nil, nil, nil, 3, 7, nil, 11, nil, 16, 18,
+ 6, 9, nil, 13, 15, nil, 21, nil, nil, nil,
+ 3, 7, nil, 11, nil, 16, 18 ]
racc_action_check = [
- 47, 47, 47, 118, 19, 105, 105, 105, 20, 121,
- 143, 98, 143, 143, 54, 121, 35, 80, 80, 80,
- 35, 20, 32, 32, 32, 49, 47, 118, 35, 20,
- 47, 105, 48, 47, 47, 105, 19, 47, 105, 105,
- 47, 52, 105, 80, 74, 105, 84, 80, 32, 85,
- 80, 80, 32, 91, 80, 32, 32, 80, 82, 32,
- 87, 91, 32, 94, 94, 94, 82, 52, 25, 25,
- 25, 58, 99, 52, 88, 43, 6, 6, 99, 58,
- 11, 11, 11, 43, 92, 136, 136, 136, 89, 94,
- 92, 73, 70, 94, 25, 45, 94, 94, 25, 44,
- 94, 25, 25, 94, 95, 25, 11, 96, 25, 97,
- 11, 136, 75, 11, 11, 136, 68, 11, 136, 136,
- 11, 101, 136, 102, 67, 136, 93, 93, 93, 41,
- 78, 141, 141, 141, 78, 78, 37, 36, 116, 65,
- 33, 64, 30, 124, 81, 81, 29, 133, 135, 120,
- 120, 23, 93, 120, 17, 15, 93, 141, 63, 93,
- 93, 141, 145, 93, 141, 141, 93, 13, 141, 81,
- 9, 141, 60, 81, 120, 4, 81, 81, 120, 1,
- 81, 120, 120, 81, 110, 120, 146, 146, 120, nil,
- nil, 114, 114, nil, nil, nil, nil, nil, nil, nil,
- nil, nil, nil, 79, 79, nil, 79, nil, 160, 160,
- nil, 146, nil, nil, nil, 146, 114, nil, 146, 146,
- 114, nil, 146, 114, 114, 146, nil, 114, 79, nil,
- 114, 167, 79, 160, nil, 79, 79, 160, nil, 79,
- 160, 160, 79, nil, 160, nil, 122, 160, nil, 167,
- 167, nil, 167, 167, nil, 167, nil, nil, nil, 167,
- 167, 138, 167, nil, 122, 122, 167, 122, 122, nil,
- 122, nil, nil, nil, 122, 122, 150, 122, nil, 138,
- 138, 122, 138, 138, nil, 138, nil, nil, nil, 138,
- 138, 153, 138, nil, 150, 150, 138, 150, 150, nil,
- 150, nil, nil, nil, 150, 150, 162, 150, nil, 153,
- 153, 150, 153, 153, nil, 153, nil, nil, nil, 153,
- 153, 103, 153, nil, 162, 162, 153, 162, 162, nil,
- 162, nil, nil, nil, 162, 162, 125, 162, nil, 103,
- 103, 162, 103, 103, nil, 103, nil, nil, nil, 103,
- 103, nil, 103, nil, 125, 125, 103, 125, 125, nil,
- 125, nil, nil, nil, 125, 125, nil, 125, nil, 2,
- 2, 125, 2, 2, nil, 2, nil, nil, nil, 2,
- 2, nil, 2, nil, 0, 0, 2, 0, 0, nil,
- 0, nil, nil, nil, 0, 0, nil, 0, nil, nil,
- nil, 0 ]
+ 48, 48, 48, 59, 121, 54, 82, 82, 82, 105,
+ 21, 45, 84, 54, 43, 26, 26, 26, 90, 45,
+ 84, 108, 108, 108, 90, 102, 48, 42, 121, 59,
+ 48, 102, 82, 48, 48, 59, 82, 48, 48, 82,
+ 82, 26, 21, 82, 82, 26, 39, 108, 26, 26,
+ 16, 108, 26, 26, 108, 108, 89, 70, 108, 108,
+ 96, 96, 96, 16, 89, 80, 11, 11, 11, 80,
+ 80, 16, 124, 6, 6, 33, 33, 33, 124, 18,
+ 18, 139, 139, 139, 86, 146, 96, 146, 146, 87,
+ 96, 69, 11, 96, 96, 67, 11, 96, 96, 11,
+ 11, 33, 91, 11, 11, 33, 92, 139, 33, 33,
+ 93, 139, 33, 33, 139, 139, 38, 66, 139, 139,
+ 97, 97, 97, 98, 99, 100, 144, 144, 144, 37,
+ 101, 65, 104, 37, 72, 34, 149, 149, 31, 113,
+ 30, 37, 83, 83, 119, 62, 97, 24, 61, 56,
+ 97, 129, 144, 97, 97, 19, 144, 97, 97, 144,
+ 144, 149, 136, 144, 144, 149, 138, 83, 149, 149,
+ 77, 83, 149, 149, 83, 83, 123, 123, 83, 83,
+ 123, 50, 163, 163, 15, 76, 148, 13, 9, 75,
+ 4, 117, 117, 49, 46, nil, nil, 81, 81, nil,
+ 81, 123, nil, nil, nil, 123, nil, 163, 123, 123,
+ nil, 163, 123, 123, 163, 163, 117, 130, 163, 163,
+ 117, nil, 81, 117, 117, nil, 81, 117, 117, 81,
+ 81, nil, nil, 81, 81, 130, 130, 106, 130, 130,
+ nil, 130, nil, nil, nil, 130, 130, nil, 130, nil,
+ 130, 130, nil, nil, 141, 106, 106, nil, 106, 106,
+ nil, 106, nil, nil, nil, 106, 106, nil, 106, nil,
+ 106, 106, 141, 141, 153, 141, 141, nil, 141, nil,
+ nil, nil, 141, 141, nil, 141, nil, 141, 141, nil,
+ nil, 156, 153, 153, nil, 153, 153, nil, 153, nil,
+ nil, nil, 153, 153, nil, 153, nil, 153, 153, 156,
+ 156, 165, 156, 156, nil, 156, nil, nil, nil, 156,
+ 156, nil, 156, nil, 156, 156, nil, nil, 125, 165,
+ 165, nil, 165, 165, nil, 165, nil, nil, nil, 165,
+ 165, nil, 165, nil, 165, 165, 125, 125, 170, 125,
+ 125, nil, 125, nil, nil, nil, 125, 125, nil, 125,
+ nil, 125, 125, nil, nil, nil, 170, 170, nil, 170,
+ 170, nil, 170, nil, nil, nil, 170, 170, nil, 170,
+ nil, 170, 170, 0, 0, nil, 0, 0, nil, 0,
+ nil, nil, nil, 0, 0, nil, 0, nil, 0, 0,
+ 1, 1, nil, 1, 1, nil, 1, nil, nil, nil,
+ 1, 1, nil, 1, nil, 1, 1 ]
racc_action_pointer = [
- 359, 179, 344, nil, 169, nil, 73, nil, nil, 134,
- nil, 78, nil, 154, nil, 119, nil, 148, nil, 0,
- -7, nil, nil, 151, nil, 66, nil, nil, nil, 131,
- 128, nil, 20, 126, nil, 14, 131, 122, nil, nil,
- nil, 115, nil, 69, 84, 81, nil, -2, 2, -11,
- nil, nil, 37, nil, 4, nil, nil, nil, 43, nil,
- 158, nil, nil, 144, 127, 130, nil, 87, 106, nil,
- 78, nil, nil, 57, 8, 106, nil, nil, 125, 200,
- 15, 141, 30, nil, 40, 13, nil, 51, 64, 82,
- nil, 25, 74, 124, 61, 97, 100, 73, -25, 62,
- nil, 108, 107, 314, nil, 3, nil, nil, nil, nil,
- 175, nil, nil, nil, 188, nil, 133, nil, -7, nil,
- 146, -1, 239, nil, 136, 329, nil, nil, nil, nil,
- nil, nil, nil, 137, nil, 112, 83, nil, 254, nil,
- nil, 129, nil, 3, nil, 156, 183, nil, nil, nil,
- 269, nil, nil, 284, nil, nil, nil, nil, nil, nil,
- 205, nil, 299, nil, nil, nil, nil, 224, nil, nil ]
+ 358, 375, nil, nil, 184, nil, 70, nil, nil, 152,
+ nil, 64, nil, 174, nil, 148, 35, nil, 44, 149,
+ nil, 6, nil, nil, 147, nil, 13, nil, nil, nil,
+ 125, 124, nil, 73, 121, nil, nil, 127, 110, 32,
+ nil, nil, 12, 0, nil, 5, 180, nil, -2, 163,
+ 171, nil, nil, nil, -23, nil, 113, nil, nil, -1,
+ nil, 148, 131, nil, nil, 117, 103, 86, nil, 54,
+ 47, nil, 120, nil, nil, 155, 149, 164, nil, nil,
+ 60, 194, 4, 139, -16, nil, 78, 53, nil, 28,
+ 8, 93, 96, 104, nil, nil, 58, 118, 116, 117,
+ 89, 94, 15, nil, 119, -7, 230, nil, 19, nil,
+ nil, nil, nil, 130, nil, nil, nil, 188, nil, 139,
+ nil, -6, nil, 173, 62, 321, nil, nil, nil, 144,
+ 210, nil, nil, nil, nil, nil, 152, nil, 130, 79,
+ nil, 247, nil, nil, 124, nil, 78, nil, 180, 133,
+ nil, nil, nil, 267, nil, nil, 284, nil, nil, nil,
+ nil, nil, nil, 179, nil, 304, nil, nil, nil, nil,
+ 341, nil, nil ]
racc_action_default = [
- -103, -103, -1, -27, -103, -2, -103, -26, -4, -103,
- -5, -103, -6, -103, -7, -103, -8, -103, -9, -103,
- -103, -10, -11, -103, -3, -35, -76, -52, -53, -87,
- -41, -45, -103, -103, -48, -42, -103, -47, -46, -97,
- -75, -44, -49, -43, -103, -50, -54, -103, -87, -35,
- -85, -86, -87, -83, -13, -14, -16, -17, -103, 170,
- -28, -31, -33, -29, -32, -26, -36, -24, -101, -74,
- -30, -73, -22, -103, -87, -103, -88, -39, -103, -103,
- -103, -103, -103, -34, -103, -103, -95, -103, -101, -103,
- -84, -103, -103, -103, -25, -103, -103, -102, -35, -103,
- -91, -94, -103, -103, -98, -103, -99, -100, -71, -69,
- -103, -72, -63, -64, -103, -70, -103, -57, -103, -61,
- -103, -103, -103, -96, -103, -103, -15, -12, -38, -23,
- -18, -19, -37, -101, -90, -103, -103, -89, -103, -78,
- -40, -103, -66, -103, -55, -103, -103, -58, -56, -51,
- -103, -80, -20, -103, -82, -21, -92, -93, -77, -68,
- -103, -65, -103, -62, -79, -81, -67, -103, -60, -59 ]
+ -105, -1, -2, -29, -105, -4, -105, -28, -5, -105,
+ -6, -105, -7, -105, -8, -105, -105, -9, -105, -105,
+ -10, -105, -11, -12, -105, -3, -37, -78, -54, -55,
+ -89, -43, -47, -105, -105, -50, -48, -44, -105, -49,
+ -99, -77, -105, -46, -51, -45, -52, -56, -105, -89,
+ -14, -15, -17, -18, -105, -22, -37, -87, -88, -89,
+ -85, -105, -30, -33, -35, -31, -34, -28, -38, -26,
+ -103, -76, -32, -75, -24, -105, -89, -105, -90, -41,
+ -105, -105, -105, -105, -105, -36, -105, -105, -97, -105,
+ -105, -105, -103, -105, -86, 173, -105, -27, -105, -105,
+ -104, -37, -105, -93, -96, -105, -105, -100, -105, -101,
+ -102, -73, -71, -105, -74, -65, -66, -105, -72, -105,
+ -59, -105, -63, -105, -105, -105, -98, -16, -13, -105,
+ -105, -40, -25, -19, -20, -39, -103, -92, -105, -105,
+ -91, -105, -80, -42, -105, -68, -105, -57, -105, -105,
+ -60, -58, -53, -105, -82, -21, -105, -84, -23, -94,
+ -95, -79, -70, -105, -67, -105, -64, -81, -83, -69,
+ -105, -62, -61 ]
racc_goto_table = [
- 24, 2, 26, 35, 105, 96, 68, 113, 76, 132,
- 117, 53, 56, 110, 78, 119, 112, 63, 61, 54,
- 38, 60, 71, 72, 35, 124, 62, 84, 120, 143,
- 88, 89, 100, 75, 95, 52, 67, 126, 99, 35,
- 1, 38, 142, nil, 90, nil, nil, nil, 110, 147,
- 56, nil, nil, 102, 119, nil, 38, 92, nil, nil,
- 57, nil, nil, nil, nil, 64, 101, nil, nil, 160,
- 155, 109, 35, 109, 56, 108, 71, 108, 71, 133,
- 163, 121, nil, 56, nil, 35, 63, 61, 166, 38,
- 60, 71, 129, 156, 110, 62, nil, 35, 57, 43,
- nil, nil, 38, nil, 138, nil, 109, nil, nil, nil,
- 108, 71, 109, 70, 38, nil, 108, 71, 69, 111,
- 43, 111, 57, 150, nil, nil, 153, 101, 35, nil,
- nil, 57, nil, 35, 64, 43, 24, 36, 109, nil,
- nil, nil, 108, 71, nil, 38, nil, nil, 24, nil,
- 38, 24, 109, nil, 111, nil, 108, 71, 77, nil,
- 111, nil, nil, 167, nil, 24, nil, 115, 43, 115,
- nil, nil, 69, 83, 69, nil, nil, nil, nil, nil,
- nil, 43, 70, nil, nil, nil, 111, 69, nil, nil,
- nil, nil, nil, 43, nil, nil, nil, nil, nil, nil,
- 111, nil, 115, nil, nil, nil, 116, 69, 115, nil,
- nil, nil, nil, 69, nil, nil, nil, nil, nil, 128,
- nil, nil, nil, nil, 43, nil, nil, nil, nil, 43,
- nil, 140, nil, nil, 115, nil, nil, nil, nil, 69,
- nil, nil, nil, nil, nil, nil, nil, nil, 115, nil,
- nil, nil, nil, 69, nil, nil, nil, nil, nil, nil,
- nil, nil, 157, nil, nil, nil, nil, 159 ]
+ 25, 1, 27, 63, 74, 50, 116, 78, 103, 120,
+ 86, 37, 60, 135, 80, 45, 52, 70, 115, 64,
+ 93, 123, 62, 73, 146, 108, 65, 113, 77, 122,
+ 72, 98, 59, 37, 69, 127, 99, 45, 102, 24,
+ nil, nil, 145, 90, nil, nil, nil, 92, 37, 150,
+ 94, nil, 45, 105, 52, nil, nil, nil, 129, nil,
+ nil, nil, nil, 113, nil, nil, nil, nil, nil, 122,
+ 159, nil, nil, 124, 63, 132, 104, 111, 73, 111,
+ 73, 112, 37, 112, 52, 118, 45, 118, 169, 52,
+ 64, 163, 136, 62, 73, 166, 37, 65, nil, nil,
+ 45, 72, 158, nil, nil, nil, nil, 141, 37, 113,
+ nil, nil, 45, 111, 73, nil, 71, 112, 53, 111,
+ 73, 118, nil, 112, nil, nil, 153, 118, 66, nil,
+ nil, 156, nil, nil, nil, 36, nil, nil, 104, 37,
+ 25, nil, 55, 45, 37, 111, 73, nil, 45, 112,
+ nil, nil, 25, 118, nil, 25, 53, 36, 38, 111,
+ 73, nil, nil, 112, nil, nil, 170, 118, nil, 25,
+ nil, 71, 36, 71, nil, nil, nil, nil, nil, nil,
+ 79, nil, nil, 114, nil, 114, 53, 71, nil, nil,
+ nil, 53, nil, nil, nil, 85, nil, nil, nil, 66,
+ nil, nil, nil, nil, nil, nil, 36, 71, nil, nil,
+ nil, nil, nil, 71, nil, nil, nil, nil, nil, 114,
+ 36, nil, nil, nil, nil, 114, nil, nil, nil, 119,
+ nil, nil, 36, nil, nil, nil, nil, nil, nil, 71,
+ nil, nil, nil, 131, nil, nil, nil, nil, nil, nil,
+ nil, 114, nil, 71, nil, 143, nil, nil, nil, nil,
+ nil, nil, nil, 36, nil, 114, nil, nil, 36, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 160, nil, nil, nil,
+ nil, 162 ]
racc_goto_check = [
- 3, 2, 23, 14, 29, 19, 18, 38, 44, 27,
- 34, 43, 14, 36, 28, 36, 37, 14, 24, 12,
- 4, 23, 32, 21, 14, 19, 25, 41, 33, 39,
- 18, 41, 46, 40, 17, 42, 16, 13, 45, 14,
- 1, 4, 38, nil, 43, nil, nil, nil, 36, 34,
- 14, nil, nil, 44, 36, nil, 4, 12, nil, nil,
- 15, nil, nil, nil, nil, 15, 14, nil, nil, 29,
- 19, 14, 14, 14, 14, 23, 32, 23, 32, 18,
- 36, 12, nil, 14, nil, 14, 14, 24, 38, 4,
- 23, 32, 21, 46, 36, 25, nil, 14, 15, 20,
- nil, nil, 4, nil, 2, nil, 14, nil, nil, nil,
- 23, 32, 14, 20, 4, nil, 23, 32, 30, 15,
- 20, 15, 15, 2, nil, nil, 2, 14, 14, nil,
- nil, 15, nil, 14, 15, 20, 3, 26, 14, nil,
- nil, nil, 23, 32, nil, 4, nil, nil, 3, nil,
- 4, 3, 14, nil, 15, nil, 23, 32, 26, nil,
- 15, nil, nil, 2, nil, 3, nil, 20, 20, 20,
- nil, nil, 30, 26, 30, nil, nil, nil, nil, nil,
- nil, 20, 20, nil, nil, nil, 15, 30, nil, nil,
- nil, nil, nil, 20, nil, nil, nil, nil, nil, nil,
- 15, nil, 20, nil, nil, nil, 26, 30, 20, nil,
- nil, nil, nil, 30, nil, nil, nil, nil, nil, 26,
- nil, nil, nil, nil, 20, nil, nil, nil, nil, 20,
- nil, 26, nil, nil, 20, nil, nil, nil, nil, 30,
- nil, nil, nil, nil, nil, nil, nil, nil, 20, nil,
- nil, nil, nil, 30, nil, nil, nil, nil, nil, nil,
- nil, nil, 26, nil, nil, nil, nil, 26 ]
+ 3, 2, 24, 25, 22, 13, 39, 45, 47, 35,
+ 42, 15, 44, 28, 29, 21, 15, 19, 38, 26,
+ 42, 34, 24, 33, 40, 30, 15, 37, 41, 37,
+ 21, 18, 43, 15, 17, 14, 20, 21, 46, 1,
+ nil, nil, 39, 13, nil, nil, nil, 19, 15, 35,
+ 44, nil, 21, 45, 15, nil, nil, nil, 20, nil,
+ nil, nil, nil, 37, nil, nil, nil, nil, nil, 37,
+ 47, nil, nil, 13, 25, 22, 15, 24, 33, 24,
+ 33, 15, 15, 15, 15, 21, 21, 21, 39, 15,
+ 26, 30, 19, 24, 33, 37, 15, 15, nil, nil,
+ 21, 21, 20, nil, nil, nil, nil, 2, 15, 37,
+ nil, nil, 21, 24, 33, nil, 31, 15, 16, 24,
+ 33, 21, nil, 15, nil, nil, 2, 21, 16, nil,
+ nil, 2, nil, nil, nil, 4, nil, nil, 15, 15,
+ 3, nil, 4, 21, 15, 24, 33, nil, 21, 15,
+ nil, nil, 3, 21, nil, 3, 16, 4, 27, 24,
+ 33, nil, nil, 15, nil, nil, 2, 21, nil, 3,
+ nil, 31, 4, 31, nil, nil, nil, nil, nil, nil,
+ 27, nil, nil, 16, nil, 16, 16, 31, nil, nil,
+ nil, 16, nil, nil, nil, 27, nil, nil, nil, 16,
+ nil, nil, nil, nil, nil, nil, 4, 31, nil, nil,
+ nil, nil, nil, 31, nil, nil, nil, nil, nil, 16,
+ 4, nil, nil, nil, nil, 16, nil, nil, nil, 27,
+ nil, nil, 4, nil, nil, nil, nil, nil, nil, 31,
+ nil, nil, nil, 27, nil, nil, nil, nil, nil, nil,
+ nil, 16, nil, 31, nil, 27, nil, nil, nil, nil,
+ nil, nil, nil, 4, nil, 16, nil, nil, 4, nil,
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, nil, 27, nil, nil, nil,
+ nil, 27 ]
racc_goto_pointer = [
- nil, 40, 1, -2, 9, nil, nil, nil, nil, nil,
- nil, nil, -1, -54, -8, 40, 11, -33, -19, -63,
- 88, -2, nil, -4, -7, 1, 126, -88, -18, -74,
- 93, nil, -3, -53, -71, nil, -66, -63, -72, -85,
- 4, -21, 16, -8, -21, -36, -42 ]
+ nil, 39, 1, -1, 124, nil, nil, nil, nil, nil,
+ nil, nil, nil, -11, -54, 0, 102, 8, -38, -9,
+ -34, 4, -22, nil, -4, -23, -7, 147, -87, -19,
+ -55, 90, nil, -3, -62, -74, nil, -54, -63, -75,
+ -93, -2, -39, 11, -9, -23, -38, -68 ]
racc_goto_default = [
- nil, nil, nil, 5, 8, 10, 12, 14, 16, 18,
- 21, 22, nil, 55, 4, 37, nil, nil, nil, nil,
- 17, nil, 73, 30, 31, 34, nil, 66, nil, nil,
- 41, 42, 45, nil, nil, 118, 33, nil, nil, nil,
- nil, nil, nil, nil, 86, nil, nil ]
+ nil, nil, nil, 2, 5, 8, 10, 12, 14, 17,
+ 20, 22, 23, nil, 51, 4, 39, nil, nil, nil,
+ nil, 19, nil, 75, 31, 32, 35, nil, 68, nil,
+ nil, 43, 44, 46, nil, nil, 121, 34, nil, nil,
+ nil, nil, nil, nil, nil, 88, nil, nil ]
racc_token_table = {
false => 0,
@@ -505,13 +517,12 @@ racc_token_table = {
:SEMIC => 37,
:CASE => 38,
:DEFAULT => 39,
- :INCLUDE => 40,
- :TAG => 41,
- :FUNCTION => 42 }
+ :FUNCTION => 40,
+ :AT => 41 }
racc_use_result_var = true
-racc_nt_base = 43
+racc_nt_base = 42
Racc_arg = [
racc_action_table,
@@ -570,14 +581,14 @@ Racc_token_to_s_table = [
'SEMIC',
'CASE',
'DEFAULT',
-'INCLUDE',
-'TAG',
'FUNCTION',
+'AT',
'$start',
'program',
'statements',
'statement',
'object',
+'collectable',
'assignment',
'casestatement',
'import',
@@ -675,8 +686,10 @@ module_eval <<'.,.,', 'grammar.ra', 39
# reduce 11 omitted
-module_eval <<'.,.,', 'grammar.ra', 60
- def _reduce_12( val, _values, result )
+ # reduce 12 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 61
+ def _reduce_13( val, _values, result )
args = aryfy(val[2])
result = AST::Function.new(
:line => @lexer.line,
@@ -689,8 +702,8 @@ module_eval <<'.,.,', 'grammar.ra', 60
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 70
- def _reduce_13( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 71
+ def _reduce_14( val, _values, result )
args = aryfy(val[1])
result = AST::Function.new(
:line => @lexer.line,
@@ -703,10 +716,10 @@ module_eval <<'.,.,', 'grammar.ra', 70
end
.,.,
- # reduce 14 omitted
+ # reduce 15 omitted
-module_eval <<'.,.,', 'grammar.ra', 89
- def _reduce_15( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 90
+ def _reduce_16( val, _values, result )
result = aryfy(val[0], val[2])
result.line = @lexer.line
result.file = @lexer.file
@@ -714,12 +727,12 @@ module_eval <<'.,.,', 'grammar.ra', 89
end
.,.,
- # reduce 16 omitted
-
# reduce 17 omitted
-module_eval <<'.,.,', 'grammar.ra', 123
- def _reduce_18( val, _values, result )
+ # reduce 18 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 124
+ def _reduce_19( val, _values, result )
if val[0].instance_of?(AST::ASTArray)
raise Puppet::ParseError, "Invalid name"
end
@@ -751,8 +764,8 @@ module_eval <<'.,.,', 'grammar.ra', 123
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 137
- def _reduce_19( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 138
+ def _reduce_20( val, _values, result )
if val[0].instance_of?(AST::ASTArray)
Puppet.notice "invalid name"
raise Puppet::ParseError, "Invalid name"
@@ -770,8 +783,8 @@ module_eval <<'.,.,', 'grammar.ra', 137
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 149
- def _reduce_20( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 150
+ def _reduce_21( val, _values, result )
# a template setting for a type
if val[0].instance_of?(AST::ASTArray)
raise Puppet::ParseError, "Invalid type"
@@ -787,8 +800,28 @@ module_eval <<'.,.,', 'grammar.ra', 149
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 157
- def _reduce_21( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 169
+ def _reduce_22( val, _values, result )
+ if val[1].is_a? AST::TypeDefaults
+ raise Puppet::ParseError, "Defaults are not collectable"
+ end
+
+ # Just mark our objects as collectable and pass them through.
+ if val[1].instance_of?(AST::ASTArray)
+ val[1].each do |obj|
+ obj.collectable = true
+ end
+ else
+ val[1].collectable = true
+ end
+
+ result = val[1]
+ result
+ end
+.,.,
+
+module_eval <<'.,.,', 'grammar.ra', 177
+ def _reduce_23( val, _values, result )
result = AST::ObjectInst.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -798,10 +831,10 @@ module_eval <<'.,.,', 'grammar.ra', 157
end
.,.,
- # reduce 22 omitted
+ # reduce 24 omitted
-module_eval <<'.,.,', 'grammar.ra', 171
- def _reduce_23( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 191
+ def _reduce_25( val, _values, result )
if val[0].instance_of?(AST::ObjectInst)
result = AST::ASTArray.new(
:line => @lexer.line,
@@ -816,12 +849,12 @@ module_eval <<'.,.,', 'grammar.ra', 171
end
.,.,
- # reduce 24 omitted
+ # reduce 26 omitted
- # reduce 25 omitted
+ # reduce 27 omitted
-module_eval <<'.,.,', 'grammar.ra', 182
- def _reduce_26( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 202
+ def _reduce_28( val, _values, result )
result = AST::Name.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -831,8 +864,8 @@ module_eval <<'.,.,', 'grammar.ra', 182
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 190
- def _reduce_27( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 210
+ def _reduce_29( val, _values, result )
result = AST::Type.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -842,10 +875,6 @@ module_eval <<'.,.,', 'grammar.ra', 190
end
.,.,
- # reduce 28 omitted
-
- # reduce 29 omitted
-
# reduce 30 omitted
# reduce 31 omitted
@@ -854,8 +883,12 @@ module_eval <<'.,.,', 'grammar.ra', 190
# reduce 33 omitted
-module_eval <<'.,.,', 'grammar.ra', 213
- def _reduce_34( val, _values, result )
+ # reduce 34 omitted
+
+ # reduce 35 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 233
+ def _reduce_36( val, _values, result )
# this is distinct from referencing a variable
variable = AST::Name.new(
:line => @lexer.line,
@@ -873,8 +906,8 @@ module_eval <<'.,.,', 'grammar.ra', 213
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 222
- def _reduce_35( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 242
+ def _reduce_37( val, _values, result )
result = AST::ASTArray.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -884,15 +917,15 @@ module_eval <<'.,.,', 'grammar.ra', 222
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 222
- def _reduce_36( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 242
+ def _reduce_38( val, _values, result )
result = val[0]
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 235
- def _reduce_37( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 255
+ def _reduce_39( val, _values, result )
if val[0].instance_of?(AST::ASTArray)
val[0].push(val[2])
result = val[0]
@@ -907,8 +940,8 @@ module_eval <<'.,.,', 'grammar.ra', 235
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 250
- def _reduce_38( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 270
+ def _reduce_40( val, _values, result )
leaf = AST::String.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -925,10 +958,10 @@ module_eval <<'.,.,', 'grammar.ra', 250
end
.,.,
- # reduce 39 omitted
+ # reduce 41 omitted
-module_eval <<'.,.,', 'grammar.ra', 263
- def _reduce_40( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 283
+ def _reduce_42( val, _values, result )
if val[0].instance_of?(AST::ASTArray)
result = val[0].push(val[2])
else
@@ -942,10 +975,6 @@ module_eval <<'.,.,', 'grammar.ra', 263
end
.,.,
- # reduce 41 omitted
-
- # reduce 42 omitted
-
# reduce 43 omitted
# reduce 44 omitted
@@ -962,8 +991,12 @@ module_eval <<'.,.,', 'grammar.ra', 263
# reduce 50 omitted
-module_eval <<'.,.,', 'grammar.ra', 286
- def _reduce_51( val, _values, result )
+ # reduce 51 omitted
+
+ # reduce 52 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 306
+ def _reduce_53( val, _values, result )
args = aryfy(val[2])
result = AST::Function.new(
:line => @lexer.line,
@@ -976,8 +1009,8 @@ module_eval <<'.,.,', 'grammar.ra', 286
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 294
- def _reduce_52( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 314
+ def _reduce_54( val, _values, result )
result = AST::String.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -987,8 +1020,8 @@ module_eval <<'.,.,', 'grammar.ra', 294
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 300
- def _reduce_53( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 320
+ def _reduce_55( val, _values, result )
result = AST::FlatString.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -998,8 +1031,8 @@ module_eval <<'.,.,', 'grammar.ra', 300
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 308
- def _reduce_54( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 328
+ def _reduce_56( val, _values, result )
result = AST::Boolean.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -1009,8 +1042,8 @@ module_eval <<'.,.,', 'grammar.ra', 308
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 318
- def _reduce_55( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 338
+ def _reduce_57( val, _values, result )
result = AST::ObjectRef.new(
:pin => '[]',
:line => @lexer.line,
@@ -1022,8 +1055,8 @@ module_eval <<'.,.,', 'grammar.ra', 318
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 335
- def _reduce_56( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 355
+ def _reduce_58( val, _values, result )
options = val[3]
unless options.instance_of?(AST::ASTArray)
options = AST::ASTArray.new(
@@ -1042,10 +1075,10 @@ module_eval <<'.,.,', 'grammar.ra', 335
end
.,.,
- # reduce 57 omitted
+ # reduce 59 omitted
-module_eval <<'.,.,', 'grammar.ra', 349
- def _reduce_58( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 369
+ def _reduce_60( val, _values, result )
if val[0].instance_of?(AST::ASTArray)
val[0].push val[1]
result = val[0]
@@ -1060,8 +1093,8 @@ module_eval <<'.,.,', 'grammar.ra', 349
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 359
- def _reduce_59( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 379
+ def _reduce_61( val, _values, result )
result = AST::CaseOpt.new(
:pin => ":",
:value => val[0],
@@ -1073,8 +1106,8 @@ module_eval <<'.,.,', 'grammar.ra', 359
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 371
- def _reduce_60( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 391
+ def _reduce_62( val, _values, result )
result = AST::CaseOpt.new(
:pin => ":",
:value => val[0],
@@ -1090,10 +1123,10 @@ module_eval <<'.,.,', 'grammar.ra', 371
end
.,.,
- # reduce 61 omitted
+ # reduce 63 omitted
-module_eval <<'.,.,', 'grammar.ra', 385
- def _reduce_62( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 405
+ def _reduce_64( val, _values, result )
if val[0].instance_of?(AST::ASTArray)
val[0].push(val[2])
result = val[0]
@@ -1108,8 +1141,8 @@ module_eval <<'.,.,', 'grammar.ra', 385
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 395
- def _reduce_63( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 415
+ def _reduce_65( val, _values, result )
result = AST::Selector.new(
:pin => "?",
:line => @lexer.line,
@@ -1121,19 +1154,19 @@ module_eval <<'.,.,', 'grammar.ra', 395
end
.,.,
- # reduce 64 omitted
+ # reduce 66 omitted
-module_eval <<'.,.,', 'grammar.ra', 397
- def _reduce_65( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 417
+ def _reduce_67( val, _values, result )
result = val[1]
result
end
.,.,
- # reduce 66 omitted
+ # reduce 68 omitted
-module_eval <<'.,.,', 'grammar.ra', 412
- def _reduce_67( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 432
+ def _reduce_69( val, _values, result )
if val[0].instance_of?(AST::ASTArray)
val[0].push(val[2])
result = val[0]
@@ -1148,8 +1181,8 @@ module_eval <<'.,.,', 'grammar.ra', 412
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 422
- def _reduce_68( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 442
+ def _reduce_70( val, _values, result )
result = AST::ObjectParam.new(
:pin => "=>",
:line => @lexer.line,
@@ -1161,10 +1194,6 @@ module_eval <<'.,.,', 'grammar.ra', 422
end
.,.,
- # reduce 69 omitted
-
- # reduce 70 omitted
-
# reduce 71 omitted
# reduce 72 omitted
@@ -1173,8 +1202,12 @@ module_eval <<'.,.,', 'grammar.ra', 422
# reduce 74 omitted
-module_eval <<'.,.,', 'grammar.ra', 436
- def _reduce_75( val, _values, result )
+ # reduce 75 omitted
+
+ # reduce 76 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 456
+ def _reduce_77( val, _values, result )
result = AST::Default.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -1184,8 +1217,8 @@ module_eval <<'.,.,', 'grammar.ra', 436
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 498
- def _reduce_76( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 518
+ def _reduce_78( val, _values, result )
# importing files
# yuk, i hate keywords
# we'll probably have to have some kind of search path eventually
@@ -1249,8 +1282,8 @@ module_eval <<'.,.,', 'grammar.ra', 498
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 509
- def _reduce_77( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 529
+ def _reduce_79( val, _values, result )
result = AST::CompDef.new(
:type => AST::Name.new(:value => val[1], :line => @lexer.line),
:args => val[2],
@@ -1263,8 +1296,8 @@ module_eval <<'.,.,', 'grammar.ra', 509
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 522
- def _reduce_78( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 542
+ def _reduce_80( val, _values, result )
result = AST::CompDef.new(
:type => AST::Name.new(:value => val[1], :line => @lexer.line),
:args => val[2],
@@ -1281,8 +1314,8 @@ module_eval <<'.,.,', 'grammar.ra', 522
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 539
- def _reduce_79( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 559
+ def _reduce_81( val, _values, result )
#:args => val[2],
args = {
:type => AST::Name.new(:value => val[1], :line => @lexer.line),
@@ -1300,8 +1333,8 @@ module_eval <<'.,.,', 'grammar.ra', 539
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 556
- def _reduce_80( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 576
+ def _reduce_82( val, _values, result )
args = {
:type => AST::Name.new(:value => val[1], :line => @lexer.line),
:file => @lexer.file,
@@ -1322,8 +1355,8 @@ module_eval <<'.,.,', 'grammar.ra', 556
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 577
- def _reduce_81( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 597
+ def _reduce_83( val, _values, result )
unless val[1].instance_of?(AST::ASTArray)
val[1] = AST::ASTArray.new(
:line => val[1].line,
@@ -1346,8 +1379,8 @@ module_eval <<'.,.,', 'grammar.ra', 577
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 600
- def _reduce_82( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 620
+ def _reduce_84( val, _values, result )
unless val[1].instance_of?(AST::ASTArray)
val[1] = AST::ASTArray.new(
:line => val[1].line,
@@ -1374,10 +1407,10 @@ module_eval <<'.,.,', 'grammar.ra', 600
end
.,.,
- # reduce 83 omitted
+ # reduce 85 omitted
-module_eval <<'.,.,', 'grammar.ra', 614
- def _reduce_84( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 634
+ def _reduce_86( val, _values, result )
if val[0].instance_of?(AST::ASTArray)
result = val[0]
result.push val[1]
@@ -1392,8 +1425,8 @@ module_eval <<'.,.,', 'grammar.ra', 614
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 622
- def _reduce_85( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 642
+ def _reduce_87( val, _values, result )
result = AST::HostName.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -1403,8 +1436,8 @@ module_eval <<'.,.,', 'grammar.ra', 622
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 628
- def _reduce_86( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 648
+ def _reduce_88( val, _values, result )
result = AST::HostName.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -1414,8 +1447,8 @@ module_eval <<'.,.,', 'grammar.ra', 628
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 636
- def _reduce_87( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 656
+ def _reduce_89( val, _values, result )
result = AST::ASTArray.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -1425,17 +1458,17 @@ module_eval <<'.,.,', 'grammar.ra', 636
end
.,.,
- # reduce 88 omitted
+ # reduce 90 omitted
-module_eval <<'.,.,', 'grammar.ra', 641
- def _reduce_89( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 661
+ def _reduce_91( val, _values, result )
result = val[1]
result
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 652
- def _reduce_90( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 672
+ def _reduce_92( val, _values, result )
if val[1].instance_of?(AST::ASTArray)
result = val[1]
else
@@ -1449,10 +1482,10 @@ module_eval <<'.,.,', 'grammar.ra', 652
end
.,.,
- # reduce 91 omitted
+ # reduce 93 omitted
-module_eval <<'.,.,', 'grammar.ra', 666
- def _reduce_92( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 686
+ def _reduce_94( val, _values, result )
if val[0].instance_of?(AST::ASTArray)
val[0].push(val[2])
result = val[0]
@@ -1467,8 +1500,8 @@ module_eval <<'.,.,', 'grammar.ra', 666
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 674
- def _reduce_93( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 694
+ def _reduce_95( val, _values, result )
result = AST::CompArgument.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -1478,8 +1511,8 @@ module_eval <<'.,.,', 'grammar.ra', 674
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 681
- def _reduce_94( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 701
+ def _reduce_96( val, _values, result )
result = AST::CompArgument.new(
:line => @lexer.line,
:file => @lexer.file,
@@ -1489,10 +1522,10 @@ module_eval <<'.,.,', 'grammar.ra', 681
end
.,.,
- # reduce 95 omitted
+ # reduce 97 omitted
-module_eval <<'.,.,', 'grammar.ra', 690
- def _reduce_96( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 710
+ def _reduce_98( val, _values, result )
result = AST::Name.new(
:value => val[1],
:file => @lexer.file,
@@ -1502,8 +1535,8 @@ module_eval <<'.,.,', 'grammar.ra', 690
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 699
- def _reduce_97( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 719
+ def _reduce_99( val, _values, result )
name = val[0].sub(/^\$/,'')
result = AST::Variable.new(
:line => @lexer.line,
@@ -1514,8 +1547,8 @@ module_eval <<'.,.,', 'grammar.ra', 699
end
.,.,
-module_eval <<'.,.,', 'grammar.ra', 711
- def _reduce_98( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 731
+ def _reduce_100( val, _values, result )
if val[1].instance_of?(AST::ASTArray)
result = val[1]
else
@@ -1529,14 +1562,14 @@ module_eval <<'.,.,', 'grammar.ra', 711
end
.,.,
- # reduce 99 omitted
+ # reduce 101 omitted
- # reduce 100 omitted
+ # reduce 102 omitted
- # reduce 101 omitted
+ # reduce 103 omitted
-module_eval <<'.,.,', 'grammar.ra', 716
- def _reduce_102( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 736
+ def _reduce_104( val, _values, result )
result = nil
result
end
diff --git a/lib/puppet/parser/scope.rb b/lib/puppet/parser/scope.rb
index f7dde32c8..54f0f42ad 100644
--- a/lib/puppet/parser/scope.rb
+++ b/lib/puppet/parser/scope.rb
@@ -855,6 +855,7 @@ module Puppet::Parser
# Builtin types should be passed out as they are, but defined
# types need to be evaluated. We have to wait until this
# point so that subclass overrides can happen.
+
# Wait until the last minute to set tags, although this
# probably should not matter
child.tags = self.tags
@@ -870,15 +871,30 @@ module Puppet::Parser
# Now that all that is done, check to see what kind of object
# it is.
if objecttype = lookuptype(child.type)
- # It's a defined type, so evaluate it
+ # It's a defined type, so evaluate it. Retain whether
+ # the object is collectable.
result = objecttype.safeevaluate(
:name => child.name,
:type => child.type,
:arguments => child.to_hash,
- :scope => self
+ :scope => self,
+ :collectable => child.collectable
)
+
+ # If the child is collectable, then mark all of the
+ # results as collectable. This is how we retain
+ # collectability through components and such.
+ if child.collectable
+ result.delve do |object|
+ if object.is_a? Puppet::TransObject
+ debug "Collecting %s[%s]" %
+ [object.type, object.name]
+ object.collectable = true
+ end
+ end
+ end
else
- # It's a builtin type, so just chunk it on in
+ # It's a builtin type, so just return it directly
result = child
end
else
@@ -940,104 +956,6 @@ module Puppet::Parser
end
end
- # Convert our scope to a list of Transportable objects.
- def oldto_trans
- results = []
-
- # Iterate across our child scopes and call to_trans on them
- @children.each { |child|
- if child.is_a?(Scope)
- cresult = child.to_trans
-
- # Scopes normally result in a TransBucket, but they could
- # also result in a normal array; if that happens, get rid
- # of the array.
- unless cresult.is_a?(Puppet::TransBucket)
- cresult.each { |result|
- results.push(result)
- }
- else
- unless cresult.empty?
- # Otherwise, just add it to our list of results.
- results.push(cresult)
- end
- end
- elsif child.is_a?(Puppet::TransObject)
- if child.empty?
- next
- end
- # Wait until the last minute to set tags, although this
- # probably should not matter
- child.tags = self.tags
-
- # Add any defaults.
- self.adddefaults(child)
-
- # Then make sure this child's tags are stored in the
- # central table. This should maybe be in the evaluate
- # methods, but, eh.
- @topscope.addtags(child)
- results.push(child)
- else
- raise Puppet::DevError,
- "Puppet::Parse::Scope cannot handle objects of type %s" %
- child.class
- end
- }
-
- # Get rid of any nil objects.
- results = results.reject { |child|
- child.nil?
- }
-
- # If we have a name and type, then make a TransBucket, which
- # becomes a component.
- # Else, just stack all of the objects into the current bucket.
- if @type
- bucket = Puppet::TransBucket.new
-
- if defined? @name and @name
- bucket.name = @name
- end
-
- # it'd be nice not to have to do this...
- results.each { |result|
- #Puppet.warning "Result type is %s" % result.class
- bucket.push(result)
- }
- if defined? @type
- bucket.type = @type
- else
- raise Puppet::ParseError,
- "No type for scope %s" % @name
- end
-
- if defined? @keyword
- bucket.keyword = @keyword
- end
- #Puppet.debug(
- # "TransBucket with name %s and type %s in scope %s" %
- # [@name,@type,self.object_id]
- #)
-
- # now find metaparams
- @symtable.each { |var,value|
- if Puppet::Type.metaparam?(var.intern)
- #Puppet.debug("Adding metaparam %s" % var)
- bucket.param(var,value)
- else
- #Puppet.debug("%s is not a metaparam" % var)
- end
- }
- #Puppet.debug "Returning bucket %s from scope %s" %
- # [bucket.name,self.object_id]
- return bucket
- else
- Puppet.debug "nameless scope; just returning a list"
- return results
- end
- end
-
protected
# This method abstracts recursive searching. It accepts the type
diff --git a/lib/puppet/rails.rb b/lib/puppet/rails.rb
index e9eeeaed5..2a5b31408 100644
--- a/lib/puppet/rails.rb
+++ b/lib/puppet/rails.rb
@@ -43,32 +43,34 @@ module Puppet::Rails
}
)
- def self.setupdb
-
- end
-
+ # Set up our database connection. It'd be nice to have a "use" system
+ # that could make callbacks.
def self.init
- Puppet.config.use(:puppet)
- Puppet.config.use(:puppetmaster)
+ unless defined? @inited and @inited
+ Puppet.config.use(:puppet)
+ Puppet.config.use(:puppetmaster)
- ActiveRecord::Base.logger = Logger.new(Puppet[:railslog])
- args = {:adapter => Puppet[:dbadapter]}
+ ActiveRecord::Base.logger = Logger.new(Puppet[:railslog])
+ args = {:adapter => Puppet[:dbadapter]}
- case Puppet[:dbadapter]
- when "sqlite3":
- args[:database] = Puppet[:dblocation]
- when "mysql":
- args[:host] = Puppet[:dbserver]
- args[:username] = Puppet[:dbuser]
- args[:password] = Puppet[:dbpassword]
- args[:database] = Puppet[:dbname]
- end
+ case Puppet[:dbadapter]
+ when "sqlite3":
+ args[:database] = Puppet[:dblocation]
+ when "mysql":
+ args[:host] = Puppet[:dbserver]
+ args[:username] = Puppet[:dbuser]
+ args[:password] = Puppet[:dbpassword]
+ args[:database] = Puppet[:dbname]
+ end
+
+ ActiveRecord::Base.establish_connection(args)
- ActiveRecord::Base.establish_connection(args)
+ unless FileTest.exists?(args[:database])
+ require 'puppet/rails/database'
+ Puppet::Rails::Database.up
+ end
- unless FileTest.exists?(args[:database])
- require 'puppet/rails/database'
- Puppet::Rails::Database.up
+ @inited = true
end
end
end
diff --git a/lib/puppet/rails/host.rb b/lib/puppet/rails/host.rb
index 0cfb3ec44..3736c407d 100644
--- a/lib/puppet/rails/host.rb
+++ b/lib/puppet/rails/host.rb
@@ -63,7 +63,7 @@ class Puppet::Rails::Host < ActiveRecord::Base
tobj.each do |p,v| params[p] = v end
args = {:ptype => tobj.type, :name => tobj.name}
- [:tags, :file, :line].each do |param|
+ [:tags, :file, :line, :collectable].each do |param|
if val = tobj.send(param)
args[param] = val
end
diff --git a/lib/puppet/rails/rails_object.rb b/lib/puppet/rails/rails_object.rb
index 819706957..8aa72451b 100644
--- a/lib/puppet/rails/rails_object.rb
+++ b/lib/puppet/rails/rails_object.rb
@@ -20,7 +20,9 @@ class Puppet::Rails::RailsObject < ActiveRecord::Base
end
end
- # Convert our object to a trans_object
+ # Convert our object to a trans_object. Do not retain whether the object
+ # is collectable, though, since that would cause it to get stripped
+ # from the configuration.
def to_trans
obj = Puppet::TransObject.new(name(), ptype())
@@ -29,8 +31,8 @@ class Puppet::Rails::RailsObject < ActiveRecord::Base
obj.send(method.to_s + "=", val)
end
end
- params.each do |name, value|
- obj[name] = value
+ rails_parameters.each do |param|
+ obj[param.name] = param.value
end
return obj
diff --git a/lib/puppet/transportable.rb b/lib/puppet/transportable.rb
index 9921aecef..bca2e688c 100644
--- a/lib/puppet/transportable.rb
+++ b/lib/puppet/transportable.rb
@@ -8,7 +8,7 @@ module Puppet
# YAML.
class TransObject
include Enumerable
- attr_accessor :type, :name, :file, :line
+ attr_accessor :type, :name, :file, :line, :collectable
attr_writer :tags
@@ -25,8 +25,8 @@ module Puppet
def initialize(name,type)
@type = type
@name = name
+ @collectable = false
@params = {}
- #self.class.add(self)
@tags = []
end
@@ -102,6 +102,32 @@ module Puppet
end
}
+ # Remove all collectable objects from our tree, since the client
+ # should not see them.
+ def collectstrip!
+ @children.dup.each do |child|
+ if child.is_a? self.class
+ child.collectstrip!
+ else
+ if child.collectable
+ @children.delete(child)
+ end
+ end
+ end
+ end
+
+ # Recursively yield everything.
+ def delve(&block)
+ @children.each do |obj|
+ block.call(obj)
+ if obj.is_a? self.class
+ obj.delve(&block)
+ else
+ obj
+ end
+ end
+ end
+
def each
@children.each { |c| yield c }
end
diff --git a/test/language/interpreter.rb b/test/language/interpreter.rb
index 4b1852682..509f004a4 100755
--- a/test/language/interpreter.rb
+++ b/test/language/interpreter.rb
@@ -12,6 +12,7 @@ require 'puppet'
require 'puppet/parser/interpreter'
require 'puppet/parser/parser'
require 'puppet/client'
+require 'puppet/rails'
require 'test/unit'
require 'puppettest'
@@ -101,6 +102,13 @@ class TestInterpreter < Test::Unit::TestCase
assert(obj, "Could not find host object")
end
+ if defined? ActiveRecord
+ def test_collectstorage
+ end
+ else
+ $stderr.puts "Install Rails for configuration storage testing"
+ end
+
if Facter["domain"].value == "madstop.com"
begin
require 'ldap'
diff --git a/test/language/lexer.rb b/test/language/lexer.rb
index 083342cc7..8b578a3fd 100644
--- a/test/language/lexer.rb
+++ b/test/language/lexer.rb
@@ -69,7 +69,6 @@ class TestLexer < Test::Unit::TestCase
def test_errors
strings = %w{
^
- @
}
strings.each { |str|
@lexer.string = str
@@ -122,6 +121,40 @@ class TestLexer < Test::Unit::TestCase
assert_nothing_raised {
@lexer.string = bit
}
+
+ assert_nothing_raised {
+ @lexer.fullscan
+ }
+ end
+
+ def test_collectlexing
+ {"@" => :AT, "<|" => :LCOLLECT, "|>" => :RCOLLECT}.each do |string, token|
+ assert_nothing_raised {
+ @lexer.string = string
+ }
+
+ ret = nil
+ assert_nothing_raised {
+ ret = @lexer.fullscan
+ }
+
+ assert_equal([[token, string],[false, false]], ret)
+ end
+ end
+
+ def test_collectabletype
+ string = "@type {"
+
+ assert_nothing_raised {
+ @lexer.string = string
+ }
+
+ ret = nil
+ assert_nothing_raised {
+ ret = @lexer.fullscan
+ }
+
+ assert_equal([[:AT, "@"], [:NAME, "type"], [:LBRACE, "{"], [false,false]],ret)
end
end
diff --git a/test/language/parser.rb b/test/language/parser.rb
index 81d3c21cf..e1b6598d4 100644
--- a/test/language/parser.rb
+++ b/test/language/parser.rb
@@ -301,6 +301,40 @@ class TestParser < Test::Unit::TestCase
parser.parse
}
end
+
+ # Verify that collectable objects are marked that way.
+ def test_collectable
+ ["@port { ssh: protocols => tcp, number => 22 }",
+ "@port { ssh: protocols => tcp, number => 22;
+ smtp: protocols => tcp, number => 25 }"].each do |text|
+ parser = Puppet::Parser::Parser.new
+ parser.string = text
+
+ ret = nil
+ assert_nothing_raised {
+ ret = parser.parse
+ }
+
+ assert_instance_of(AST::ASTArray, ret)
+
+ ret.each do |obj|
+ assert_instance_of(AST::ObjectDef, obj)
+ assert(obj.collectable, "Object was not marked collectable")
+ end
+ end
+ end
+
+ # Defaults are purely syntactical, so it doesn't make sense to be able to
+ # collect them.
+ def test_uncollectabledefaults
+ string = "@Port { protocols => tcp }"
+ parser = Puppet::Parser::Parser.new
+ parser.string = string
+
+ assert_raise(Puppet::ParseError) {
+ parser.parse
+ }
+ end
end
# $Id$
diff --git a/test/language/rails.rb b/test/language/rails.rb
index 144faece2..e85652620 100755
--- a/test/language/rails.rb
+++ b/test/language/rails.rb
@@ -7,6 +7,7 @@ if __FILE__ == $0
end
require 'puppet'
+require 'puppet/rails'
require 'puppet/parser/interpreter'
require 'puppet/parser/parser'
require 'puppet/client'
@@ -26,13 +27,12 @@ class TestRails < Test::Unit::TestCase
if defined? ActiveRecord::Base
def test_hostcache
# First make some objects
- object = Puppet::TransObject.new("/tmp", "file")
- object.tags = %w{testing puppet}
- object[:mode] = "1777"
- object[:owner] = "root"
-
- bucket = Puppet::TransBucket.new
- bucket.push object
+ bucket = mk_transtree do |object, depth, width|
+ # and mark some of them collectable
+ if width % 2 == 1
+ object.collectable = true
+ end
+ end
# Now collect our facts
facts = {}
@@ -54,15 +54,29 @@ class TestRails < Test::Unit::TestCase
assert(host, "Did not create host")
- obj = nil
+ host = nil
assert_nothing_raised {
- obj = Puppet::Rails::Host.find_by_name(facts["hostname"])
+ host = Puppet::Rails::Host.find_by_name(facts["hostname"])
}
- assert(obj, "Could not find host object")
+ assert(host, "Could not find host object")
+
+ assert(host.rails_objects, "No objects on host")
+
+ collectable = host.rails_objects.find_all do |obj| obj.collectable end
+
+ assert(collectable.length > 0, "Found no collectable objects")
- assert(obj.rails_objects, "No objects on host")
+ collectable.each do |obj|
+ trans = nil
+ assert_nothing_raised {
+ trans = obj.to_trans
+ }
+ # Make sure that the objects do not retain their collectable
+ # nature.
+ assert(!trans.collectable, "Object from db was collectable")
+ end
- assert_equal(facts["hostname"], obj.facts["hostname"],
+ assert_equal(facts["hostname"], host.facts["hostname"],
"Did not retrieve facts")
end
diff --git a/test/language/scope.rb b/test/language/scope.rb
index 01e752d39..aeac1f20b 100755
--- a/test/language/scope.rb
+++ b/test/language/scope.rb
@@ -664,4 +664,59 @@ class TestScope < Test::Unit::TestCase
end
+
+ # Verify that we recursively mark as collectable the results of collectable
+ # components.
+ def test_collectablecomponents
+ children = []
+
+ args = AST::ASTArray.new(
+ :file => tempfile(),
+ :line => rand(100),
+ :children => [nameobj("arg")]
+ )
+ # Create a top-level component
+ children << compobj("one", :args => args)
+
+ # And a component that calls it
+ children << compobj("two", :args => args, :code => AST::ASTArray.new(
+ :children => [
+ objectdef("one", "ptest", {"arg" => "parentfoo"})
+ ]
+ ))
+
+ # And then a third component that calls the second
+ children << compobj("three", :args => args, :code => AST::ASTArray.new(
+ :children => [
+ objectdef("two", "yay", {"arg" => "parentfoo"})
+ ]
+ ))
+
+ # lastly, create an object that calls our third component
+ obj = objectdef("three", "boo", {"arg" => "parentfoo"})
+
+ # And mark it as collectable
+ obj.collectable = true
+
+ children << obj
+
+ top = nil
+ assert_nothing_raised("Could not create top object") {
+ top = AST::ASTArray.new(
+ :children => children
+ )
+ }
+
+ trans = nil
+ scope = nil
+ assert_nothing_raised {
+ scope = Puppet::Parser::Scope.new()
+ trans = scope.evaluate(:ast => top)
+ }
+
+ trans.flatten.each do |obj|
+ assert(obj.collectable, "Object %s[%s] is not collectable" %
+ [obj.type, obj.name])
+ end
+ end
end
diff --git a/test/language/transportable.rb b/test/language/transportable.rb
index 0e04774a5..0b7ce2560 100755
--- a/test/language/transportable.rb
+++ b/test/language/transportable.rb
@@ -13,34 +13,10 @@ require 'puppettest'
require 'yaml'
class TestTransportable < Test::Unit::TestCase
- include TestPuppet
-
- def mkobj(file = "/etc/passwd")
- obj = nil
- assert_nothing_raised {
- obj = Puppet::TransObject.new("file", file)
- obj["owner"] = "root"
- obj["mode"] = "644"
- }
-
- return obj
- end
-
- def mkbucket(*objects)
- bucket = nil
- assert_nothing_raised {
- bucket = Puppet::TransBucket.new
- bucket.name = "yayname"
- bucket.type = "yaytype"
- }
-
- objects.each { |o| bucket << o }
-
- return bucket
- end
+ include ParserTesting
def test_yamldumpobject
- obj = mkobj
+ obj = mk_transobject
obj.to_yaml_properties
str = nil
assert_nothing_raised {
@@ -58,9 +34,9 @@ class TestTransportable < Test::Unit::TestCase
def test_yamldumpbucket
objects = %w{/etc/passwd /etc /tmp /var /dev}.collect { |d|
- mkobj(d)
+ mk_transobject(d)
}
- bucket = mkbucket(*objects)
+ bucket = mk_transbucket(*objects)
str = nil
assert_nothing_raised {
str = YAML.dump(bucket)
@@ -74,4 +50,60 @@ class TestTransportable < Test::Unit::TestCase
assert(newobj.name, "Bucket has no name")
assert(newobj.type, "Bucket has no type")
end
+
+ # Verify that we correctly strip out collectable objects, since they should
+ # not be sent to the client.
+ def test_collectstrip
+ top = mk_transtree do |object, depth, width|
+ if width % 2 == 1
+ object.collectable = true
+ end
+ end
+
+ assert(top.flatten.find_all { |o| o.collectable }.length > 0,
+ "Could not find any collectable objects")
+
+ # Now strip out the collectable objects
+ top.collectstrip!
+
+ # And make sure they're actually gone
+ assert_equal(0, top.flatten.find_all { |o| o.collectable }.length,
+ "Still found collectable objects")
+ end
+
+ # Make sure our 'delve' command is working
+ def test_delve
+ top = mk_transtree do |object, depth, width|
+ if width % 2 == 1
+ object.collectable = true
+ end
+ end
+
+ objects = []
+ buckets = []
+ collectable = []
+
+ count = 0
+ assert_nothing_raised {
+ top.delve do |object|
+ count += 1
+ if object.is_a? Puppet::TransBucket
+ buckets << object
+ else
+ objects << object
+ if object.collectable
+ collectable << object
+ end
+ end
+ end
+ }
+
+ top.flatten.each do |obj|
+ assert(objects.include?(obj), "Missing obj %s[%s]" % [obj.type, obj.name])
+ end
+
+ assert_equal(collectable.length,
+ top.flatten.find_all { |o| o.collectable }.length,
+ "Found incorrect number of collectable objects")
+ end
end
diff --git a/test/puppettest.rb b/test/puppettest.rb
index f9014245a..53e747fd1 100644
--- a/test/puppettest.rb
+++ b/test/puppettest.rb
@@ -980,6 +980,67 @@ module ParserTesting
assert_apply(comp)
end
+
+ def mk_transobject(file = "/etc/passwd")
+ obj = nil
+ assert_nothing_raised {
+ obj = Puppet::TransObject.new("file", file)
+ obj["owner"] = "root"
+ obj["mode"] = "644"
+ }
+
+ return obj
+ end
+
+ def mk_transbucket(*objects)
+ bucket = nil
+ assert_nothing_raised {
+ bucket = Puppet::TransBucket.new
+ bucket.name = "yayname"
+ bucket.type = "yaytype"
+ }
+
+ objects.each { |o| bucket << o }
+
+ return bucket
+ end
+
+ # Make a tree of objects, yielding if desired
+ def mk_transtree(depth = 4, width = 2)
+ top = nil
+ assert_nothing_raised {
+ top = Puppet::TransBucket.new
+ top.name = "top"
+ top.type = "bucket"
+ }
+
+ bucket = top
+
+ file = tempfile()
+ depth.times do |i|
+ objects = []
+ width.times do |j|
+ path = tempfile + i.to_s
+ obj = Puppet::TransObject.new("file", file)
+ obj["owner"] = "root"
+ obj["mode"] = "644"
+
+ # Yield, if they want
+ if block_given?
+ yield(obj, i, j)
+ end
+
+ objects << obj
+ end
+
+ newbucket = mk_transbucket(*objects)
+
+ bucket.push newbucket
+ bucket = newbucket
+ end
+
+ return top
+ end
end
class PuppetTestSuite