puppet 0.9.2 → 0.13.0

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 (213) hide show
  1. data/CHANGELOG +58 -0
  2. data/README +21 -18
  3. data/Rakefile +176 -36
  4. data/bin/puppet +34 -48
  5. data/bin/puppetca +41 -28
  6. data/bin/puppetd +87 -65
  7. data/bin/puppetdoc +99 -23
  8. data/bin/puppetmasterd +72 -91
  9. data/conf/redhat/client.init +80 -0
  10. data/conf/redhat/client.sysconfig +11 -0
  11. data/conf/redhat/fileserver.conf +12 -0
  12. data/conf/redhat/puppet.spec +130 -0
  13. data/conf/redhat/server.init +89 -0
  14. data/conf/redhat/server.sysconfig +9 -0
  15. data/examples/code/allatonce +2 -2
  16. data/examples/code/assignments +1 -1
  17. data/examples/code/classing +2 -2
  18. data/examples/code/components +2 -2
  19. data/examples/code/file.bl +5 -5
  20. data/examples/code/filedefaults +2 -2
  21. data/examples/code/fileparsing +1 -1
  22. data/examples/code/filerecursion +1 -1
  23. data/examples/code/functions +1 -1
  24. data/examples/code/groups +1 -1
  25. data/examples/code/importing +1 -1
  26. data/examples/code/nodes +1 -1
  27. data/examples/code/one +1 -1
  28. data/examples/code/relationships +2 -2
  29. data/examples/code/simpletests +5 -5
  30. data/examples/code/snippets/argumentdefaults +2 -2
  31. data/examples/code/snippets/casestatement +16 -8
  32. data/examples/code/snippets/classheirarchy.pp +4 -4
  33. data/examples/code/snippets/classincludes.pp +4 -4
  34. data/examples/code/snippets/classpathtest +2 -2
  35. data/examples/code/snippets/componentmetaparams.pp +11 -0
  36. data/examples/code/snippets/dirchmod +5 -5
  37. data/examples/code/snippets/emptyclass.pp +9 -0
  38. data/examples/code/snippets/failmissingexecpath.pp +1 -1
  39. data/examples/code/snippets/falsevalues.pp +1 -1
  40. data/examples/code/snippets/filecreate +5 -5
  41. data/examples/code/snippets/implicititeration +5 -5
  42. data/examples/code/snippets/multipleinstances +4 -4
  43. data/examples/code/snippets/namevartest +3 -3
  44. data/examples/code/snippets/scopetest +1 -1
  45. data/examples/code/snippets/selectorvalues.pp +3 -3
  46. data/examples/code/snippets/simpledefaults +2 -2
  47. data/examples/code/snippets/simpleselector +5 -5
  48. data/examples/code/snippets/singleary.pp +19 -0
  49. data/examples/root/etc/init.d/sleeper +3 -2
  50. data/ext/emacs/puppet-mode-init.el +6 -0
  51. data/ext/emacs/puppet-mode.el +189 -0
  52. data/ext/ldap/puppet.schema +17 -0
  53. data/ext/{module:puppet → module_puppet} +30 -31
  54. data/ext/vim/filetype.vim +9 -0
  55. data/ext/vim/puppet.vim +87 -0
  56. data/install.rb +63 -30
  57. data/lib/puppet.rb +216 -122
  58. data/lib/puppet/client.rb +51 -416
  59. data/lib/puppet/client/ca.rb +17 -0
  60. data/lib/puppet/client/dipper.rb +78 -0
  61. data/lib/puppet/client/file.rb +20 -0
  62. data/lib/puppet/client/log.rb +17 -0
  63. data/lib/puppet/client/master.rb +246 -0
  64. data/lib/puppet/client/proxy.rb +27 -0
  65. data/lib/puppet/client/status.rb +7 -0
  66. data/lib/puppet/config.rb +563 -13
  67. data/lib/puppet/daemon.rb +50 -22
  68. data/lib/puppet/element.rb +4 -4
  69. data/lib/puppet/event-loop.rb +1 -0
  70. data/lib/puppet/event-loop/better-definers.rb +367 -0
  71. data/lib/puppet/event-loop/event-loop.rb +355 -0
  72. data/lib/puppet/event-loop/signal-system.rb +220 -0
  73. data/lib/puppet/event.rb +9 -11
  74. data/lib/puppet/filetype.rb +195 -0
  75. data/lib/puppet/log.rb +35 -12
  76. data/lib/puppet/metric.rb +2 -2
  77. data/lib/puppet/networkclient.rb +145 -0
  78. data/lib/puppet/parameter.rb +335 -0
  79. data/lib/puppet/parser/ast.rb +42 -1453
  80. data/lib/puppet/parser/ast/astarray.rb +88 -0
  81. data/lib/puppet/parser/ast/branch.rb +47 -0
  82. data/lib/puppet/parser/ast/caseopt.rb +66 -0
  83. data/lib/puppet/parser/ast/casestatement.rb +78 -0
  84. data/lib/puppet/parser/ast/classdef.rb +78 -0
  85. data/lib/puppet/parser/ast/compdef.rb +111 -0
  86. data/lib/puppet/parser/ast/component.rb +105 -0
  87. data/lib/puppet/parser/ast/hostclass.rb +82 -0
  88. data/lib/puppet/parser/ast/leaf.rb +86 -0
  89. data/lib/puppet/parser/ast/node.rb +103 -0
  90. data/lib/puppet/parser/ast/nodedef.rb +68 -0
  91. data/lib/puppet/parser/ast/objectdef.rb +336 -0
  92. data/lib/puppet/parser/ast/objectparam.rb +30 -0
  93. data/lib/puppet/parser/ast/objectref.rb +76 -0
  94. data/lib/puppet/parser/ast/selector.rb +60 -0
  95. data/lib/puppet/parser/ast/typedefaults.rb +45 -0
  96. data/lib/puppet/parser/ast/vardef.rb +44 -0
  97. data/lib/puppet/parser/interpreter.rb +31 -14
  98. data/lib/puppet/parser/lexer.rb +2 -4
  99. data/lib/puppet/parser/parser.rb +332 -242
  100. data/lib/puppet/parser/scope.rb +55 -38
  101. data/lib/puppet/server.rb +43 -44
  102. data/lib/puppet/server/authstore.rb +3 -6
  103. data/lib/puppet/server/ca.rb +5 -2
  104. data/lib/puppet/server/filebucket.rb +2 -4
  105. data/lib/puppet/server/fileserver.rb +28 -12
  106. data/lib/puppet/server/logger.rb +15 -4
  107. data/lib/puppet/server/master.rb +62 -7
  108. data/lib/puppet/sslcertificates.rb +41 -607
  109. data/lib/puppet/sslcertificates/ca.rb +291 -0
  110. data/lib/puppet/sslcertificates/certificate.rb +283 -0
  111. data/lib/puppet/statechange.rb +6 -1
  112. data/lib/puppet/storage.rb +67 -56
  113. data/lib/puppet/transaction.rb +25 -9
  114. data/lib/puppet/transportable.rb +102 -22
  115. data/lib/puppet/type.rb +1096 -315
  116. data/lib/puppet/type/component.rb +30 -21
  117. data/lib/puppet/type/cron.rb +409 -448
  118. data/lib/puppet/type/exec.rb +234 -174
  119. data/lib/puppet/type/group.rb +65 -82
  120. data/lib/puppet/type/nameservice.rb +247 -3
  121. data/lib/puppet/type/nameservice/netinfo.rb +29 -40
  122. data/lib/puppet/type/nameservice/objectadd.rb +52 -66
  123. data/lib/puppet/type/nameservice/posix.rb +6 -194
  124. data/lib/puppet/type/package.rb +447 -295
  125. data/lib/puppet/type/package/apt.rb +51 -50
  126. data/lib/puppet/type/package/bsd.rb +82 -0
  127. data/lib/puppet/type/package/dpkg.rb +85 -88
  128. data/lib/puppet/type/package/rpm.rb +67 -63
  129. data/lib/puppet/type/package/sun.rb +119 -98
  130. data/lib/puppet/type/package/yum.rb +41 -37
  131. data/lib/puppet/type/parsedtype.rb +295 -0
  132. data/lib/puppet/type/parsedtype/host.rb +143 -0
  133. data/lib/puppet/type/parsedtype/port.rb +232 -0
  134. data/lib/puppet/type/parsedtype/sshkey.rb +129 -0
  135. data/lib/puppet/type/pfile.rb +484 -460
  136. data/lib/puppet/type/pfile/checksum.rb +237 -181
  137. data/lib/puppet/type/pfile/content.rb +67 -0
  138. data/lib/puppet/type/pfile/ensure.rb +212 -0
  139. data/lib/puppet/type/pfile/group.rb +106 -105
  140. data/lib/puppet/type/pfile/mode.rb +98 -101
  141. data/lib/puppet/type/pfile/source.rb +228 -209
  142. data/lib/puppet/type/pfile/type.rb +18 -21
  143. data/lib/puppet/type/pfile/uid.rb +127 -130
  144. data/lib/puppet/type/pfilebucket.rb +68 -63
  145. data/lib/puppet/type/schedule.rb +341 -0
  146. data/lib/puppet/type/service.rb +351 -255
  147. data/lib/puppet/type/service/base.rb +9 -14
  148. data/lib/puppet/type/service/debian.rb +32 -38
  149. data/lib/puppet/type/service/init.rb +130 -130
  150. data/lib/puppet/type/service/smf.rb +48 -20
  151. data/lib/puppet/type/state.rb +229 -16
  152. data/lib/puppet/type/symlink.rb +51 -63
  153. data/lib/puppet/type/tidy.rb +105 -102
  154. data/lib/puppet/type/user.rb +118 -180
  155. data/lib/puppet/util.rb +100 -6
  156. data/test/certmgr/certmgr.rb +0 -1
  157. data/test/client/client.rb +4 -4
  158. data/test/executables/puppetbin.rb +7 -14
  159. data/test/executables/puppetca.rb +18 -24
  160. data/test/executables/puppetd.rb +7 -16
  161. data/test/executables/puppetmasterd.rb +7 -9
  162. data/test/executables/puppetmodule.rb +11 -16
  163. data/test/language/ast.rb +11 -7
  164. data/test/language/interpreter.rb +1 -1
  165. data/test/language/scope.rb +2 -0
  166. data/test/language/snippets.rb +30 -5
  167. data/test/language/transportable.rb +77 -0
  168. data/test/other/config.rb +316 -0
  169. data/test/other/events.rb +22 -21
  170. data/test/other/log.rb +14 -14
  171. data/test/other/metrics.rb +4 -8
  172. data/test/other/overrides.rb +5 -5
  173. data/test/other/relationships.rb +4 -2
  174. data/test/other/storage.rb +64 -3
  175. data/test/other/transactions.rb +20 -20
  176. data/test/parser/parser.rb +7 -4
  177. data/test/puppet/conffiles.rb +12 -12
  178. data/test/puppet/defaults.rb +13 -11
  179. data/test/puppet/utiltest.rb +14 -11
  180. data/test/puppettest.rb +156 -48
  181. data/test/server/bucket.rb +2 -2
  182. data/test/server/fileserver.rb +6 -6
  183. data/test/server/logger.rb +19 -11
  184. data/test/server/master.rb +33 -4
  185. data/test/server/server.rb +2 -7
  186. data/test/types/basic.rb +5 -7
  187. data/test/types/component.rb +22 -18
  188. data/test/types/cron.rb +111 -44
  189. data/test/types/exec.rb +116 -59
  190. data/test/types/file.rb +262 -137
  191. data/test/types/filebucket.rb +13 -15
  192. data/test/types/fileignoresource.rb +12 -16
  193. data/test/types/filesources.rb +73 -48
  194. data/test/types/filetype.rb +13 -15
  195. data/test/types/group.rb +15 -13
  196. data/test/types/host.rb +146 -0
  197. data/test/types/package.rb +74 -63
  198. data/test/types/port.rb +139 -0
  199. data/test/types/query.rb +8 -8
  200. data/test/types/schedule.rb +335 -0
  201. data/test/types/service.rb +137 -21
  202. data/test/types/sshkey.rb +140 -0
  203. data/test/types/symlink.rb +3 -5
  204. data/test/types/tidy.rb +5 -14
  205. data/test/types/type.rb +67 -11
  206. data/test/types/user.rb +25 -23
  207. metadata +186 -122
  208. data/lib/puppet/type/pfile/create.rb +0 -108
  209. data/lib/puppet/type/pprocess.rb +0 -97
  210. data/lib/puppet/type/typegen.rb +0 -149
  211. data/lib/puppet/type/typegen/filerecord.rb +0 -243
  212. data/lib/puppet/type/typegen/filetype.rb +0 -316
  213. data/test/other/state.rb +0 -106
