puppet 0.9.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (182) hide show
  1. data/CHANGELOG +0 -0
  2. data/COPYING +340 -0
  3. data/LICENSE +17 -0
  4. data/README +24 -0
  5. data/Rakefile +294 -0
  6. data/TODO +4 -0
  7. data/bin/cf2puppet +186 -0
  8. data/bin/puppet +176 -0
  9. data/bin/puppetca +213 -0
  10. data/bin/puppetd +246 -0
  11. data/bin/puppetdoc +184 -0
  12. data/bin/puppetmasterd +258 -0
  13. data/examples/code/allatonce +13 -0
  14. data/examples/code/assignments +11 -0
  15. data/examples/code/classing +35 -0
  16. data/examples/code/components +73 -0
  17. data/examples/code/execs +16 -0
  18. data/examples/code/failers/badclassnoparam +10 -0
  19. data/examples/code/failers/badclassparam +10 -0
  20. data/examples/code/failers/badcompnoparam +9 -0
  21. data/examples/code/failers/badcompparam +9 -0
  22. data/examples/code/failers/badtypeparam +3 -0
  23. data/examples/code/file.bl +11 -0
  24. data/examples/code/filedefaults +10 -0
  25. data/examples/code/fileparsing +116 -0
  26. data/examples/code/filerecursion +15 -0
  27. data/examples/code/functions +3 -0
  28. data/examples/code/groups +7 -0
  29. data/examples/code/head +30 -0
  30. data/examples/code/importing +8 -0
  31. data/examples/code/nodes +20 -0
  32. data/examples/code/one +8 -0
  33. data/examples/code/relationships +34 -0
  34. data/examples/code/selectors +28 -0
  35. data/examples/code/simpletests +11 -0
  36. data/examples/code/snippets/argumentdefaults +14 -0
  37. data/examples/code/snippets/casestatement +39 -0
  38. data/examples/code/snippets/classheirarchy.pp +15 -0
  39. data/examples/code/snippets/classincludes.pp +17 -0
  40. data/examples/code/snippets/classpathtest +11 -0
  41. data/examples/code/snippets/dirchmod +19 -0
  42. data/examples/code/snippets/failmissingexecpath.pp +13 -0
  43. data/examples/code/snippets/falsevalues.pp +3 -0
  44. data/examples/code/snippets/filecreate +11 -0
  45. data/examples/code/snippets/implicititeration +15 -0
  46. data/examples/code/snippets/multipleinstances +7 -0
  47. data/examples/code/snippets/namevartest +9 -0
  48. data/examples/code/snippets/scopetest +13 -0
  49. data/examples/code/snippets/selectorvalues.pp +22 -0
  50. data/examples/code/snippets/simpledefaults +5 -0
  51. data/examples/code/snippets/simpleselector +38 -0
  52. data/examples/code/svncommit +13 -0
  53. data/examples/root/bin/sleeper +69 -0
  54. data/examples/root/etc/configfile +0 -0
  55. data/examples/root/etc/debian-passwd +29 -0
  56. data/examples/root/etc/debian-syslog.conf +71 -0
  57. data/examples/root/etc/init.d/sleeper +65 -0
  58. data/examples/root/etc/otherfile +0 -0
  59. data/examples/root/etc/puppet/fileserver.conf +3 -0
  60. data/examples/root/etc/puppet/puppetmasterd.conf +10 -0
  61. data/ext/module:puppet +195 -0
  62. data/install.rb +270 -0
  63. data/lib/puppet.rb +249 -0
  64. data/lib/puppet/base64.rb +19 -0
  65. data/lib/puppet/client.rb +519 -0
  66. data/lib/puppet/config.rb +49 -0
  67. data/lib/puppet/daemon.rb +208 -0
  68. data/lib/puppet/element.rb +71 -0
  69. data/lib/puppet/event.rb +259 -0
  70. data/lib/puppet/log.rb +321 -0
  71. data/lib/puppet/metric.rb +250 -0
  72. data/lib/puppet/parsedfile.rb +38 -0
  73. data/lib/puppet/parser/ast.rb +1560 -0
  74. data/lib/puppet/parser/interpreter.rb +150 -0
  75. data/lib/puppet/parser/lexer.rb +226 -0
  76. data/lib/puppet/parser/parser.rb +1354 -0
  77. data/lib/puppet/parser/scope.rb +755 -0
  78. data/lib/puppet/server.rb +170 -0
  79. data/lib/puppet/server/authstore.rb +227 -0
  80. data/lib/puppet/server/ca.rb +140 -0
  81. data/lib/puppet/server/filebucket.rb +147 -0
  82. data/lib/puppet/server/fileserver.rb +477 -0
  83. data/lib/puppet/server/logger.rb +43 -0
  84. data/lib/puppet/server/master.rb +103 -0
  85. data/lib/puppet/server/servlet.rb +247 -0
  86. data/lib/puppet/sslcertificates.rb +737 -0
  87. data/lib/puppet/statechange.rb +150 -0
  88. data/lib/puppet/storage.rb +95 -0
  89. data/lib/puppet/transaction.rb +179 -0
  90. data/lib/puppet/transportable.rb +151 -0
  91. data/lib/puppet/type.rb +1354 -0
  92. data/lib/puppet/type/component.rb +141 -0
  93. data/lib/puppet/type/cron.rb +543 -0
  94. data/lib/puppet/type/exec.rb +316 -0
  95. data/lib/puppet/type/group.rb +152 -0
  96. data/lib/puppet/type/nameservice.rb +3 -0
  97. data/lib/puppet/type/nameservice/netinfo.rb +173 -0
  98. data/lib/puppet/type/nameservice/objectadd.rb +146 -0
  99. data/lib/puppet/type/nameservice/posix.rb +200 -0
  100. data/lib/puppet/type/package.rb +420 -0
  101. data/lib/puppet/type/package/apt.rb +70 -0
  102. data/lib/puppet/type/package/dpkg.rb +108 -0
  103. data/lib/puppet/type/package/rpm.rb +81 -0
  104. data/lib/puppet/type/package/sun.rb +117 -0
  105. data/lib/puppet/type/package/yum.rb +58 -0
  106. data/lib/puppet/type/pfile.rb +569 -0
  107. data/lib/puppet/type/pfile/checksum.rb +219 -0
  108. data/lib/puppet/type/pfile/create.rb +108 -0
  109. data/lib/puppet/type/pfile/group.rb +129 -0
  110. data/lib/puppet/type/pfile/mode.rb +131 -0
  111. data/lib/puppet/type/pfile/source.rb +264 -0
  112. data/lib/puppet/type/pfile/type.rb +31 -0
  113. data/lib/puppet/type/pfile/uid.rb +166 -0
  114. data/lib/puppet/type/pfilebucket.rb +80 -0
  115. data/lib/puppet/type/pprocess.rb +97 -0
  116. data/lib/puppet/type/service.rb +347 -0
  117. data/lib/puppet/type/service/base.rb +17 -0
  118. data/lib/puppet/type/service/debian.rb +50 -0
  119. data/lib/puppet/type/service/init.rb +145 -0
  120. data/lib/puppet/type/service/smf.rb +29 -0
  121. data/lib/puppet/type/state.rb +182 -0
  122. data/lib/puppet/type/symlink.rb +183 -0
  123. data/lib/puppet/type/tidy.rb +183 -0
  124. data/lib/puppet/type/typegen.rb +149 -0
  125. data/lib/puppet/type/typegen/filerecord.rb +243 -0
  126. data/lib/puppet/type/typegen/filetype.rb +316 -0
  127. data/lib/puppet/type/user.rb +290 -0
  128. data/lib/puppet/util.rb +138 -0
  129. data/test/certmgr/certmgr.rb +265 -0
  130. data/test/client/client.rb +203 -0
  131. data/test/executables/puppetbin.rb +53 -0
  132. data/test/executables/puppetca.rb +79 -0
  133. data/test/executables/puppetd.rb +71 -0
  134. data/test/executables/puppetmasterd.rb +153 -0
  135. data/test/executables/puppetmodule.rb +60 -0
  136. data/test/language/ast.rb +412 -0
  137. data/test/language/interpreter.rb +71 -0
  138. data/test/language/scope.rb +412 -0
  139. data/test/language/snippets.rb +445 -0
  140. data/test/other/events.rb +111 -0
  141. data/test/other/log.rb +195 -0
  142. data/test/other/metrics.rb +92 -0
  143. data/test/other/overrides.rb +115 -0
  144. data/test/other/parsedfile.rb +31 -0
  145. data/test/other/relationships.rb +113 -0
  146. data/test/other/state.rb +106 -0
  147. data/test/other/storage.rb +39 -0
  148. data/test/other/transactions.rb +235 -0
  149. data/test/parser/lexer.rb +120 -0
  150. data/test/parser/parser.rb +180 -0
  151. data/test/puppet/conffiles.rb +104 -0
  152. data/test/puppet/defaults.rb +100 -0
  153. data/test/puppet/error.rb +23 -0
  154. data/test/puppet/utiltest.rb +120 -0
  155. data/test/puppettest.rb +774 -0
  156. data/test/server/authstore.rb +209 -0
  157. data/test/server/bucket.rb +227 -0
  158. data/test/server/ca.rb +201 -0
  159. data/test/server/fileserver.rb +710 -0
  160. data/test/server/logger.rb +175 -0
  161. data/test/server/master.rb +150 -0
  162. data/test/server/server.rb +130 -0
  163. data/test/tagging/tagging.rb +80 -0
  164. data/test/test +51 -0
  165. data/test/types/basic.rb +119 -0
  166. data/test/types/component.rb +272 -0
  167. data/test/types/cron.rb +261 -0
  168. data/test/types/exec.rb +273 -0
  169. data/test/types/file.rb +616 -0
  170. data/test/types/filebucket.rb +167 -0
  171. data/test/types/fileignoresource.rb +287 -0
  172. data/test/types/filesources.rb +587 -0
  173. data/test/types/filetype.rb +162 -0
  174. data/test/types/group.rb +271 -0
  175. data/test/types/package.rb +205 -0
  176. data/test/types/query.rb +101 -0
  177. data/test/types/service.rb +100 -0
  178. data/test/types/symlink.rb +93 -0
  179. data/test/types/tidy.rb +124 -0
  180. data/test/types/type.rb +135 -0
  181. data/test/types/user.rb +371 -0
  182. metadata +243 -0
