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
@@ -1,70 +1,71 @@
1
1
  module Puppet
2
- module PackagingType
2
+ Puppet.type(:package).newpkgtype(:apt, :dpkg) do
3
3
  # A derivative of DPKG; this is how most people actually manage
4
4
  # Debian boxes, and the only thing that differs is that it can
5
5
  # install packages from remote sites.
6
- module APT
7
- include DPKG
8
6
 
9
- # Install a package using 'apt-get'. This function needs to support
10
- # installing a specific version.
11
- def install
12
- should = self.should(:install)
7
+ # Install a package using 'apt-get'. This function needs to support
8
+ # installing a specific version.
9
+ def install
10
+ should = self.should(:ensure)
13
11
 
14
- str = self.name
15
- case should
16
- when true, false, Symbol
17
- # pass
18
- else
19
- # Add the package version
20
- str += "=%s" % should
21
- end
22
- cmd = "apt-get -q -y install %s" % str
12
+ str = self.name
13
+ case should
14
+ when true, false, Symbol
15
+ # pass
16
+ else
17
+ # Add the package version
18
+ str += "=%s" % should
19
+ end
20
+ cmd = "apt-get -q -y install %s" % str
23
21
 
24
- self.info "Executing %s" % cmd.inspect
25
- output = %x{#{cmd} 2>&1}
22
+ self.info "Executing %s" % cmd.inspect
23
+ output = %x{#{cmd} 2>&1}
26
24
 
27
- unless $? == 0
28
- raise Puppet::PackageError.new(output)
29
- end
25
+ unless $? == 0
26
+ raise Puppet::PackageError.new(output)
30
27
  end
28
+ end
31
29
 
32
- # What's the latest package version available?
33
- def latest
34
- cmd = "apt-cache showpkg %s" % self.name
35
- output = %x{#{cmd} 2>&1}
36
-
37
- unless $? == 0
38
- raise Puppet::PackageError.new(output)
39
- end
30
+ # What's the latest package version available?
31
+ def latest
32
+ cmd = "apt-cache showpkg %s" % self.name
33
+ output = %x{#{cmd} 2>&1}
40
34
 
41
- if output =~ /Versions:\s*\n((\n|.)+)^$/
42
- versions = $1
43
- version = versions.split(/\n/).collect { |version|
44
- if version =~ /^([^\(]+)\(/
45
- $1
46
- else
47
- self.warning "Could not match version '%s'" % version
48
- nil
49
- end
50
- }.reject { |vers| vers.nil? }.sort[-1]
35
+ unless $? == 0
36
+ raise Puppet::PackageError.new(output)
37
+ end
51
38
 
52
- unless version
53
- self.debug "No latest version"
54
- if Puppet[:debug]
55
- print output
56
- end
39
+ if output =~ /Versions:\s*\n((\n|.)+)^$/
40
+ versions = $1
41
+ version = versions.split(/\n/).collect { |version|
42
+ if version =~ /^([^\(]+)\(/
43
+ $1
44
+ else
45
+ self.warning "Could not match version '%s'" % version
46
+ nil
57
47
  end
48
+ }.reject { |vers| vers.nil? }.sort[-1]
58
49
 
59
- return version
60
- else
61
- self.err "Could not match string"
50
+ unless version
51
+ self.debug "No latest version"
52
+ if Puppet[:debug]
53
+ print output
54
+ end
62
55
  end
63
- end
64
56
 
65
- def update
66
- self.install
57
+ return version
58
+ else
59
+ self.err "Could not match string"
67
60
  end
68
61
  end
62
+
63
+ def update
64
+ self.install
65
+ end
66
+
67
+ def versionable?
68
+ true
69
+ end
69
70
  end
70
71
  end
@@ -0,0 +1,82 @@
1
+ module Puppet
2
+ Puppet.type(:package).newpkgtype(:bsd) do
3
+ def install
4
+ should = self.should(:ensure)
5
+
6
+ unless self[:source]
7
+ raise Puppet::Error,
8
+ "You must specify a package source for BSD packages"
9
+ end
10
+
11
+ cmd = "pkg_add #{self[:source]}"
12
+
13
+ self.info "Executing %s" % cmd.inspect
14
+ output = %x{#{cmd} 2>&1}
15
+
16
+ unless $? == 0
17
+ raise Puppet::PackageError.new(output)
18
+ end
19
+ end
20
+
21
+ def query
22
+ hash = {}
23
+ # list out our specific package
24
+ info = %x{pkg_info #{self.name} 2>/dev/null}
25
+
26
+ # Search for the version info
27
+ if info =~ /Information for #{self.name}-(\S+)/
28
+ hash[:version] = $1
29
+ hash[:ensure] = :present
30
+ else
31
+ return nil
32
+ end
33
+
34
+ # And the description
35
+ if info =~ /Comment:\s*\n(.+)/
36
+ hash[:description] = $1
37
+ end
38
+
39
+ return hash
40
+ end
41
+
42
+ def list
43
+ packages = []
44
+
45
+ # list out all of the packages
46
+ open("| pkg_info -a") { |process|
47
+ # our regex for matching dpkg output
48
+ regex = %r{^(\S+)-(\d\S+)\s+(.+)}
49
+ fields = [:name, :version, :description]
50
+ hash = {}
51
+
52
+ # now turn each returned line into a package object
53
+ process.each { |line|
54
+ if match = regex.match(line)
55
+ hash.clear
56
+
57
+ fields.zip(match.captures) { |field,value|
58
+ hash[field] = value
59
+ }
60
+ packages.push Puppet.type(:package).installedpkg(hash)
61
+ else
62
+ raise Puppet::DevError,
63
+ "Failed to match dpkg line %s" % line
64
+ end
65
+ }
66
+ }
67
+ ENV["COLUMNS"] = oldcol
68
+
69
+ return packages
70
+ end
71
+
72
+ def uninstall
73
+ cmd = "pkg_delete %s" % self.name
74
+ output = %x{#{cmd} 2>&1}
75
+ if $? != 0
76
+ raise Puppet::PackageError.new(output)
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ # $Id: bsd.rb 836 2006-01-17 22:11:51Z luke $
@@ -1,108 +1,105 @@
1
1
  module Puppet
2
- module PackagingType
3
- # The packaging system for Debian systems.
4
- module DPKG
5
- def query
6
- packages = []
7
-
8
- # dpkg only prints as many columns as you have available
9
- # which means we don't get all of the info
10
- # stupid stupid
11
- oldcol = ENV["COLUMNS"]
12
- ENV["COLUMNS"] = "500"
13
- fields = [:desired, :status, :error, :name, :version, :description]
2
+ Puppet.type(:package).newpkgtype(:dpkg) do
3
+ def query
4
+ packages = []
5
+
6
+ # dpkg only prints as many columns as you have available
7
+ # which means we don't get all of the info
8
+ # stupid stupid
9
+ oldcol = ENV["COLUMNS"]
10
+ ENV["COLUMNS"] = "500"
11
+ fields = [:desired, :status, :error, :name, :version, :description]
12
+
13
+ hash = {}
14
+ # list out our specific package
15
+ open("| dpkg -l %s 2>/dev/null" % self.name) { |process|
16
+ # our regex for matching dpkg output
17
+ regex = %r{^(.)(.)(.)\s(\S+)\s+(\S+)\s+(.+)$}
18
+
19
+ # we only want the last line
20
+ lines = process.readlines
21
+ # we've got four header lines, so we should expect all of those
22
+ # plus our output
23
+ if lines.length < 5
24
+ return nil
25
+ end
26
+
27
+ line = lines[-1]
28
+
29
+ if match = regex.match(line)
30
+ fields.zip(match.captures) { |field,value|
31
+ hash[field] = value
32
+ }
33
+ #packages.push Puppet.type(:package).installedpkg(hash)
34
+ else
35
+ raise Puppet::DevError,
36
+ "failed to match dpkg line %s" % line
37
+ end
38
+ }
39
+ ENV["COLUMNS"] = oldcol
40
+
41
+ if hash[:error] != " "
42
+ raise Puppet::PackageError.new(
43
+ "Package %s, version %s is in error state: %s" %
44
+ [hash[:name], hash[:version], hash[:error]]
45
+ )
46
+ end
14
47
 
48
+ if hash[:status] == "i"
49
+ hash[:ensure] = :present
50
+ else
51
+ hash[:ensure] = :absent
52
+ end
53
+
54
+ return hash
55
+ end
56
+
57
+ def list
58
+ packages = []
59
+
60
+ # dpkg only prints as many columns as you have available
61
+ # which means we don't get all of the info
62
+ # stupid stupid
63
+ oldcol = ENV["COLUMNS"]
64
+ ENV["COLUMNS"] = "500"
65
+
66
+ # list out all of the packages
67
+ open("| dpkg -l") { |process|
68
+ # our regex for matching dpkg output
69
+ regex = %r{^(\S+)\s+(\S+)\s+(\S+)\s+(.+)$}
70
+ fields = [:status, :name, :absent, :description]
15
71
  hash = {}
16
- # list out our specific package
17
- open("| dpkg -l %s 2>/dev/null" % self.name) { |process|
18
- # our regex for matching dpkg output
19
- regex = %r{^(.)(.)(.)\s(\S+)\s+(\S+)\s+(.+)$}
20
-
21
- # we only want the last line
22
- lines = process.readlines
23
- # we've got four header lines, so we should expect all of those
24
- # plus our output
25
- if lines.length < 5
26
- return nil
27
- end
28
72
 
29
- line = lines[-1]
73
+ 5.times { process.gets } # throw away the header
30
74
 
75
+ # now turn each returned line into a package object
76
+ process.each { |line|
31
77
  if match = regex.match(line)
78
+ hash.clear
79
+
32
80
  fields.zip(match.captures) { |field,value|
33
81
  hash[field] = value
34
82
  }
35
- #packages.push Puppet::Type::Package.installedpkg(hash)
83
+ packages.push Puppet.type(:package).installedpkg(hash)
36
84
  else
37
85
  raise Puppet::DevError,
38
- "failed to match dpkg line %s" % line
86
+ "Failed to match dpkg line %s" % line
39
87
  end
40
88
  }
41
- ENV["COLUMNS"] = oldcol
42
-
43
- if hash[:error] != " "
44
- raise Puppet::PackageError.new(
45
- "Package %s, version %s is in error state: %s" %
46
- [hash[:name], hash[:install], hash[:error]]
47
- )
48
- end
49
-
50
- if hash[:status] == "i"
51
- hash[:install] = hash[:version]
52
- else
53
- hash[:install] = :notinstalled
54
- end
55
-
56
- return hash
57
- end
58
-
59
- def list
60
- packages = []
61
-
62
- # dpkg only prints as many columns as you have available
63
- # which means we don't get all of the info
64
- # stupid stupid
65
- oldcol = ENV["COLUMNS"]
66
- ENV["COLUMNS"] = "500"
67
-
68
- # list out all of the packages
69
- open("| dpkg -l") { |process|
70
- # our regex for matching dpkg output
71
- regex = %r{^(\S+)\s+(\S+)\s+(\S+)\s+(.+)$}
72
- fields = [:status, :name, :install, :description]
73
- hash = {}
74
-
75
- 5.times { process.gets } # throw away the header
76
-
77
- # now turn each returned line into a package object
78
- process.each { |line|
79
- if match = regex.match(line)
80
- hash.clear
81
-
82
- fields.zip(match.captures) { |field,value|
83
- hash[field] = value
84
- }
85
- packages.push Puppet::Type::Package.installedpkg(hash)
86
- else
87
- raise Puppet::DevError,
88
- "Failed to match dpkg line %s" % line
89
- end
90
- }
91
- }
92
- ENV["COLUMNS"] = oldcol
89
+ }
90
+ ENV["COLUMNS"] = oldcol
93
91
 
94
- return packages
95
- end
92
+ return packages
93
+ end
96
94
 
97
- def remove
98
- cmd = "dpkg -r %s" % self.name
99
- output = %x{#{cmd} 2>&1}
100
- if $? != 0
101
- raise Puppet::PackageError.new(output)
102
- end
95
+ def uninstall
96
+ cmd = "dpkg -r %s" % self.name
97
+ output = %x{#{cmd} 2>&1}
98
+ if $? != 0
99
+ raise Puppet::PackageError.new(output)
103
100
  end
104
101
  end
105
102
  end
106
103
  end
107
104
 
108
- # $Id: dpkg.rb 707 2005-09-27 19:59:36Z luke $
105
+ # $Id: dpkg.rb 832 2006-01-17 07:11:50Z luke $
@@ -1,80 +1,84 @@
1
1
  module Puppet
2
- module PackagingType
3
- module RPM
4
- def query
5
- fields = {
6
- :name => "NAME",
7
- :install => "VERSION",
8
- :description => "DESCRIPTION"
9
- }
10
-
11
- cmd = "rpm -q #{self.name} --qf '%s\n'" %
12
- "%{NAME} %{VERSION}-%{RELEASE}"
2
+ Puppet.type(:package).newpkgtype(:rpm) do
3
+ def query
4
+ fields = {
5
+ :name => "NAME",
6
+ :version => "VERSION",
7
+ :description => "DESCRIPTION"
8
+ }
13
9
 
14
- # list out all of the packages
15
- output = %x{#{cmd} 2>/dev/null}.chomp
10
+ cmd = "rpm -q #{self.name} --qf '%s\n'" %
11
+ "%{NAME} %{VERSION}-%{RELEASE}"
16
12
 
17
- if $? != 0
18
- return nil
19
- end
13
+ self.debug "Executing %s" % cmd.inspect
14
+ # list out all of the packages
15
+ output = %x{#{cmd} 2>/dev/null}.chomp
20
16
 
21
- regex = %r{^(\S+)\s+(\S+)}
22
- #fields = [:name, :install, :description]
23
- fields = [:name, :install]
24
- hash = {}
25
- if match = regex.match(output)
26
- fields.zip(match.captures) { |field,value|
27
- hash[field] = value
28
- }
29
- else
30
- raise Puppet::DevError,
31
- "Failed to match rpm output '%s'" %
32
- output
33
- end
17
+ if $? != 0
18
+ #if Puppet[:debug]
19
+ # puts output
20
+ #end
21
+ return nil
22
+ end
34
23
 
35
- return hash
24
+ regex = %r{^(\S+)\s+(\S+)}
25
+ #fields = [:name, :ensure, :description]
26
+ fields = [:name, :version]
27
+ hash = {}
28
+ if match = regex.match(output)
29
+ fields.zip(match.captures) { |field,value|
30
+ hash[field] = value
31
+ }
32
+ else
33
+ raise Puppet::DevError,
34
+ "Failed to match rpm output '%s'" %
35
+ output
36
36
  end
37
37
 
38
- def list
39
- packages = []
38
+ hash[:ensure] = :present
40
39
 
41
- # list out all of the packages
42
- open("| rpm -q -a --qf '%{NAME} %{VERSION}\n'") { |process|
43
- # our regex for matching dpkg output
44
- regex = %r{^(\S+)\s+(\S+)}
45
- fields = [:name, :install]
46
- hash = {}
40
+ return hash
41
+ end
47
42
 
48
- # now turn each returned line into a package object
49
- process.each { |line|
50
- if match = regex.match(line)
51
- hash.clear
43
+ def list
44
+ packages = []
52
45
 
53
- fields.zip(match.captures) { |field,value|
54
- hash[field] = value
55
- }
56
- packages.push Puppet::Type::Package.installedpkg(hash)
57
- else
58
- raise "failed to match rpm line %s" % line
59
- end
60
- }
46
+ # list out all of the packages
47
+ open("| rpm -q -a --qf '%{NAME} %{VERSION}\n'") { |process|
48
+ # our regex for matching dpkg output
49
+ regex = %r{^(\S+)\s+(\S+)}
50
+ fields = [:name, :ensure]
51
+ hash = {}
52
+
53
+ # now turn each returned line into a package object
54
+ process.each { |line|
55
+ if match = regex.match(line)
56
+ hash.clear
57
+
58
+ fields.zip(match.captures) { |field,value|
59
+ hash[field] = value
60
+ }
61
+ packages.push Puppet.type(:package).installedpkg(hash)
62
+ else
63
+ raise "failed to match rpm line %s" % line
64
+ end
61
65
  }
66
+ }
62
67
 
63
- return packages
64
- end
68
+ return packages
69
+ end
65
70
 
66
- # we need package retrieval mechanisms before we can have package
67
- # installation mechanisms...
68
- #type.install = proc { |pkg|
69
- # raise "installation not implemented yet"
70
- #}
71
+ # we need package retrieval mechanisms before we can have package
72
+ # installation mechanisms...
73
+ #type.install = proc { |pkg|
74
+ # raise "installation not implemented yet"
75
+ #}
71
76
 
72
- def remove
73
- cmd = "rpm -e %s" % self.name
74
- output = %x{#{cmd}}
75
- if $? != 0
76
- raise output
77
- end
77
+ def uninstall
78
+ cmd = "rpm -e %s" % self.name
79
+ output = %x{#{cmd}}
80
+ if $? != 0
81
+ raise output
78
82
  end
79
83
  end
80
84
  end