@@ -0,0 +1,67 @@
1
+ module Puppet
2
+ Puppet.type(:file).newstate(:content) do
3
+ desc "Specify the contents of a file as a string. Newlines, tabs, and spaces
4
+ can be specified using the escaped syntax (e.g., \\n for a newline). The
5
+ primary purpose of this parameter is to provide a kind of limited
6
+ templating::
7
+
8
+ define resolve(nameserver1, nameserver2, domain, search) {
9
+ $str = \"search $search
10
+ domain $domain
11
+ nameserver $nameserver1
12
+ nameserver $nameserver2
13
+ \"
14
+
15
+ file { \"/etc/resolv.conf\":
16
+ content => $str
17
+ }
18
+ }
19
+
20
+ Yes, it's very primitive, and it's useless for larger files, but it
21
+ is mostly meant as a stopgap measure for simple cases."
22
+
23
+ def change_to_s
24
+ "synced"
25
+ end
26
+
27
+ # We should probably take advantage of existing md5 sums if they're there,
28
+ # but I really don't feel like dealing with the complexity right now.
29
+ def retrieve
30
+ unless FileTest.exists?(@parent.name)
31
+ @is = :absent
32
+ return
33
+ end
34
+ begin
35
+ @is = File.read(@parent.name)
36
+ rescue => detail
37
+ @is = nil
38
+ raise Puppet::Error, "Could not read %s: %s" %
39
+ [@parent.name, detail]
40
+ end
41
+ end
42
+
43
+
44
+ # Just write our content out to disk.
45
+ def sync
46
+ begin
47
+ File.open(@parent.name, "w") { |f|
48
+ f.print self.should
49
+ f.flush
50
+ }
51
+ rescue => detail
52
+ raise Puppet::Error, "Could not write content to %s: %s" %
53
+ [@parent.name, detail]
54
+ end
55
+
56
+ @parent.setchecksum
57
+
58
+ if @is == :absent
59
+ return :file_created
60
+ else
61
+ return :file_changed
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ # $Id: content.rb 883 2006-02-08 16:53:34Z luke $
@@ -0,0 +1,212 @@
1
+ module Puppet
2
+ Puppet.type(:file).ensurable do
3
+ require 'etc'
4
+ desc "Whether to create files that don't currently exist.
5
+ Possible values are *absent*, *present* (equivalent to *file*),
6
+ **file**/*directory*. Specifying 'absent' will delete the file,
7
+ although currently this will not recursively delete directories.
8
+
9
+ This is the only element with an *ensure* state that does not have
10
+ a default value."
11
+
12
+ # Most 'ensure' states have a default, but with files we, um, don't.
13
+ nodefault
14
+
15
+ #newvalue(:false) do
16
+ # # If they say "false" here, we just don't do anything at all; either
17
+ # # the file is there or it's not.
18
+ #end
19
+
20
+ newvalue(:absent) do
21
+ File.unlink(@parent.name)
22
+ end
23
+
24
+ aliasvalue(:false, :absent)
25
+
26
+ newvalue(:file) do
27
+ # Make sure we're not managing the content some other way
28
+ if state = @parent.state(:content) or state = @parent.state(:source)
29
+ state.sync
30
+ else
31
+ mode = @parent.should(:mode)
32
+ Puppet::Util.asuser(asuser(), @parent.should(:group)) {
33
+ f = nil
34
+ if mode
35
+ f = File.open(@parent[:path],"w", mode)
36
+ else
37
+ f = File.open(@parent[:path],"w")
38
+ end
39
+
40
+ f.flush
41
+ f.close
42
+ @parent.setchecksum
43
+ }
44
+ end
45
+ return :file_created
46
+ end
47
+
48
+ aliasvalue(:present, :file)
49
+
50
+ newvalue(:directory) do
51
+ mode = @parent.should(:mode)
52
+ Puppet::Util.asuser(asuser()) {
53
+ if mode
54
+ Dir.mkdir(@parent.name,mode)
55
+ else
56
+ Dir.mkdir(@parent.name)
57
+ end
58
+ }
59
+ @parent.setchecksum
60
+ return :directory_created
61
+ end
62
+
63
+ def asuser
64
+ if @parent.should(:owner) and ! @parent.should(:owner).is_a?(Symbol)
65
+ writeable = Puppet::Util.asuser(@parent.should(:owner)) {
66
+ FileTest.writable?(File.dirname(@parent[:path]))
67
+ }
68
+
69
+ # If the parent directory is writeable, then we execute
70
+ # as the user in question. Otherwise we'll rely on
71
+ # the 'owner' state to do things.
72
+ if writeable
73
+ asuser = @parent.should(:owner)
74
+ end
75
+ end
76
+
77
+ return asuser
78
+ end
79
+
80
+ def check
81
+ basedir = File.dirname(@parent.name)
82
+
83
+ if ! FileTest.exists?(basedir)
84
+ raise Puppet::Error,
85
+ "Can not create %s; parent directory does not exist" %
86
+ @parent.name
87
+ elsif ! FileTest.directory?(basedir)
88
+ raise Puppet::Error,
89
+ "Can not create %s; %s is not a directory" %
90
+ [@parent.name, dirname]
91
+ end
92
+ end
93
+
94
+ def retrieve
95
+ if stat = @parent.stat(false)
96
+ @is = stat.ftype.intern
97
+ else
98
+ if self.should == :false
99
+ @is = :false
100
+ else
101
+ @is = :absent
102
+ end
103
+ end
104
+
105
+ #self.debug "'exists' state is %s" % self.is
106
+ end
107
+
108
+
109
+ # We can mostly rely on the superclass method, but we want other states
110
+ # to take precedence over 'ensure' if they are present.
111
+ # def sync
112
+ # # XXX This is a bad idea, because it almost guarantees bugs if we
113
+ # # introduce more states to manage content, but anything else is just
114
+ # # about as bad.
115
+ # event = nil
116
+ # #if state = @parent.state(:source) or state = @parent.state(:content)
117
+ # # event = state.sync
118
+ # #else
119
+ # event = super
120
+ # @parent.setchecksum
121
+ # #end
122
+ # return event
123
+ # end
124
+
125
+ def disabled_sync
126
+ event = nil
127
+ basedir = File.dirname(@parent.name)
128
+
129
+ if ! FileTest.exists?(basedir)
130
+ raise Puppet::Error,
131
+ "Can not create %s; parent directory does not exist" %
132
+ @parent.name
133
+ elsif ! FileTest.directory?(basedir)
134
+ raise Puppet::Error,
135
+ "Can not create %s; %s is not a directory" %
136
+ [@parent.name, dirname]
137
+ end
138
+
139
+ self.retrieve
140
+ if self.insync?
141
+ self.info "already in sync"
142
+ return nil
143
+ end
144
+
145
+ mode = @parent.should(:mode)
146
+
147
+ # First, determine if a user has been specified and if so if
148
+ # that user has write access to the parent dir
149
+ asuser = nil
150
+ if @parent.should(:owner) and ! @parent.should(:owner).is_a?(Symbol)
151
+ writeable = Puppet::Util.asuser(@parent.should(:owner)) {
152
+ FileTest.writable?(File.dirname(@parent[:path]))
153
+ }
154
+
155
+ # If the parent directory is writeable, then we execute
156
+ # as the user in question. Otherwise we'll rely on
157
+ # the 'owner' state to do things.
158
+ if writeable
159
+ asuser = @parent.should(:owner)
160
+ end
161
+ end
162
+ begin
163
+ case self.should
164
+ when "file":
165
+ # just create an empty file
166
+ Puppet::Util.asuser(asuser, @parent.should(:group)) {
167
+ if mode
168
+ File.open(@parent[:path],"w", mode) {
169
+ }
170
+ else
171
+ File.open(@parent[:path],"w") {
172
+ }
173
+ end
174
+ }
175
+ event = :file_created
176
+ when "directory":
177
+ Puppet::Util.asuser(asuser) {
178
+ if mode
179
+ Dir.mkdir(@parent.name,mode)
180
+ else
181
+ Dir.mkdir(@parent.name)
182
+ end
183
+ }
184
+ event = :directory_created
185
+ when :absent:
186
+ # this is where the file should be deleted...
187
+
188
+ # This value is only valid when we're rolling back a creation,
189
+ # so we verify that the file has not been modified since then.
190
+ unless FileTest.size(@parent.name) == 0
191
+ raise Puppet::Error.new(
192
+ "Created file %s has since been modified; cannot roll back."
193
+ )
194
+ end
195
+
196
+ File.unlink(@parent.name)
197
+ else
198
+ error = Puppet::Error.new(
199
+ "Somehow got told to create a %s file" % self.should)
200
+ raise error
201
+ end
202
+ rescue => detail
203
+ raise Puppet::Error.new("Could not create %s: %s" %
204
+ [self.should, detail]
205
+ )
206
+ end
207
+ return event
208
+ end
209
+ end
210
+ end
211
+
212
+ # $Id: ensure.rb 885 2006-02-08 17:44:44Z luke $
@@ -1,129 +1,130 @@
1
1
  # Manage file group ownership.
2
2
  module Puppet
3
- class State
4
- class PFileGroup < Puppet::State
5
- require 'etc'
6
- @doc = "Which group should own the file. Argument can be either group
7
- name or group ID."
8
- @name = :group
9
- @event = :inode_changed
10
-
11
- def id2name(id)
12
- begin
13
- group = Etc.getgrgid(id)
14
- rescue ArgumentError
15
- return nil
16
- end
17
- if group.gid == ""
18
- return nil
19
- else
20
- return group.name
21
- end
3
+ Puppet.type(:file).newstate(:group) do
4
+ require 'etc'
5
+ desc "Which group should own the file. Argument can be either group
6
+ name or group ID."
7
+ @event = :file_changed
8
+
9
+ def id2name(id)
10
+ begin
11
+ group = Etc.getgrgid(id)
12
+ rescue ArgumentError
13
+ return nil
22
14
  end
23
-
24
- # We want to print names, not numbers
25
- def is_to_s
26
- id2name(@is) || @is
15
+ if group.gid == ""
16
+ return nil
17
+ else
18
+ return group.name
27
19
  end
20
+ end
28
21
 
29
- def should_to_s
30
- id2name(self.should) || self.should
31
- end
22
+ # We want to print names, not numbers
23
+ def is_to_s
24
+ id2name(@is) || @is
25
+ end
26
+
27
+ def should_to_s
28
+ id2name(self.should) || self.should
29
+ end
32
30
 
33
- def retrieve
34
- stat = @parent.stat(true)
31
+ def retrieve
32
+ stat = @parent.stat(false)
35
33
 
34
+ if stat
36
35
  self.is = stat.gid
36
+ else
37
+ self.is = :absent
37
38
  end
39
+ end
38
40
 
39
- def shouldprocess(value)
40
- method = nil
41
- gid = nil
42
- gname = nil
43
-
44
- if value.is_a?(Integer)
45
- method = :getgrgid
46
- else
47
- method = :getgrnam
48
- end
41
+ munge do |value|
42
+ method = nil
43
+ gid = nil
44
+ gname = nil
49
45
 
50
- begin
51
- group = Etc.send(method,value)
52
-
53
- # at one time, os x was putting the gid into the passwd
54
- # field of the group struct, but that appears to not
55
- # be the case any more
56
- #os = Puppet::Fact["Operatingsystem"]
57
- #case os
58
- #when "Darwin":
59
- # #gid = group.passwd
60
- # gid = group.gid
61
- #else
62
- #end
63
-
64
- gid = group.gid
65
- gname = group.name
66
-
67
- rescue ArgumentError => detail
68
- raise Puppet::Error.new(
69
- "Could not find group %s" % value)
70
- rescue => detail
71
- raise Puppet::Error.new(
72
- "Could not find group %s: %s" % [self.should,detail])
73
- end
74
- if gid.nil?
75
- raise Puppet::Error.new(
76
- "Could not retrieve gid for %s" % @parent.name)
77
- end
46
+ if value.is_a?(Integer)
47
+ method = :getgrgid
48
+ else
49
+ method = :getgrnam
50
+ end
78
51
 
79
- #unless Process.uid == 0
80
- # groups = %x{groups}.chomp.split(/\s/)
81
- # unless groups.include?(gname)
82
- # self.notice "Cannot chgrp: not in group %s" % gname
83
- # raise Puppet::Error.new(
84
- # "Cannot chgrp: not in group %s" % gname)
85
- # end
52
+ begin
53
+ group = Etc.send(method,value)
54
+
55
+ # at one time, os x was putting the gid into the passwd
56
+ # field of the group struct, but that appears to not
57
+ # be the case any more
58
+ #os = Puppet::Fact["Operatingsystem"]
59
+ #case os
60
+ #when "Darwin":
61
+ # #gid = group.passwd
62
+ # gid = group.gid
63
+ #else
86
64
  #end
87
65
 
88
- if gid.nil?
89
- raise Puppet::Error.new(
90
- "Nil gid for %s" % @parent.name)
91
- else
92
- return gid
93
- end
66
+ gid = group.gid
67
+ gname = group.name
68
+
69
+ rescue ArgumentError => detail
70
+ raise Puppet::Error.new(
71
+ "Could not find group %s" % value)
72
+ rescue => detail
73
+ raise Puppet::Error.new(
74
+ "Could not find group %s: %s" % [self.should,detail])
75
+ end
76
+ if gid.nil?
77
+ raise Puppet::Error.new(
78
+ "Could not retrieve gid for %s" % @parent.name)
94
79
  end
95
80
 
96
- # Normal users will only be able to manage certain groups. Right now,
97
- # we'll just let it fail, but we should probably set things up so
98
- # that users get warned if they try to change to an unacceptable group.
99
- def sync
100
- if @is == :notfound
101
- @parent.stat(true)
102
- self.retrieve
103
-
104
- if @is == :notfound
105
- self.err "File '%s' does not exist; cannot chgrp" %
106
- @parent[:path]
107
- return nil
108
- end
109
-
110
- if self.insync?
111
- return nil
112
- end
81
+ #unless Process.uid == 0
82
+ # groups = %x{groups}.chomp.split(/\s/)
83
+ # unless groups.include?(gname)
84
+ # self.notice "Cannot chgrp: not in group %s" % gname
85
+ # raise Puppet::Error.new(
86
+ # "Cannot chgrp: not in group %s" % gname)
87
+ # end
88
+ #end
89
+
90
+ if gid.nil?
91
+ raise Puppet::Error.new(
92
+ "Nil gid for %s" % @parent.name)
93
+ else
94
+ return gid
95
+ end
96
+ end
97
+
98
+ # Normal users will only be able to manage certain groups. Right now,
99
+ # we'll just let it fail, but we should probably set things up so
100
+ # that users get warned if they try to change to an unacceptable group.
101
+ def sync
102
+ if @is == :absent
103
+ @parent.stat(true)
104
+ self.retrieve
105
+
106
+ if @is == :absent
107
+ self.info "File '%s' does not exist; cannot chgrp" %
108
+ @parent[:path]
109
+ return nil
113
110
  end
114
111
 
115
- begin
116
- # set owner to nil so it's ignored
117
- File.chown(nil,self.should,@parent[:path])
118
- rescue => detail
119
- error = Puppet::Error.new( "failed to chgrp %s to %s: %s" %
120
- [@parent[:path], self.should, detail.message])
121
- raise error
112
+ if self.insync?
113
+ return nil
122
114
  end
123
- return :inode_changed
124
115
  end
116
+
117
+ begin
118
+ # set owner to nil so it's ignored
119
+ File.chown(nil,self.should,@parent[:path])
120
+ rescue => detail
121
+ error = Puppet::Error.new( "failed to chgrp %s to %s: %s" %
122
+ [@parent[:path], self.should, detail.message])
123
+ raise error
124
+ end
125
+ return :file_changed
125
126
  end
126
127
  end
127
128
  end
128
129
 
129
- # $Id: group.rb 731 2005-10-26 04:44:25Z luke $
130
+ # $Id: group.rb 862 2006-01-31 02:07:56Z luke $