@@ -0,0 +1,150 @@
1
+ # The interepreter's job is to convert from a parsed file to the configuration
2
+ # for a given client. It really doesn't do any work on its own, it just collects
3
+ # and calls out to other objects.
4
+
5
+ require 'puppet'
6
+ require 'puppet/parser/parser'
7
+ require 'puppet/parser/scope'
8
+
9
+
10
+ module Puppet
11
+ module Parser
12
+ class Interpreter
13
+ attr_accessor :ast
14
+ # just shorten the constant path a bit, using what amounts to an alias
15
+ AST = Puppet::Parser::AST
16
+
17
+ # create our interpreter
18
+ def initialize(hash)
19
+ unless hash.include?(:Manifest)
20
+ raise Puppet::DevError, "Interpreter was not passed a manifest"
21
+ end
22
+
23
+ @file = hash[:Manifest]
24
+
25
+ if hash.include?(:UseNodes)
26
+ @usenodes = hash[:UseNodes]
27
+ else
28
+ @usenodes = true
29
+ end
30
+
31
+ # Set it to either the value or nil. This is currently only used
32
+ # by the cfengine module.
33
+ @classes = hash[:Classes] || []
34
+
35
+ # Create our parser object
36
+ parsefiles
37
+
38
+ evaluate
39
+ end
40
+
41
+ # evaluate our whole tree
42
+ def run(client, facts)
43
+ parsefiles()
44
+
45
+ # Really, we should stick multiple names in here
46
+ # but for now just make a simple array
47
+ names = [client]
48
+
49
+ # if the client name is fully qualied (which is normally will be)
50
+ # add the short name
51
+ if client =~ /\./
52
+ names << client.sub(/\..+/,'')
53
+ end
54
+
55
+ begin
56
+ if @usenodes
57
+ unless client
58
+ raise Puppet::Error,
59
+ "Cannot evaluate nodes with a nil client"
60
+ end
61
+
62
+ # We've already evaluated the AST, in this case
63
+ retval = @scope.evalnode(names, facts)
64
+ return retval
65
+ else
66
+ # We've already evaluated the AST, in this case
67
+ @scope = Puppet::Parser::Scope.new() # no parent scope
68
+ @scope.interp = self
69
+ @scope.type = "puppet"
70
+ @scope.name = "top"
71
+ return @scope.evaluate(@ast, facts, @classes)
72
+ end
73
+ #@ast.evaluate(@scope)
74
+ rescue Puppet::DevError, Puppet::Error, Puppet::ParseError => except
75
+ #Puppet.err "File %s, line %s: %s" %
76
+ # [except.file, except.line, except.message]
77
+ if Puppet[:debug]
78
+ puts except.stack
79
+ end
80
+ if Puppet[:debug]
81
+ puts caller
82
+ end
83
+ #exit(1)
84
+ raise
85
+ rescue => except
86
+ error = Puppet::DevError.new("%s: %s" %
87
+ [except.class, except.message])
88
+ error.stack = caller
89
+ if Puppet[:debug]
90
+ puts caller
91
+ end
92
+ raise error
93
+ end
94
+ end
95
+
96
+ def scope
97
+ return @scope
98
+ end
99
+
100
+ private
101
+
102
+ # Evaluate the configuration. If there aren't any nodes defined, then
103
+ # this doesn't actually do anything, because we have to evaluate the
104
+ # entire configuration each time we get a connect.
105
+ def evaluate
106
+
107
+ if @usenodes
108
+ @scope = Puppet::Parser::Scope.new() # no parent scope
109
+ @scope.name = "top"
110
+ @scope.type = "puppet"
111
+ @scope.interp = self
112
+ Puppet.debug "Nodes defined"
113
+ @ast.safeevaluate(@scope)
114
+ else
115
+ Puppet.debug "No nodes defined"
116
+ return
117
+ end
118
+ end
119
+
120
+ def parsefiles
121
+ if defined? @parser
122
+ unless @parser.reparse?
123
+ return false
124
+ end
125
+ end
126
+
127
+ unless FileTest.exists?(@file)
128
+ if @ast
129
+ Puppet.warning "Manifest %s has disappeared" % @file
130
+ return
131
+ else
132
+ raise Puppet::Error, "Manifest %s must exist" % @file
133
+ end
134
+ end
135
+
136
+ Puppet.info "Reloading files"
137
+ # should i be creating a new parser each time...?
138
+ @parser = Puppet::Parser::Parser.new()
139
+ @parser.file = @file
140
+ @ast = @parser.parse
141
+
142
+ # Reevaluate the config. This is what actually replaces the
143
+ # existing scope.
144
+ evaluate
145
+ end
146
+ end
147
+ end
148
+ end
149
+
150
+ # $Id: interpreter.rb 746 2005-11-17 21:03:19Z luke $
@@ -0,0 +1,226 @@
1
+ #!/usr/local/bin/ruby -w
2
+
3
+ # $Id: lexer.rb 700 2005-09-22 23:24:20Z luke $
4
+
5
+ # the scanner/lexer
6
+
7
+ require 'strscan'
8
+ require 'puppet'
9
+
10
+
11
+ module Puppet
12
+ class LexError < RuntimeError; end
13
+ module Parser
14
+ #---------------------------------------------------------------
15
+ class Lexer
16
+ attr_reader :line, :last, :file
17
+
18
+ #%r{\w+} => :WORD,
19
+ @@tokens = {
20
+ %r{#.*} => :COMMENT,
21
+ %r{\[} => :LBRACK,
22
+ %r{\]} => :RBRACK,
23
+ %r{\{} => :LBRACE,
24
+ %r{\}} => :RBRACE,
25
+ %r{\(} => :LPAREN,
26
+ %r{\)} => :RPAREN,
27
+ %r{"} => :DQUOTE,
28
+ %r{\n} => :RETURN,
29
+ %r{'} => :SQUOTE,
30
+ %r{=} => :EQUALS,
31
+ %r{==} => :ISEQUAL,
32
+ %r{>=} => :GREATEREQUAL,
33
+ %r{>} => :GREATERTHAN,
34
+ %r{<} => :LESSTHAN,
35
+ %r{<=} => :LESSEQUAL,
36
+ %r{!=} => :NOTEQUAL,
37
+ %r{,} => :COMMA,
38
+ %r{\.} => :DOT,
39
+ %r{:} => :COLON,
40
+ %r{;} => :SEMIC,
41
+ %r{\?} => :QMARK,
42
+ %r{\\} => :BACKSLASH,
43
+ %r{=>} => :FARROW,
44
+ %r{[a-z][-\w]*} => :NAME,
45
+ %r{[A-Z][-\w]*} => :TYPE,
46
+ %r{[0-9]+} => :NUMBER,
47
+ %r{\$\w+} => :VARIABLE
48
+ }
49
+
50
+ @@keywords = {
51
+ "case" => :CASE,
52
+ "class" => :CLASS,
53
+ "default" => :DEFAULT,
54
+ "define" => :DEFINE,
55
+ "false" => :BOOLEAN,
56
+ "host" => :NODE,
57
+ "import" => :IMPORT,
58
+ "include" => :INCLUDE,
59
+ "inherits" => :INHERITS,
60
+ "node" => :NODE,
61
+ "true" => :BOOLEAN
62
+ }
63
+
64
+ # scan the whole file
65
+ # basically just used for testing
66
+ def fullscan
67
+ array = []
68
+
69
+ self.scan { |token,str|
70
+ #Puppet.debug("got token '%s' => '%s'" % [token,str])
71
+ if token.nil?
72
+ return array
73
+ else
74
+ array.push([token,str])
75
+ end
76
+ }
77
+ return array
78
+ end
79
+
80
+ # this is probably pretty damned inefficient...
81
+ # it'd be nice not to have to load the whole file first...
82
+ def file=(file)
83
+ @file = file
84
+ @line = 1
85
+ File.open(file) { |of|
86
+ str = ""
87
+ of.each { |line| str += line }
88
+ @scanner = StringScanner.new(str)
89
+ }
90
+ end
91
+
92
+ def initialize
93
+ @line = 1
94
+ @last = ""
95
+ @scanner = nil
96
+ @file = nil
97
+ # AAARRGGGG! okay, regexes in ruby are bloody annoying
98
+ # no one else has "\n" =~ /\s/
99
+ @skip = %r{[ \t]+}
100
+ end
101
+
102
+ def rest
103
+ @scanner.rest
104
+ end
105
+
106
+ # this is the heart of the lexer
107
+ def scan
108
+ #Puppet.debug("entering scan")
109
+ if @scanner.nil?
110
+ raise TypeError.new("Invalid or empty string")
111
+ end
112
+
113
+ @scanner.skip(@skip)
114
+ until @scanner.eos? do
115
+ yielded = false
116
+ sendbreak = false # gah, this is a nasty hack
117
+ stoken = nil
118
+ sregex = nil
119
+ value = ""
120
+
121
+ # first find out which type of token we've got
122
+ @@tokens.each { |regex,token|
123
+ # we're just checking, which doesn't advance the scan
124
+ # pointer
125
+ tmp = @scanner.check(regex)
126
+ if tmp.nil?
127
+ #puppet.debug("did not match %s to '%s'" %
128
+ # [regex,@scanner.rest])
129
+ next
130
+ end
131
+
132
+ # find the longest match
133
+ if tmp.length > value.length
134
+ value = tmp
135
+ stoken = token
136
+ sregex = regex
137
+ else
138
+ # we've already got a longer match
139
+ next
140
+ end
141
+ }
142
+
143
+ # error out if we didn't match anything at all
144
+ if stoken.nil?
145
+ nword = nil
146
+ if @scanner.rest =~ /^(\S+)/
147
+ nword = $1
148
+ elsif@scanner.rest =~ /^(\s+)/
149
+ nword = $1
150
+ else
151
+ nword = @scanner.rest
152
+ end
153
+ raise "Could not match '%s'" % nword
154
+ end
155
+
156
+ value = @scanner.scan(sregex)
157
+
158
+ if value == ""
159
+ raise "Didn't match regex on token %s" % stoken
160
+ end
161
+
162
+ # token-specific operations
163
+ # if this gets much more complicated, it should
164
+ # be moved up to where the tokens themselves are defined
165
+ # which will get me about 75% of the way to a lexer generator
166
+ case stoken
167
+ when :NAME then
168
+ wtoken = stoken
169
+ # we're looking for keywords here
170
+ if @@keywords.include?(value)
171
+ wtoken = @@keywords[value]
172
+ #Puppet.debug("token '%s'" % wtoken)
173
+ end
174
+ yield [wtoken,value]
175
+ @last = value
176
+ when :NUMBER then
177
+ yield [:NAME,value]
178
+ # just throw comments away
179
+ when :COMMENT then
180
+ # just throw comments away
181
+ when :RETURN then
182
+ @line += 1
183
+ @scanner.skip(@skip)
184
+ when :DQUOTE then
185
+ #Puppet.debug("searching '%s' after '%s'" % [self.rest,value])
186
+ value = self.slurpstring(value)
187
+ yield [:QTEXT,value]
188
+ @last = value
189
+ #stoken = :QTEXT
190
+ #Puppet.debug("got string '%s' => '%s'" % [:QTEXT,value])
191
+ else
192
+ yield [stoken,value]
193
+ @last = value
194
+ #Puppet.debug("got token '%s' => '%s'" % [stoken,value])
195
+ end
196
+ @scanner.skip(@skip)
197
+ end
198
+ @scanner = nil
199
+ yield [false,false]
200
+ end
201
+
202
+ # we've encountered an opening quote...
203
+ # slurp in the rest of the string and return it
204
+ def slurpstring(quote)
205
+ # we search for the next quote that isn't preceded by a
206
+ # backslash; the caret is there to match empty strings
207
+ str = @scanner.scan_until(/([^\\]|^)#{quote}/)
208
+ if str.nil?
209
+ raise Puppet::LexError.new("Unclosed quote after '%s' in '%s'" %
210
+ [self.last,self.rest])
211
+ else
212
+ str.sub!(/#{quote}$/,"")
213
+ str.gsub!(/\\#{quote}/,quote)
214
+ end
215
+
216
+ return str
217
+ end
218
+
219
+ # just parse a string, not a whole file
220
+ def string=(string)
221
+ @scanner = StringScanner.new(string)
222
+ end
223
+ end
224
+ #---------------------------------------------------------------
225
+ end
226
+ end
@@ -0,0 +1,1354 @@
1
+ #
2
+ # DO NOT MODIFY!!!!
3
+ # This file is automatically generated by racc 1.4.4
4
+ # from racc grammer file "grammar.ra".
5
+ #
6
+
7
+ require 'racc/parser'
8
+
9
+
10
+ require 'puppet'
11
+ require 'puppet/parsedfile'
12
+ require 'puppet/parser/lexer'
13
+ require 'puppet/parser/ast'
14
+ #require 'puppet/parser/interpreter'
15
+
16
+ module Puppet
17
+ # this exception class already has a :stack accessor
18
+ class ParseError < Puppet::Error
19
+ attr_accessor :line, :file
20
+ end
21
+
22
+ class ImportError < Racc::ParseError; end
23
+ end
24
+
25
+ Puppet[:typecheck] = true
26
+ Puppet[:paramcheck] = true
27
+
28
+
29
+ module Puppet
30
+
31
+ module Parser
32
+
33
+ class Parser < Racc::Parser
34
+
35
+ module_eval <<'..end grammar.ra modeval..idd1811897f0', 'grammar.ra', 635
36
+ attr_reader :file
37
+ attr_accessor :files
38
+
39
+ # Create an AST array out of all of the args
40
+ def aryfy(*args)
41
+ if args[0].is_a?(AST::ASTArray)
42
+ result = args.shift
43
+ args.each { |arg|
44
+ result.push arg
45
+ }
46
+ else
47
+ result = AST::ASTArray.new(
48
+ :children => args
49
+ )
50
+ end
51
+
52
+ return result
53
+ end
54
+
55
+ def file=(file)
56
+ unless FileTest.exists?(file)
57
+ raise Puppet::Error, "Could not find file %s" % file
58
+ end
59
+ if @files.detect { |f| f.file == file }
60
+ raise Puppet::ImportError.new("Import loop detected")
61
+ else
62
+ @files << Puppet::ParsedFile.new(file)
63
+ @lexer.file = file
64
+ end
65
+ end
66
+
67
+ def initialize
68
+ @lexer = Puppet::Parser::Lexer.new()
69
+ @files = []
70
+ #if Puppet[:debug]
71
+ # @yydebug = true
72
+ #end
73
+ end
74
+
75
+ def on_error(token,value,stack)
76
+ #on '%s' at '%s' in\n'%s'" % [token,value,stack]
77
+ #error = "line %s: parse error after '%s'" %
78
+ # [@lexer.line,@lexer.last]
79
+ error = "Syntax error at '%s'" % [value]
80
+
81
+ #if Puppet[:debug]
82
+ #puts stack.inspect
83
+ #puts stack.class
84
+ #end
85
+ #if @lexer.file
86
+ # error += (" in '%s'" % @lexer.file)
87
+ #end
88
+
89
+ except = Puppet::ParseError.new(error)
90
+ except.line = @lexer.line
91
+ if @lexer.file
92
+ except.file = @lexer.file
93
+ end
94
+
95
+ raise except
96
+ end
97
+
98
+ # how should I do error handling here?
99
+ def parse
100
+ begin
101
+ yyparse(@lexer,:scan)
102
+ rescue Racc::ParseError => except
103
+ error = Puppet::ParseError.new(except)
104
+ error.line = @lexer.line
105
+ error.file = @lexer.file
106
+ error.stack = caller
107
+ raise error
108
+ rescue Puppet::ParseError => except
109
+ except.line ||= @lexer.line
110
+ except.file ||= @lexer.file
111
+ raise except
112
+ rescue Puppet::Error => except
113
+ # and this is a framework error
114
+ except.line ||= @lexer.line
115
+ except.file ||= @lexer.file
116
+ except.stack ||= except.stack
117
+ #if Puppet[:debug]
118
+ # puts except.stack
119
+ #end
120
+ raise except
121
+ rescue Puppet::DevError => except
122
+ except.line ||= @lexer.line
123
+ except.file ||= @lexer.file
124
+ except.stack ||= caller
125
+ #if Puppet[:debug]
126
+ # puts except.stack
127
+ #end
128
+ raise except
129
+ rescue => except
130
+ error = Puppet::DevError.new(except.message)
131
+ error.line = @lexer.line
132
+ error.file = @lexer.file
133
+ error.stack = caller
134
+ #if Puppet[:debug]
135
+ # puts caller
136
+ #end
137
+ raise error
138
+ end
139
+ end
140
+
141
+ def reparse?
142
+ @files.detect { |file|
143
+ file.changed?
144
+ }
145
+ end
146
+
147
+ def string=(string)
148
+ @lexer.string = string
149
+ end
150
+
151
+ # $Id: parser.rb 729 2005-10-25 19:49:22Z luke $
152
+ ..end grammar.ra modeval..idd1811897f0
153
+
154
+ ##### racc 1.4.4 generates ###
155
+
156
+ racc_reduce_table = [
157
+ 0, 0, :racc_error,
158
+ 1, 41, :_reduce_1,
159
+ 1, 42, :_reduce_none,
160
+ 2, 42, :_reduce_3,
161
+ 1, 43, :_reduce_none,
162
+ 1, 43, :_reduce_none,
163
+ 1, 43, :_reduce_none,
164
+ 1, 43, :_reduce_none,
165
+ 1, 43, :_reduce_none,
166
+ 1, 43, :_reduce_none,
167
+ 1, 43, :_reduce_none,
168
+ 1, 43, :_reduce_none,
169
+ 2, 48, :_reduce_12,
170
+ 1, 52, :_reduce_none,
171
+ 3, 52, :_reduce_14,
172
+ 1, 53, :_reduce_none,
173
+ 1, 53, :_reduce_none,
174
+ 5, 44, :_reduce_17,
175
+ 5, 44, :_reduce_18,
176
+ 5, 44, :_reduce_19,
177
+ 3, 61, :_reduce_20,
178
+ 1, 56, :_reduce_none,
179
+ 3, 56, :_reduce_22,
180
+ 0, 57, :_reduce_none,
181
+ 1, 57, :_reduce_none,
182
+ 1, 54, :_reduce_25,
183
+ 1, 60, :_reduce_26,
184
+ 1, 62, :_reduce_none,
185
+ 1, 62, :_reduce_none,
186
+ 1, 62, :_reduce_none,
187
+ 1, 62, :_reduce_none,
188
+ 1, 62, :_reduce_none,
189
+ 1, 62, :_reduce_none,
190
+ 3, 45, :_reduce_33,
191
+ 0, 58, :_reduce_34,
192
+ 1, 58, :_reduce_35,
193
+ 3, 58, :_reduce_36,
194
+ 3, 67, :_reduce_37,
195
+ 1, 68, :_reduce_none,
196
+ 3, 68, :_reduce_39,
197
+ 1, 66, :_reduce_none,
198
+ 1, 66, :_reduce_none,
199
+ 1, 66, :_reduce_none,
200
+ 1, 66, :_reduce_none,
201
+ 1, 66, :_reduce_none,
202
+ 1, 66, :_reduce_none,
203
+ 1, 66, :_reduce_none,
204
+ 1, 66, :_reduce_none,
205
+ 1, 66, :_reduce_none,
206
+ 1, 63, :_reduce_49,
207
+ 1, 70, :_reduce_50,
208
+ 4, 71, :_reduce_51,
209
+ 5, 46, :_reduce_52,
210
+ 1, 72, :_reduce_none,
211
+ 2, 72, :_reduce_54,
212
+ 5, 73, :_reduce_55,
213
+ 1, 74, :_reduce_none,
214
+ 3, 74, :_reduce_57,
215
+ 3, 64, :_reduce_58,
216
+ 1, 76, :_reduce_none,
217
+ 3, 76, :_reduce_60,
218
+ 1, 78, :_reduce_none,
219
+ 3, 78, :_reduce_62,
220
+ 3, 77, :_reduce_63,
221
+ 1, 75, :_reduce_64,
222
+ 1, 75, :_reduce_65,
223
+ 1, 75, :_reduce_66,
224
+ 1, 75, :_reduce_67,
225
+ 1, 75, :_reduce_none,
226
+ 2, 47, :_reduce_69,
227
+ 6, 49, :_reduce_70,
228
+ 6, 50, :_reduce_71,
229
+ 6, 51, :_reduce_72,
230
+ 1, 81, :_reduce_none,
231
+ 2, 81, :_reduce_74,
232
+ 0, 82, :_reduce_75,
233
+ 1, 79, :_reduce_none,
234
+ 3, 79, :_reduce_77,
235
+ 3, 79, :_reduce_78,
236
+ 1, 83, :_reduce_none,
237
+ 3, 83, :_reduce_80,
238
+ 3, 84, :_reduce_81,
239
+ 1, 84, :_reduce_82,
240
+ 1, 80, :_reduce_none,
241
+ 2, 80, :_reduce_84,
242
+ 1, 55, :_reduce_85,
243
+ 3, 65, :_reduce_86,
244
+ 1, 69, :_reduce_none,
245
+ 1, 69, :_reduce_none,
246
+ 0, 59, :_reduce_none,
247
+ 1, 59, :_reduce_90 ]
248
+
249
+ racc_reduce_n = 91
250
+
251
+ racc_shift_n = 152
252
+
253
+ racc_action_table = [
254
+ 88, 123, 88, 118, 144, 130, 101, 102, 88, 117,
255
+ 96, 4, 7, 88, 11, 14, 120, 18, 88, 31,
256
+ 40, 2, 5, 88, 9, 122, 15, 5, 35, 110,
257
+ 35, 86, 87, 86, 87, 90, 35, 90, 55, 86,
258
+ 87, 35, 112, 90, 86, 87, 35, 138, 90, 86,
259
+ 87, 35, 104, 90, 86, 87, 28, 29, 90, 28,
260
+ 29, 28, 29, 106, 65, 4, 7, 114, 11, 14,
261
+ 5, 18, 28, 29, 58, 2, 5, 50, 9, 31,
262
+ 15, 31, 28, 29, 31, 35, 31, 5, 2, 5,
263
+ 35, 2, 5, 2, 5, 100, 104, 31, 146, 101,
264
+ 102, 35, 116, 107, 2, 5, 119, 31, 28, 29,
265
+ 55, 35, 54, 61, 2, 5, 4, 7, 126, 11,
266
+ 14, 50, 18, 128, 151, 5, 2, 5, 108, 9,
267
+ 61, 15, 66, 31, 28, 29, 28, 29, 81, 134,
268
+ 2, 72, 4, 7, 48, 11, 14, 136, 18, 61,
269
+ 5, 5, 2, 5, 147, 9, 65, 15, 141, 31,
270
+ 41, 31, 106, 35, 40, 35, 2, 5, 2, 5,
271
+ 28, 29, 4, 7, 39, 11, 14, 24, 18, 28,
272
+ 29, 148, 2, 5, 69, 9, 23, 15, 61, 52,
273
+ nil, nil, nil, nil, nil, 31, nil, nil, nil, 35,
274
+ nil, nil, 2, 5, 31, nil, nil, nil, 35, nil,
275
+ nil, 2, 5, 4, 7, nil, 11, 14, nil, 18,
276
+ nil, nil, nil, 2, 5, nil, 9, nil, 15, 4,
277
+ 7, nil, 11, 14, nil, 18, nil, nil, nil, 2,
278
+ 5, nil, 9, nil, 15, 4, 7, nil, 11, 14,
279
+ nil, 18, nil, nil, nil, 2, 5, nil, 9, nil,
280
+ 15, 4, 7, nil, 11, 14, nil, 18, nil, nil,
281
+ nil, 2, 5, nil, 9, nil, 15, 4, 7, nil,
282
+ 11, 14, nil, 18, nil, nil, nil, 2, 5, nil,
283
+ 9, nil, 15 ]
284
+
285
+ racc_action_check = [
286
+ 143, 93, 54, 83, 125, 105, 125, 125, 55, 83,
287
+ 55, 107, 107, 91, 107, 107, 91, 107, 96, 66,
288
+ 33, 107, 107, 123, 107, 93, 107, 66, 143, 67,
289
+ 54, 143, 143, 54, 54, 143, 55, 54, 70, 55,
290
+ 55, 91, 71, 55, 91, 91, 96, 115, 91, 96,
291
+ 96, 123, 72, 96, 123, 123, 104, 104, 123, 112,
292
+ 112, 119, 119, 73, 46, 115, 115, 76, 115, 115,
293
+ 46, 115, 126, 126, 38, 115, 115, 38, 115, 15,
294
+ 115, 104, 99, 99, 112, 104, 119, 15, 104, 104,
295
+ 119, 112, 112, 119, 119, 57, 61, 126, 132, 57,
296
+ 57, 126, 82, 63, 126, 126, 85, 99, 50, 50,
297
+ 26, 99, 25, 40, 99, 99, 132, 132, 97, 132,
298
+ 132, 21, 132, 103, 149, 52, 132, 132, 65, 132,
299
+ 106, 132, 43, 50, 28, 28, 58, 58, 51, 111,
300
+ 50, 50, 149, 149, 19, 149, 149, 113, 149, 114,
301
+ 18, 118, 149, 149, 133, 149, 41, 149, 122, 28,
302
+ 14, 58, 62, 28, 12, 58, 28, 28, 58, 58,
303
+ 39, 39, 133, 133, 11, 133, 133, 7, 133, 9,
304
+ 9, 137, 133, 133, 48, 133, 4, 133, 148, 24,
305
+ nil, nil, nil, nil, nil, 39, nil, nil, nil, 39,
306
+ nil, nil, 39, 39, 9, nil, nil, nil, 9, nil,
307
+ nil, 9, 9, 0, 0, nil, 0, 0, nil, 0,
308
+ nil, nil, nil, 0, 0, nil, 0, nil, 0, 141,
309
+ 141, nil, 141, 141, nil, 141, nil, nil, nil, 141,
310
+ 141, nil, 141, nil, 141, 81, 81, nil, 81, 81,
311
+ nil, 81, nil, nil, nil, 81, 81, nil, 81, nil,
312
+ 81, 110, 110, nil, 110, 110, nil, 110, nil, nil,
313
+ nil, 110, 110, nil, 110, nil, 110, 20, 20, nil,
314
+ 20, 20, nil, 20, nil, nil, nil, 20, 20, nil,
315
+ 20, nil, 20 ]
316
+
317
+ racc_action_pointer = [
318
+ 189, nil, nil, nil, 183, nil, nil, 142, nil, 177,
319
+ nil, 162, 159, nil, 125, 52, nil, nil, 115, 144,
320
+ 253, 116, nil, nil, 175, 107, 97, nil, 132, nil,
321
+ nil, nil, nil, 15, nil, nil, nil, nil, 72, 168,
322
+ 78, 127, nil, 123, nil, nil, 35, nil, 184, nil,
323
+ 106, 133, 90, nil, -1, 5, nil, 91, 134, nil,
324
+ nil, 88, 153, 98, nil, 93, -8, 24, nil, nil,
325
+ 25, 6, 44, 54, nil, nil, 34, nil, nil, nil,
326
+ nil, 221, 87, -6, nil, 94, nil, nil, nil, nil,
327
+ nil, 10, nil, -8, nil, nil, 15, 110, nil, 80,
328
+ nil, nil, nil, 119, 54, -1, 95, -13, nil, nil,
329
+ 237, 133, 57, 141, 114, 41, nil, nil, 116, 59,
330
+ nil, nil, 153, 20, nil, -2, 70, nil, nil, nil,
331
+ nil, nil, 92, 148, nil, nil, nil, 172, nil, nil,
332
+ nil, 205, nil, -3, nil, nil, nil, nil, 153, 118,
333
+ nil, nil ]
334
+
335
+ racc_action_default = [
336
+ -91, -4, -26, -5, -91, -25, -6, -91, -7, -91,
337
+ -8, -91, -91, -9, -91, -91, -10, -11, -91, -91,
338
+ -1, -91, -2, -69, -75, -91, -46, -45, -91, -49,
339
+ -43, -85, -48, -42, -40, -50, -44, -47, -41, -91,
340
+ -34, -75, -16, -12, -13, -15, -75, -73, -91, -3,
341
+ -34, -91, -75, -76, -91, -91, -38, -91, -91, -33,
342
+ -35, -91, -89, -91, -83, -91, -91, -91, -74, 152,
343
+ -31, -23, -25, -89, -29, -21, -91, -27, -30, -32,
344
+ -28, -91, -91, -91, -79, -82, -65, -64, -66, -68,
345
+ -67, -91, -53, -91, -56, -59, -91, -91, -58, -91,
346
+ -86, -87, -88, -91, -91, -91, -90, -91, -84, -14,
347
+ -91, -91, -24, -91, -34, -91, -77, -78, -91, -91,
348
+ -52, -54, -91, -91, -61, -91, -91, -39, -51, -37,
349
+ -19, -36, -91, -91, -17, -22, -18, -20, -70, -80,
350
+ -81, -91, -57, -91, -60, -63, -71, -72, -91, -91,
351
+ -62, -55 ]
352
+
353
+ racc_goto_table = [
354
+ 20, 49, 38, 62, 99, 27, 42, 84, 45, 94,
355
+ 131, 47, 75, 73, 25, 44, 92, 125, 77, 89,
356
+ 89, 38, 78, 79, 27, 105, 63, 53, 95, 111,
357
+ 33, 67, 38, 56, 98, 27, 113, 43, 57, 68,
358
+ 51, 70, 91, 80, 59, 85, 94, 46, 71, 33,
359
+ 83, 38, 131, 121, 27, 82, 89, 42, 19, 45,
360
+ 33, 89, nil, 103, nil, nil, 109, nil, nil, 124,
361
+ nil, 74, 143, 139, 135, nil, nil, 137, 142, 33,
362
+ 77, 115, nil, nil, 78, 79, nil, nil, 89, nil,
363
+ nil, nil, 38, nil, nil, 27, 49, 38, nil, nil,
364
+ 27, nil, nil, 70, 127, 80, nil, 132, 89, 129,
365
+ 133, 85, 38, 49, 49, 27, 150, nil, nil, 38,
366
+ 33, nil, 27, nil, 140, 33, nil, nil, nil, nil,
367
+ 49, 145, nil, 74, nil, nil, nil, nil, nil, nil,
368
+ 33, 149, nil, nil, nil, nil, nil, 33 ]
369
+
370
+ racc_goto_check = [
371
+ 2, 3, 14, 18, 29, 4, 15, 44, 14, 35,
372
+ 27, 14, 21, 18, 26, 13, 33, 38, 23, 30,
373
+ 30, 14, 24, 25, 4, 19, 40, 42, 37, 17,
374
+ 20, 40, 14, 26, 36, 4, 19, 12, 28, 14,
375
+ 39, 15, 32, 14, 26, 14, 35, 41, 16, 20,
376
+ 43, 14, 27, 33, 4, 42, 30, 15, 1, 14,
377
+ 20, 30, nil, 26, nil, nil, 13, nil, nil, 37,
378
+ nil, 20, 29, 44, 21, nil, nil, 18, 35, 20,
379
+ 23, 2, nil, nil, 24, 25, nil, nil, 30, nil,
380
+ nil, nil, 14, nil, nil, 4, 3, 14, nil, nil,
381
+ 4, nil, nil, 15, 26, 14, nil, 2, 30, 26,
382
+ 2, 14, 14, 3, 3, 4, 37, nil, nil, 14,
383
+ 20, nil, 4, nil, 26, 20, nil, nil, nil, nil,
384
+ 3, 26, nil, 20, nil, nil, nil, nil, nil, nil,
385
+ 20, 2, nil, nil, nil, nil, nil, 20 ]
386
+
387
+ racc_goto_pointer = [
388
+ nil, 58, 0, -19, -4, nil, nil, nil, nil, nil,
389
+ nil, nil, 22, 0, -7, -9, -2, -42, -37, -37,
390
+ 21, -38, nil, -32, -28, -27, 5, -96, 10, -53,
391
+ -35, nil, -12, -38, nil, -45, -21, -27, -79, 16,
392
+ -15, 29, 3, -2, -45 ]
393
+
394
+ racc_goto_default = [
395
+ nil, nil, nil, 22, 1, 3, 6, 8, 10, 13,
396
+ 16, 17, nil, nil, 21, 26, nil, nil, nil, nil,
397
+ 12, nil, 76, 34, 36, 37, nil, 60, nil, nil,
398
+ 30, 32, nil, nil, 93, 97, nil, nil, nil, nil,
399
+ nil, nil, 64, nil, nil ]
400
+
401
+ racc_token_table = {
402
+ false => 0,
403
+ Object.new => 1,
404
+ :LBRACK => 2,
405
+ :QTEXT => 3,
406
+ :RBRACK => 4,
407
+ :LBRACE => 5,
408
+ :RBRACE => 6,
409
+ :SYMBOL => 7,
410
+ :FARROW => 8,
411
+ :COMMA => 9,
412
+ :TRUE => 10,
413
+ :FALSE => 11,
414
+ :EQUALS => 12,
415
+ :QMARK => 13,
416
+ :LPAREN => 14,
417
+ :RPAREN => 15,
418
+ :ISEQUAL => 16,
419
+ :GREATEREQUAL => 17,
420
+ :GREATERTHAN => 18,
421
+ :LESSTHAN => 19,
422
+ :LESSEQUAL => 20,
423
+ :NOTEQUAL => 21,
424
+ :IF => 22,
425
+ :ELSE => 23,
426
+ :IMPORT => 24,
427
+ :DEFINE => 25,
428
+ :ELSIF => 26,
429
+ :VARIABLE => 27,
430
+ :CLASS => 28,
431
+ :INHERITS => 29,
432
+ :NODE => 30,
433
+ :BOOLEAN => 31,
434
+ :DOT => 32,
435
+ :COLON => 33,
436
+ :TYPE => 34,
437
+ :NAME => 35,
438
+ :SEMIC => 36,
439
+ :CASE => 37,
440
+ :DEFAULT => 38,
441
+ :INCLUDE => 39 }
442
+
443
+ racc_use_result_var = true
444
+
445
+ racc_nt_base = 40
446
+
447
+ Racc_arg = [
448
+ racc_action_table,
449
+ racc_action_check,
450
+ racc_action_default,
451
+ racc_action_pointer,
452
+ racc_goto_table,
453
+ racc_goto_check,
454
+ racc_goto_default,
455
+ racc_goto_pointer,
456
+ racc_nt_base,
457
+ racc_reduce_table,
458
+ racc_token_table,
459
+ racc_shift_n,
460
+ racc_reduce_n,
461
+ racc_use_result_var ]
462
+
463
+ Racc_token_to_s_table = [
464
+ '$end',
465
+ 'error',
466
+ 'LBRACK',
467
+ 'QTEXT',
468
+ 'RBRACK',
469
+ 'LBRACE',
470
+ 'RBRACE',
471
+ 'SYMBOL',
472
+ 'FARROW',
473
+ 'COMMA',
474
+ 'TRUE',
475
+ 'FALSE',
476
+ 'EQUALS',
477
+ 'QMARK',
478
+ 'LPAREN',
479
+ 'RPAREN',
480
+ 'ISEQUAL',
481
+ 'GREATEREQUAL',
482
+ 'GREATERTHAN',
483
+ 'LESSTHAN',
484
+ 'LESSEQUAL',
485
+ 'NOTEQUAL',
486
+ 'IF',
487
+ 'ELSE',
488
+ 'IMPORT',
489
+ 'DEFINE',
490
+ 'ELSIF',
491
+ 'VARIABLE',
492
+ 'CLASS',
493
+ 'INHERITS',
494
+ 'NODE',
495
+ 'BOOLEAN',
496
+ 'DOT',
497
+ 'COLON',
498
+ 'TYPE',
499
+ 'NAME',
500
+ 'SEMIC',
501
+ 'CASE',
502
+ 'DEFAULT',
503
+ 'INCLUDE',
504
+ '$start',
505
+ 'program',
506
+ 'statements',
507
+ 'statement',
508
+ 'object',
509
+ 'assignment',
510
+ 'casestatement',
511
+ 'import',
512
+ 'include',
513
+ 'definition',
514
+ 'hostclass',
515
+ 'nodedef',
516
+ 'classnames',
517
+ 'classname',
518
+ 'name',
519
+ 'variable',
520
+ 'objectinstances',
521
+ 'endsemi',
522
+ 'params',
523
+ 'endcomma',
524
+ 'type',
525
+ 'objectinst',
526
+ 'objectname',
527
+ 'quotedtext',
528
+ 'selector',
529
+ 'array',
530
+ 'rvalue',
531
+ 'param',
532
+ 'rvalues',
533
+ 'comma',
534
+ 'boolean',
535
+ 'objectref',
536
+ 'caseopts',
537
+ 'caseopt',
538
+ 'casevalues',
539
+ 'selectlhand',
540
+ 'svalues',
541
+ 'selectval',
542
+ 'sintvalues',
543
+ 'argumentlist',
544
+ 'parent',
545
+ 'names',
546
+ 'nothing',
547
+ 'arguments',
548
+ 'argument']
549
+
550
+ Racc_debug_parser = false
551
+
552
+ ##### racc system variables end #####
553
+
554
+ # reduce 0 omitted
555
+
556
+ module_eval <<'.,.,', 'grammar.ra', 37
557
+ def _reduce_1( val, _values, result )
558
+ if val[0].is_a?(AST::ASTArray)
559
+ result = val[0]
560
+ else
561
+ result = AST::ASTArray.new(
562
+ :line => @lexer.line,
563
+ :children => [val[0]]
564
+ )
565
+ end
566
+
567
+ # this is mainly so we can test the parser separately from the
568
+ # interpreter
569
+ # if Puppet[:parseonly]
570
+ # begin
571
+ # if Puppet[:debug]
572
+ # puts result.tree(0)
573
+ # end
574
+ # rescue NoMethodError => detail
575
+ # Puppet.err detail
576
+ # #exit(78)
577
+ # end
578
+ # #require 'puppet/parser/interpreter'
579
+ # #result = Puppet::Server.new(result)
580
+ # end
581
+ result
582
+ end
583
+ .,.,
584
+
585
+ # reduce 2 omitted
586
+
587
+ module_eval <<'.,.,', 'grammar.ra', 51
588
+ def _reduce_3( val, _values, result )
589
+ if val[0].is_a?(AST::ASTArray)
590
+ val[0].push(val[1])
591
+ result = val[0]
592
+ else
593
+ result = AST::ASTArray.new(
594
+ :file => @lexer.file,
595
+ :line => @lexer.line,
596
+ :children => [val[0],val[1]]
597
+ )
598
+ end
599
+ result
600
+ end
601
+ .,.,
602
+
603
+ # reduce 4 omitted
604
+
605
+ # reduce 5 omitted
606
+
607
+ # reduce 6 omitted
608
+
609
+ # reduce 7 omitted
610
+
611
+ # reduce 8 omitted
612
+
613
+ # reduce 9 omitted
614
+
615
+ # reduce 10 omitted
616
+
617
+ # reduce 11 omitted
618
+
619
+ module_eval <<'.,.,', 'grammar.ra', 88
620
+ def _reduce_12( val, _values, result )
621
+ classnames = aryfy(val[1])
622
+
623
+ klasses = []
624
+
625
+ # Now just iterate over each of the class names and create a new
626
+ # object instance. FIXME This should probably eventually include
627
+ # some kind of checking that the asked-for class is a defined class.
628
+ classnames.each { |classname|
629
+ emptyary = AST::ASTArray.new(:children => [])
630
+ klasses << AST::ObjectDef.new(
631
+ :pin => "{}",
632
+ :line => @lexer.line,
633
+ :file => @lexer.file,
634
+ :type => classname,
635
+ :params => emptyary
636
+ )
637
+ }
638
+ result = AST::ASTArray.new(
639
+ :line => @lexer.line,
640
+ :file => @lexer.file,
641
+ :children => klasses
642
+ )
643
+ result
644
+ end
645
+ .,.,
646
+
647
+ # reduce 13 omitted
648
+
649
+ module_eval <<'.,.,', 'grammar.ra', 95
650
+ def _reduce_14( val, _values, result )
651
+ result = aryfy(val[0], val[2])
652
+ result.line = @lexer.line
653
+ result.file = @lexer.file
654
+ result
655
+ end
656
+ .,.,
657
+
658
+ # reduce 15 omitted
659
+
660
+ # reduce 16 omitted
661
+
662
+ module_eval <<'.,.,', 'grammar.ra', 129
663
+ def _reduce_17( val, _values, result )
664
+ if val[0].is_a?(AST::ASTArray)
665
+ raise Puppet::ParseError, "Invalid name"
666
+ end
667
+ array = val[2]
668
+ if array.is_a?(AST::ObjectInst)
669
+ array = [array]
670
+ end
671
+ result = AST::ASTArray.new(
672
+ :line => @lexer.line,
673
+ :file => @lexer.file
674
+ )
675
+ # this iterates across each specified objectinstance
676
+ array.each { |instance|
677
+ unless instance.is_a?(AST::ObjectInst)
678
+ raise Puppet::Dev, "Got something that isn't an instance"
679
+ end
680
+ # now, i need to somehow differentiate between those things with
681
+ # arrays in their names, and normal things
682
+ result.push AST::ObjectDef.new(
683
+ :pin => "{}",
684
+ :line => @lexer.line,
685
+ :file => @lexer.file,
686
+ :type => val[0],
687
+ :name => instance[0],
688
+ :params => instance[1]
689
+ )
690
+ }
691
+ result
692
+ end
693
+ .,.,
694
+
695
+ module_eval <<'.,.,', 'grammar.ra', 145
696
+ def _reduce_18( val, _values, result )
697
+ if val[0].is_a?(AST::ASTArray)
698
+ Puppet.notice "invalid name"
699
+ raise Puppet::ParseError, "Invalid name"
700
+ end
701
+ # an object but without a name
702
+ # this cannot be an instance of a library type
703
+
704
+ # the objects will autogenerate a name if we don't provide one
705
+ result = AST::ObjectDef.new(
706
+ :pin => "{}",
707
+ :line => @lexer.line,
708
+ :file => @lexer.file,
709
+ :type => val[0],
710
+ :params => val[2]
711
+ )
712
+ result
713
+ end
714
+ .,.,
715
+
716
+ module_eval <<'.,.,', 'grammar.ra', 157
717
+ def _reduce_19( val, _values, result )
718
+ # a template setting for a type
719
+ if val[0].is_a?(AST::ASTArray)
720
+ raise Puppet::ParseError, "Invalid type"
721
+ end
722
+ result = AST::TypeDefaults.new(
723
+ :pin => "{}",
724
+ :line => @lexer.line,
725
+ :file => @lexer.file,
726
+ :type => val[0],
727
+ :params => val[2]
728
+ )
729
+ result
730
+ end
731
+ .,.,
732
+
733
+ module_eval <<'.,.,', 'grammar.ra', 165
734
+ def _reduce_20( val, _values, result )
735
+ result = AST::ObjectInst.new(
736
+ :line => @lexer.line,
737
+ :file => @lexer.file,
738
+ :children => [val[0],val[2]]
739
+ )
740
+ result
741
+ end
742
+ .,.,
743
+
744
+ # reduce 21 omitted
745
+
746
+ module_eval <<'.,.,', 'grammar.ra', 179
747
+ def _reduce_22( val, _values, result )
748
+ if val[0].is_a?(AST::ObjectInst)
749
+ result = AST::ASTArray.new(
750
+ :line => @lexer.line,
751
+ :file => @lexer.file,
752
+ :children => [val[0],val[2]]
753
+ )
754
+ else
755
+ val[0].push val[2]
756
+ result = val[0]
757
+ end
758
+ result
759
+ end
760
+ .,.,
761
+
762
+ # reduce 23 omitted
763
+
764
+ # reduce 24 omitted
765
+
766
+ module_eval <<'.,.,', 'grammar.ra', 190
767
+ def _reduce_25( val, _values, result )
768
+ result = AST::Name.new(
769
+ :line => @lexer.line,
770
+ :file => @lexer.file,
771
+ :value => val[0]
772
+ )
773
+ result
774
+ end
775
+ .,.,
776
+
777
+ module_eval <<'.,.,', 'grammar.ra', 198
778
+ def _reduce_26( val, _values, result )
779
+ result = AST::Type.new(
780
+ :line => @lexer.line,
781
+ :file => @lexer.file,
782
+ :value => val[0]
783
+ )
784
+ result
785
+ end
786
+ .,.,
787
+
788
+ # reduce 27 omitted
789
+
790
+ # reduce 28 omitted
791
+
792
+ # reduce 29 omitted
793
+
794
+ # reduce 30 omitted
795
+
796
+ # reduce 31 omitted
797
+
798
+ # reduce 32 omitted
799
+
800
+ module_eval <<'.,.,', 'grammar.ra', 221
801
+ def _reduce_33( val, _values, result )
802
+ # this is distinct from referencing a variable
803
+ variable = AST::Name.new(
804
+ :line => @lexer.line,
805
+ :file => @lexer.file,
806
+ :value => val[0].sub(/^\$/,'')
807
+ )
808
+ result = AST::VarDef.new(
809
+ :pin => "=",
810
+ :line => @lexer.line,
811
+ :file => @lexer.file,
812
+ :name => variable,
813
+ :value => val[2]
814
+ )
815
+ result
816
+ end
817
+ .,.,
818
+
819
+ module_eval <<'.,.,', 'grammar.ra', 230
820
+ def _reduce_34( val, _values, result )
821
+ result = AST::ASTArray.new(
822
+ :line => @lexer.line,
823
+ :file => @lexer.file,
824
+ :children => []
825
+ )
826
+ result
827
+ end
828
+ .,.,
829
+
830
+ module_eval <<'.,.,', 'grammar.ra', 230
831
+ def _reduce_35( val, _values, result )
832
+ result = val[0]
833
+ result
834
+ end
835
+ .,.,
836
+
837
+ module_eval <<'.,.,', 'grammar.ra', 243
838
+ def _reduce_36( val, _values, result )
839
+ if val[0].is_a?(AST::ASTArray)
840
+ val[0].push(val[2])
841
+ result = val[0]
842
+ else
843
+ result = AST::ASTArray.new(
844
+ :line => @lexer.line,
845
+ :file => @lexer.file,
846
+ :children => [val[0],val[2]]
847
+ )
848
+ end
849
+ result
850
+ end
851
+ .,.,
852
+
853
+ module_eval <<'.,.,', 'grammar.ra', 258
854
+ def _reduce_37( val, _values, result )
855
+ leaf = AST::String.new(
856
+ :line => @lexer.line,
857
+ :file => @lexer.file,
858
+ :value => val[0]
859
+ )
860
+ result = AST::ObjectParam.new(
861
+ :pin => "=>",
862
+ :line => @lexer.line,
863
+ :file => @lexer.file,
864
+ :param => leaf,
865
+ :value => val[2]
866
+ )
867
+ result
868
+ end
869
+ .,.,
870
+
871
+ # reduce 38 omitted
872
+
873
+ module_eval <<'.,.,', 'grammar.ra', 271
874
+ def _reduce_39( val, _values, result )
875
+ if val[0].is_a?(AST::ASTArray)
876
+ result = val[0].push(val[2])
877
+ else
878
+ result = AST::ASTArray.new(
879
+ :line => @lexer.line,
880
+ :file => @lexer.file,
881
+ :children => [val[0],val[2]]
882
+ )
883
+ end
884
+ result
885
+ end
886
+ .,.,
887
+
888
+ # reduce 40 omitted
889
+
890
+ # reduce 41 omitted
891
+
892
+ # reduce 42 omitted
893
+
894
+ # reduce 43 omitted
895
+
896
+ # reduce 44 omitted
897
+
898
+ # reduce 45 omitted
899
+
900
+ # reduce 46 omitted
901
+
902
+ # reduce 47 omitted
903
+
904
+ # reduce 48 omitted
905
+
906
+ module_eval <<'.,.,', 'grammar.ra', 289
907
+ def _reduce_49( val, _values, result )
908
+ result = AST::String.new(
909
+ :line => @lexer.line,
910
+ :file => @lexer.file,
911
+ :value => val[0]
912
+ )
913
+ result
914
+ end
915
+ .,.,
916
+
917
+ module_eval <<'.,.,', 'grammar.ra', 297
918
+ def _reduce_50( val, _values, result )
919
+ result = AST::Boolean.new(
920
+ :line => @lexer.line,
921
+ :file => @lexer.file,
922
+ :value => val[0]
923
+ )
924
+ result
925
+ end
926
+ .,.,
927
+
928
+ module_eval <<'.,.,', 'grammar.ra', 307
929
+ def _reduce_51( val, _values, result )
930
+ result = AST::ObjectRef.new(
931
+ :pin => '[]',
932
+ :line => @lexer.line,
933
+ :file => @lexer.file,
934
+ :type => val[0],
935
+ :name => val[2]
936
+ )
937
+ result
938
+ end
939
+ .,.,
940
+
941
+ module_eval <<'.,.,', 'grammar.ra', 324
942
+ def _reduce_52( val, _values, result )
943
+ options = val[3]
944
+ unless options.is_a?(AST::ASTArray)
945
+ options = AST::ASTArray.new(
946
+ :line => @lexer.line,
947
+ :file => @lexer.file,
948
+ :children => [val[3]]
949
+ )
950
+ end
951
+ result = AST::CaseStatement.new(
952
+ :test => val[1],
953
+ :options => val[3],
954
+ :file => @lexer.file,
955
+ :line => @lexer.line
956
+ )
957
+ result
958
+ end
959
+ .,.,
960
+
961
+ # reduce 53 omitted
962
+
963
+ module_eval <<'.,.,', 'grammar.ra', 338
964
+ def _reduce_54( val, _values, result )
965
+ if val[0].is_a?(AST::ASTArray)
966
+ val[0].push val[1]
967
+ result = val[0]
968
+ else
969
+ result = AST::ASTArray.new(
970
+ :line => @lexer.line,
971
+ :file => @lexer.file,
972
+ :children => [val[0], val[1]]
973
+ )
974
+ end
975
+ result
976
+ end
977
+ .,.,
978
+
979
+ module_eval <<'.,.,', 'grammar.ra', 348
980
+ def _reduce_55( val, _values, result )
981
+ result = AST::CaseOpt.new(
982
+ :pin => ":",
983
+ :value => val[0],
984
+ :file => @lexer.file,
985
+ :line => @lexer.line,
986
+ :statements => val[3]
987
+ )
988
+ result
989
+ end
990
+ .,.,
991
+
992
+ # reduce 56 omitted
993
+
994
+ module_eval <<'.,.,', 'grammar.ra', 362
995
+ def _reduce_57( val, _values, result )
996
+ if val[0].is_a?(AST::ASTArray)
997
+ val[0].push(val[2])
998
+ result = val[0]
999
+ else
1000
+ result = AST::ASTArray.new(
1001
+ :line => @lexer.line,
1002
+ :file => @lexer.file,
1003
+ :children => [val[0],val[2]]
1004
+ )
1005
+ end
1006
+ result
1007
+ end
1008
+ .,.,
1009
+
1010
+ module_eval <<'.,.,', 'grammar.ra', 372
1011
+ def _reduce_58( val, _values, result )
1012
+ result = AST::Selector.new(
1013
+ :pin => "?",
1014
+ :line => @lexer.line,
1015
+ :file => @lexer.file,
1016
+ :param => val[0],
1017
+ :values => val[2]
1018
+ )
1019
+ result
1020
+ end
1021
+ .,.,
1022
+
1023
+ # reduce 59 omitted
1024
+
1025
+ module_eval <<'.,.,', 'grammar.ra', 374
1026
+ def _reduce_60( val, _values, result )
1027
+ result = val[1]
1028
+ result
1029
+ end
1030
+ .,.,
1031
+
1032
+ # reduce 61 omitted
1033
+
1034
+ module_eval <<'.,.,', 'grammar.ra', 389
1035
+ def _reduce_62( val, _values, result )
1036
+ if val[0].is_a?(AST::ASTArray)
1037
+ val[0].push(val[2])
1038
+ result = val[0]
1039
+ else
1040
+ result = AST::ASTArray.new(
1041
+ :line => @lexer.line,
1042
+ :file => @lexer.file,
1043
+ :children => [val[0],val[2]]
1044
+ )
1045
+ end
1046
+ result
1047
+ end
1048
+ .,.,
1049
+
1050
+ module_eval <<'.,.,', 'grammar.ra', 399
1051
+ def _reduce_63( val, _values, result )
1052
+ result = AST::ObjectParam.new(
1053
+ :pin => "=>",
1054
+ :line => @lexer.line,
1055
+ :file => @lexer.file,
1056
+ :param => val[0],
1057
+ :value => val[2]
1058
+ )
1059
+ result
1060
+ end
1061
+ .,.,
1062
+
1063
+ module_eval <<'.,.,', 'grammar.ra', 407
1064
+ def _reduce_64( val, _values, result )
1065
+ result = AST::String.new(
1066
+ :line => @lexer.line,
1067
+ :file => @lexer.file,
1068
+ :value => val[0]
1069
+ )
1070
+ result
1071
+ end
1072
+ .,.,
1073
+
1074
+ module_eval <<'.,.,', 'grammar.ra', 414
1075
+ def _reduce_65( val, _values, result )
1076
+ result = AST::String.new(
1077
+ :line => @lexer.line,
1078
+ :file => @lexer.file,
1079
+ :value => val[0]
1080
+ )
1081
+ result
1082
+ end
1083
+ .,.,
1084
+
1085
+ module_eval <<'.,.,', 'grammar.ra', 421
1086
+ def _reduce_66( val, _values, result )
1087
+ result = AST::String.new(
1088
+ :line => @lexer.line,
1089
+ :file => @lexer.file,
1090
+ :value => val[0]
1091
+ )
1092
+ result
1093
+ end
1094
+ .,.,
1095
+
1096
+ module_eval <<'.,.,', 'grammar.ra', 428
1097
+ def _reduce_67( val, _values, result )
1098
+ result = AST::Default.new(
1099
+ :line => @lexer.line,
1100
+ :file => @lexer.file,
1101
+ :value => val[0]
1102
+ )
1103
+ result
1104
+ end
1105
+ .,.,
1106
+
1107
+ # reduce 68 omitted
1108
+
1109
+ module_eval <<'.,.,', 'grammar.ra', 466
1110
+ def _reduce_69( val, _values, result )
1111
+ # importing files
1112
+ # yuk, i hate keywords
1113
+ # we'll probably have to have some kind of search path eventually
1114
+ # but for now, just use a path relative to the file doing the importing
1115
+ dir = @lexer.file.sub(%r{[^/]+$},'').sub(/\/$/, '')
1116
+ if dir == ""
1117
+ dir = "."
1118
+ end
1119
+ result = AST::ASTArray.new(
1120
+ :file => @lexer.file,
1121
+ :line => @lexer.line
1122
+ )
1123
+ Dir.chdir(dir) {
1124
+ Dir.glob(val[1]).each { |file|
1125
+ parser = Puppet::Parser::Parser.new()
1126
+ parser.files = self.files
1127
+ Puppet.debug("importing '%s'" % file)
1128
+ begin
1129
+ parser.file = File.join(dir, file)
1130
+ rescue Puppet::ImportError
1131
+ Puppet.warning(
1132
+ "Importing %s would result in an import loop" %
1133
+ File.join(dir, file)
1134
+ )
1135
+ result = AST::ASTArray.new(
1136
+ :file => @lexer.file,
1137
+ :line => @lexer.line
1138
+ )
1139
+ next
1140
+ end
1141
+ # push the results into the main result array
1142
+ result.push parser.parse
1143
+ }
1144
+ }
1145
+ result
1146
+ end
1147
+ .,.,
1148
+
1149
+ module_eval <<'.,.,', 'grammar.ra', 476
1150
+ def _reduce_70( val, _values, result )
1151
+ result = AST::CompDef.new(
1152
+ :name => AST::Name.new(:value => val[1], :line => @lexer.line),
1153
+ :args => val[2],
1154
+ :file => @lexer.file,
1155
+ :line => @lexer.line,
1156
+ :code => val[4]
1157
+ )
1158
+ result
1159
+ end
1160
+ .,.,
1161
+
1162
+ module_eval <<'.,.,', 'grammar.ra', 492
1163
+ def _reduce_71( val, _values, result )
1164
+ #:args => val[2],
1165
+ args = {
1166
+ :name => AST::Name.new(:value => val[1], :line => @lexer.line),
1167
+ :file => @lexer.file,
1168
+ :line => @lexer.line,
1169
+ :code => val[4]
1170
+ }
1171
+ # It'll be an ASTArray if we didn't get a parent
1172
+ if val[2].is_a?(AST::Name)
1173
+ args[:parentclass] = val[2]
1174
+ end
1175
+ result = AST::ClassDef.new(args)
1176
+ result
1177
+ end
1178
+ .,.,
1179
+
1180
+ module_eval <<'.,.,', 'grammar.ra', 512
1181
+ def _reduce_72( val, _values, result )
1182
+ unless val[1].is_a?(AST::ASTArray)
1183
+ val[1] = AST::ASTArray.new(
1184
+ :line => val[1].line,
1185
+ :file => val[1].file,
1186
+ :children => [val[1]]
1187
+ )
1188
+ end
1189
+ args = {
1190
+ :file => @lexer.file,
1191
+ :line => @lexer.line,
1192
+ :names => val[1],
1193
+ :code => val[4]
1194
+ }
1195
+ if val[2].is_a?(AST::Name)
1196
+ args[:parentclass] = val[2]
1197
+ end
1198
+ result = AST::NodeDef.new(args)
1199
+ result
1200
+ end
1201
+ .,.,
1202
+
1203
+ # reduce 73 omitted
1204
+
1205
+ module_eval <<'.,.,', 'grammar.ra', 526
1206
+ def _reduce_74( val, _values, result )
1207
+ if val[0].is_a?(AST::ASTArray)
1208
+ result = val[0]
1209
+ result.push val[1]
1210
+ else
1211
+ result = AST::ASTArray.new(
1212
+ :line => @lexer.line,
1213
+ :file => @lexer.file,
1214
+ :children => [val[0], val[1]]
1215
+ )
1216
+ end
1217
+ result
1218
+ end
1219
+ .,.,
1220
+
1221
+ module_eval <<'.,.,', 'grammar.ra', 534
1222
+ def _reduce_75( val, _values, result )
1223
+ result = AST::ASTArray.new(
1224
+ :line => @lexer.line,
1225
+ :file => @lexer.file,
1226
+ :children => []
1227
+ )
1228
+ result
1229
+ end
1230
+ .,.,
1231
+
1232
+ # reduce 76 omitted
1233
+
1234
+ module_eval <<'.,.,', 'grammar.ra', 539
1235
+ def _reduce_77( val, _values, result )
1236
+ result = val[1]
1237
+ result
1238
+ end
1239
+ .,.,
1240
+
1241
+ module_eval <<'.,.,', 'grammar.ra', 550
1242
+ def _reduce_78( val, _values, result )
1243
+ if val[1].is_a?(AST::ASTArray)
1244
+ result = val[1]
1245
+ else
1246
+ result = AST::ASTArray.new(
1247
+ :line => @lexer.line,
1248
+ :file => @lexer.file,
1249
+ :children => [val[0]]
1250
+ )
1251
+ end
1252
+ result
1253
+ end
1254
+ .,.,
1255
+
1256
+ # reduce 79 omitted
1257
+
1258
+ module_eval <<'.,.,', 'grammar.ra', 564
1259
+ def _reduce_80( val, _values, result )
1260
+ if val[0].instance_of?(AST::ASTArray)
1261
+ val[0].push(val[2])
1262
+ result = val[0]
1263
+ else
1264
+ result = AST::ASTArray.new(
1265
+ :line => @lexer.line,
1266
+ :file => @lexer.file,
1267
+ :children => [val[0],val[2]]
1268
+ )
1269
+ end
1270
+ result
1271
+ end
1272
+ .,.,
1273
+
1274
+ module_eval <<'.,.,', 'grammar.ra', 572
1275
+ def _reduce_81( val, _values, result )
1276
+ result = AST::CompArgument.new(
1277
+ :line => @lexer.line,
1278
+ :file => @lexer.file,
1279
+ :children => [val[0],val[2]]
1280
+ )
1281
+ result
1282
+ end
1283
+ .,.,
1284
+
1285
+ module_eval <<'.,.,', 'grammar.ra', 579
1286
+ def _reduce_82( val, _values, result )
1287
+ result = AST::CompArgument.new(
1288
+ :line => @lexer.line,
1289
+ :file => @lexer.file,
1290
+ :children => [val[0]]
1291
+ )
1292
+ result
1293
+ end
1294
+ .,.,
1295
+
1296
+ # reduce 83 omitted
1297
+
1298
+ module_eval <<'.,.,', 'grammar.ra', 588
1299
+ def _reduce_84( val, _values, result )
1300
+ result = AST::Name.new(
1301
+ :value => val[1],
1302
+ :file => @lexer.file,
1303
+ :line => @lexer.line
1304
+ )
1305
+ result
1306
+ end
1307
+ .,.,
1308
+
1309
+ module_eval <<'.,.,', 'grammar.ra', 597
1310
+ def _reduce_85( val, _values, result )
1311
+ name = val[0].sub(/^\$/,'')
1312
+ result = AST::Variable.new(
1313
+ :line => @lexer.line,
1314
+ :file => @lexer.file,
1315
+ :value => name
1316
+ )
1317
+ result
1318
+ end
1319
+ .,.,
1320
+
1321
+ module_eval <<'.,.,', 'grammar.ra', 606
1322
+ def _reduce_86( val, _values, result )
1323
+ if val[1].is_a?(AST::ASTArray)
1324
+ result = val[1]
1325
+ else
1326
+ result = AST::ASTArray.new
1327
+ result.push val[1]
1328
+ end
1329
+ result
1330
+ end
1331
+ .,.,
1332
+
1333
+ # reduce 87 omitted
1334
+
1335
+ # reduce 88 omitted
1336
+
1337
+ # reduce 89 omitted
1338
+
1339
+ module_eval <<'.,.,', 'grammar.ra', 611
1340
+ def _reduce_90( val, _values, result )
1341
+ result = nil
1342
+ result
1343
+ end
1344
+ .,.,
1345
+
1346
+ def _reduce_none( val, _values, result )
1347
+ result
1348
+ end
1349
+
1350
+ end # class Parser
1351
+
1352
+ end # module Parser
1353
+
1354
+ end # module Puppet