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,3 @@
1
+ require 'puppet/type/nameservice/posix'
2
+ require 'puppet/type/nameservice/netinfo'
3
+ require 'puppet/type/nameservice/objectadd'
@@ -0,0 +1,173 @@
1
+ # Manage NetInfo POSIX objects. Probably only used on OS X, but I suppose
2
+ # it could be used elsewhere.
3
+
4
+ require 'puppet'
5
+ require 'puppet/type/nameservice/posix'
6
+
7
+ module Puppet
8
+ class Type
9
+ # Return the NetInfo directory in which a given object type is stored.
10
+ # Defaults to the type's name if @netinfodir is unset.
11
+ end
12
+
13
+ module NameService
14
+ module NetInfo
15
+ def self.test
16
+ system("which niutil > /dev/null 2>&1")
17
+
18
+ if $? == 0
19
+ return true
20
+ else
21
+ Puppet.err "Could not find niutil"
22
+ return false
23
+ end
24
+
25
+ system("which nireport > /dev/null 2>&1")
26
+
27
+ if $? == 0
28
+ return true
29
+ else
30
+ Puppet.err "Could not find nireport"
31
+ return false
32
+ end
33
+ end
34
+
35
+ def self.exists?(obj)
36
+ cmd = "nidump -r /%s/%s /" %
37
+ [obj.class.netinfodir, obj.name]
38
+
39
+ output = %x{#{cmd} 2>/dev/null}
40
+ if output == ""
41
+ return false
42
+ else
43
+ #Puppet.debug "%s exists: %s" % [obj.name, output]
44
+ return true
45
+ end
46
+ end
47
+
48
+ def self.flush
49
+ output = %x{lookupd -flushcache 2>&1}
50
+
51
+ if $? != 0
52
+ Puppet.err "Could not flush lookupd cache: %s" % output
53
+ end
54
+ end
55
+
56
+ class NetInfoState < POSIX::POSIXState
57
+ def self.allatonce?
58
+ false
59
+ end
60
+
61
+ def self.netinfokey
62
+ if defined? @netinfokey and @netinfokey
63
+ return @netinfokey
64
+ else
65
+ return self.name
66
+ end
67
+ end
68
+
69
+ def retrieve
70
+ NetInfo.flush
71
+ dir = @parent.class.netinfodir
72
+ cmd = ["nireport", "/", "/%s" % dir, "name"]
73
+
74
+ if key = self.class.netinfokey
75
+ cmd << key.to_s
76
+ else
77
+ raise Puppet::DevError,
78
+ "Could not find netinfokey for state %s" %
79
+ self.class.name
80
+ end
81
+ self.debug "Executing %s" % cmd.join(" ").inspect
82
+
83
+ output = %x{#{cmd.join(" ")} 2>&1}.split("\n").each { |line|
84
+ if line =~ /^(\w+)\s+(.+)$/
85
+ name = $1
86
+ value = $2.sub(/\s+$/, '')
87
+
88
+ if name == @parent.name
89
+ if value =~ /^[-0-9]+$/
90
+ @is = Integer(value)
91
+ else
92
+ @is = value
93
+ end
94
+ end
95
+ else
96
+ raise Puppet::DevError, "Could not match %s" % line
97
+ end
98
+ }
99
+
100
+ unless defined? @is
101
+ @is = :notfound
102
+ end
103
+ end
104
+
105
+ def addcmd
106
+ creatorcmd("-create")
107
+ end
108
+
109
+ def creatorcmd(arg)
110
+ cmd = ["niutil"]
111
+ cmd << arg
112
+
113
+ cmd << "/" << "/%s/%s" %
114
+ [@parent.class.netinfodir, @parent.name]
115
+
116
+ #if arg == "-create"
117
+ # return [cmd.join(" "), self.modifycmd].join(";")
118
+ #else
119
+ return cmd.join(" ")
120
+ #end
121
+ end
122
+
123
+ def deletecmd
124
+ creatorcmd("-destroy")
125
+ end
126
+
127
+ def modifycmd
128
+ cmd = ["niutil"]
129
+
130
+ cmd << "-createprop" << "/" << "/%s/%s" %
131
+ [@parent.class.netinfodir, @parent.name]
132
+
133
+ if key = self.class.netinfokey
134
+ cmd << key << "'%s'" % self.should
135
+ else
136
+ raise Puppet::DevError,
137
+ "Could not find netinfokey for state %s" %
138
+ self.class.name
139
+ end
140
+ cmd.join(" ")
141
+ end
142
+ end
143
+
144
+ class GroupGID < NetInfoState
145
+ end
146
+
147
+ class UserUID < NetInfoState
148
+ end
149
+
150
+ class UserGID < NetInfoState
151
+ end
152
+
153
+ class UserComment < NetInfoState
154
+ @netinfokey = "realname"
155
+ end
156
+
157
+ class UserHome < NetInfoState
158
+ end
159
+
160
+ class UserShell < NetInfoState
161
+ end
162
+
163
+ class UserLocked < NetInfoState
164
+ end
165
+
166
+ class UserExpire < NetInfoState
167
+ end
168
+
169
+ class UserInactive < NetInfoState
170
+ end
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,146 @@
1
+ require 'puppet'
2
+
3
+ module Puppet
4
+ class State
5
+ def self.objectaddflag
6
+ if defined? @objectaddflag and @objectaddflag
7
+ return @objectaddflag
8
+ else
9
+ return @name
10
+ end
11
+ end
12
+ end
13
+
14
+ module NameService
15
+ module ObjectAdd
16
+ # Verify that we've got the commands necessary to manage flat files.
17
+ def self.test
18
+ system("which groupadd > /dev/null 2>&1")
19
+
20
+ if $? == 0
21
+ return true
22
+ else
23
+ Puppet.err "Could not find groupadd"
24
+ return false
25
+ end
26
+ end
27
+
28
+ def self.exists?(obj)
29
+ if obj.getinfo
30
+ return true
31
+ else
32
+ return false
33
+ end
34
+ end
35
+
36
+ class ObjectAddGroup < POSIX::POSIXState
37
+ def self.allatonce?
38
+ true
39
+ end
40
+
41
+ def addcmd
42
+ cmd = ["groupadd"]
43
+ if gid = @parent.should(:gid)
44
+ unless gid == :auto
45
+ cmd << "-g" << gid
46
+ end
47
+ end
48
+ cmd << @parent.name
49
+
50
+ return cmd.join(" ")
51
+ end
52
+
53
+ def deletecmd
54
+ "groupdel %s" % @parent.name
55
+ end
56
+
57
+ def modifycmd
58
+ [
59
+ "groupmod",
60
+ self.class.objectaddflag,
61
+ "'%s'" % self.should,
62
+ @parent.name
63
+ ].join(" ")
64
+ end
65
+ end
66
+
67
+ class GroupGID < ObjectAddGroup
68
+ @objectaddflag = "-g"
69
+ @autogen = true
70
+ end
71
+
72
+ class ObjectAddUser < POSIX::POSIXState
73
+ def self.allatonce?
74
+ true
75
+ end
76
+
77
+ def addcmd
78
+ cmd = ["useradd"]
79
+ @parent.eachstate { |state|
80
+ # the value needs to be quoted, mostly because -c might
81
+ # have spaces in it
82
+ cmd << state.class.objectaddflag << "'%s'" % state.should
83
+ }
84
+ # stupid fedora
85
+ case Facter["distro"].value
86
+ when "Fedora", "RedHat":
87
+ cmd << "-M"
88
+ else
89
+ end
90
+ cmd << @parent.name
91
+
92
+ cmd.join(" ")
93
+ end
94
+
95
+ def deletecmd
96
+ ["userdel", @parent.name].join(" ")
97
+ end
98
+
99
+ def modifycmd
100
+ cmd = [
101
+ "usermod",
102
+ self.class.objectaddflag,
103
+ "'%s'" % self.should,
104
+ @parent.name
105
+ ].join(" ")
106
+ end
107
+ end
108
+ class UserUID < ObjectAddUser
109
+ @objectaddflag = "-u"
110
+ @autogen = true
111
+ end
112
+
113
+ class UserGID < ObjectAddUser
114
+ @objectaddflag = "-g"
115
+ @autogen = true
116
+ end
117
+
118
+ class UserComment < ObjectAddUser
119
+ @objectaddflag = "-c"
120
+ end
121
+
122
+ class UserHome < ObjectAddUser
123
+ @objectaddflag = "-d"
124
+ @autogen = true
125
+ end
126
+
127
+ class UserShell < ObjectAddUser
128
+ @objectaddflag = "-s"
129
+ @autogen = true
130
+ end
131
+
132
+ class UserLocked < ObjectAddUser
133
+ end
134
+
135
+ class UserExpire < ObjectAddUser
136
+ @objectaddflag = "-e"
137
+ @autogen = true
138
+ end
139
+
140
+ class UserInactive < ObjectAddUser
141
+ @objectaddflag = "-f"
142
+ @autogen = true
143
+ end
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,200 @@
1
+ require 'puppet'
2
+
3
+ module Puppet
4
+ class Type
5
+ def self.posixmethod
6
+ if defined? @posixmethod and @posixmethod
7
+ return @posixmethod
8
+ else
9
+ return @name
10
+ end
11
+ end
12
+ end
13
+
14
+ module NameService
15
+ # This is the base module for basically all of the NSS stuff. It
16
+ # should be able to retrieve the info for almost any system, but
17
+ # it can't create any information on its own. You need to define
18
+ # a subclass of these classes to actually modify the system.
19
+ module POSIX
20
+ class POSIXState < Puppet::State
21
+ class << self
22
+ attr_accessor :extender
23
+
24
+ def autogen?
25
+ if defined? @autogen
26
+ return @autogen
27
+ else
28
+ return false
29
+ end
30
+ end
31
+
32
+ def optional?
33
+ if defined? @optional
34
+ return @optional
35
+ else
36
+ return false
37
+ end
38
+ end
39
+ end
40
+
41
+ def self.doc
42
+ if defined? @extender
43
+ @extender.doc
44
+ else
45
+ nil
46
+ end
47
+ end
48
+
49
+ def self.complete
50
+ mod = "Puppet::State::%s" %
51
+ self.to_s.sub(/.+::/,'')
52
+ begin
53
+ modklass = eval(mod)
54
+ rescue NameError
55
+ raise Puppet::Error,
56
+ "Could not find extender module %s for %s" %
57
+ [mod, self.to_s]
58
+ end
59
+ include modklass
60
+
61
+ self.extender = modklass
62
+ end
63
+
64
+ def self.posixmethod
65
+ if defined? @extender
66
+ if @extender.respond_to?(:posixmethod)
67
+ return @extender.posixmethod
68
+ else
69
+ return @extender.name
70
+ end
71
+ else
72
+ raise Puppet::DevError,
73
+ "%s could not retrieve posixmethod" % self
74
+ end
75
+ end
76
+
77
+ def self.name
78
+ @extender.name
79
+ end
80
+
81
+ # we use the POSIX interfaces to retrieve all information,
82
+ # so we don't have to worry about abstracting that across
83
+ # the system
84
+ def retrieve
85
+ if obj = @parent.getinfo(true)
86
+
87
+ if method = self.class.posixmethod || self.class.name
88
+ @is = obj.send(method)
89
+ else
90
+ raise Puppet::DevError,
91
+ "%s has no posixmethod" % self.class
92
+ end
93
+ else
94
+ @is = :notfound
95
+ end
96
+ end
97
+
98
+ def sync
99
+ event = nil
100
+ # they're in sync some other way
101
+ if self.insync?
102
+ return nil
103
+ end
104
+ if @is == :notfound
105
+ self.retrieve
106
+ if self.insync?
107
+ return nil
108
+ end
109
+ end
110
+ # if the object needs to be created or deleted,
111
+ # depend on another method to do it all at once
112
+ if @is == :notfound or self.should == :notfound
113
+ event = syncname()
114
+
115
+ return event
116
+ # if the whole object is created at once, just return
117
+ # an event saying so
118
+ #if self.class.allatonce?
119
+ # return event
120
+ #end
121
+ end
122
+
123
+ unless @parent.exists?
124
+ raise Puppet::DevError,
125
+ "%s %s does not exist; cannot set %s" %
126
+ [@parent.class.name, @parent.name, self.class.name]
127
+ end
128
+
129
+ # this needs to be set either by the individual state
130
+ # or its parent class
131
+ cmd = self.modifycmd
132
+
133
+ self.debug "Executing %s" % cmd.inspect
134
+
135
+ output = %x{#{cmd} 2>&1}
136
+
137
+
138
+ unless $? == 0
139
+ raise Puppet::Error, "Could not modify %s on %s %s: %s" %
140
+ [self.class.name, @parent.class.name,
141
+ @parent.name, output]
142
+ end
143
+
144
+ if event
145
+ return event
146
+ else
147
+ return "#{@parent.class.name}_modified".intern
148
+ end
149
+ end
150
+
151
+ private
152
+ def syncname
153
+ cmd = nil
154
+ event = nil
155
+ if self.should == :notfound
156
+ # we need to remove the object...
157
+ unless @parent.exists?
158
+ # the group already doesn't exist
159
+ return nil
160
+ end
161
+
162
+ # again, needs to be set by the ind. state or its
163
+ # parent
164
+ cmd = self.deletecmd
165
+ type = "delete"
166
+ else
167
+ if @parent.exists?
168
+ return nil
169
+ end
170
+
171
+ # blah blah, define elsewhere, blah blah
172
+ cmd = self.addcmd
173
+ type = "create"
174
+ end
175
+ self.debug "Executing %s" % cmd.inspect
176
+
177
+ output = %x{#{cmd} 2>&1}
178
+
179
+ unless $? == 0
180
+ raise Puppet::Error, "Could not %s %s %s: %s" %
181
+ [type, @parent.class.name, @parent.name, output]
182
+ end
183
+
184
+ # we want object creation to show up as one event,
185
+ # not many
186
+ unless self.class.allatonce?
187
+ if type == "create"
188
+ @parent.eachstate { |state|
189
+ state.sync
190
+ state.retrieve
191
+ }
192
+ end
193
+ end
194
+
195
+ return "#{@parent.class.name}_#{type}d".intern
196
+ end
197
+ end
198
+ end
199
+ end
200
+ end