puppet 0.24.4 → 0.24.5

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 (316) hide show
  1. data/CHANGELOG +170 -0
  2. data/Rakefile +6 -4
  3. data/bin/filebucket +3 -2
  4. data/bin/puppet +7 -4
  5. data/bin/puppetca +32 -14
  6. data/bin/puppetd +12 -34
  7. data/bin/puppetmasterd +3 -2
  8. data/bin/puppetrun +5 -43
  9. data/bin/ralsh +2 -2
  10. data/conf/debian/README.source +2 -0
  11. data/conf/debian/TODO.Debian +1 -0
  12. data/conf/debian/changelog +257 -0
  13. data/conf/debian/compat +1 -0
  14. data/conf/debian/control +45 -0
  15. data/conf/debian/copyright +17 -0
  16. data/conf/debian/docs +1 -0
  17. data/conf/debian/fileserver.conf +12 -0
  18. data/conf/debian/puppet.NEWS +63 -0
  19. data/conf/debian/puppet.conf +8 -0
  20. data/conf/debian/puppet.dirs +7 -0
  21. data/conf/debian/puppet.files +6 -0
  22. data/conf/debian/puppet.init +64 -0
  23. data/conf/debian/puppet.logrotate +11 -0
  24. data/conf/debian/puppet.postinst +9 -0
  25. data/conf/debian/puppet.postrm +21 -0
  26. data/conf/debian/puppet.preinst +25 -0
  27. data/conf/debian/puppetmaster.files +4 -0
  28. data/conf/debian/puppetmaster.init +58 -0
  29. data/conf/debian/rules +115 -0
  30. data/conf/debian/watch +2 -0
  31. data/conf/gentoo/init.d/puppet +1 -1
  32. data/conf/gentoo/init.d/puppetmaster +32 -31
  33. data/conf/redhat/client.init +10 -2
  34. data/conf/redhat/puppet.spec +4 -1
  35. data/conf/redhat/server.init +9 -1
  36. data/examples/{code/allatonce → allatonce} +0 -0
  37. data/examples/{code/assignments → assignments} +0 -0
  38. data/examples/{code/components → components} +0 -0
  39. data/examples/{root/etc → etc}/init.d/sleeper +0 -0
  40. data/examples/{root/etc → etc}/otherfile +0 -0
  41. data/examples/{root/etc → etc}/puppet/fileserver.conf +0 -0
  42. data/examples/{root/etc → etc}/puppet/namespaceauth.conf +0 -0
  43. data/examples/{root/etc → etc}/puppet/puppet.conf +0 -0
  44. data/examples/{root/etc → etc}/puppet/tagmail.conf +0 -0
  45. data/examples/{code/execs → execs} +0 -0
  46. data/examples/{code/file.bl → file.bl} +0 -0
  47. data/examples/{code/filedefaults → filedefaults} +0 -0
  48. data/examples/{code/fileparsing → fileparsing} +0 -0
  49. data/examples/{code/filerecursion → filerecursion} +0 -0
  50. data/examples/{code/functions → functions} +0 -0
  51. data/examples/{code/groups → groups} +0 -0
  52. data/examples/{code/head → head} +0 -0
  53. data/examples/{code/importing → importing} +0 -0
  54. data/examples/{code/mac_automount.pp → mac_automount.pp} +0 -0
  55. data/examples/{code/mac_dscl.pp → mac_dscl.pp} +0 -0
  56. data/examples/{code/mac_dscl_revert.pp → mac_dscl_revert.pp} +0 -0
  57. data/examples/{code/mac_netinfo.pp → mac_netinfo.pp} +0 -0
  58. data/examples/{code/mac_pkgdmg.pp → mac_pkgdmg.pp} +0 -0
  59. data/examples/{code/modules → modules}/sample-module.pp +0 -0
  60. data/examples/{code/modules → modules}/sample-module/README.txt +0 -0
  61. data/examples/{code/modules → modules}/sample-module/lib/puppet/parser/functions/hostname_to_dn.rb +0 -0
  62. data/examples/{code/modules → modules}/sample-module/manifests/init.pp +0 -0
  63. data/examples/{code/modules → modules}/sample-module/templates/sample.erb +0 -0
  64. data/examples/{code/nodes → nodes} +0 -0
  65. data/examples/{code/one → one} +0 -0
  66. data/examples/{code/relationships → relationships} +0 -0
  67. data/examples/{code/selectors → selectors} +0 -0
  68. data/examples/{code/simpletests → simpletests} +0 -0
  69. data/examples/{code/svncommit → svncommit} +0 -0
  70. data/ext/autotest/Rakefile +8 -0
  71. data/ext/autotest/config +43 -0
  72. data/ext/autotest/readme.rst +16 -0
  73. data/{examples/root → ext}/bin/sleeper +1 -1
  74. data/ext/emacs/puppet-mode.el +246 -184
  75. data/ext/ldap/puppet.schema +7 -2
  76. data/ext/module_puppet +4 -3
  77. data/ext/nagios/check_puppet.rb +117 -0
  78. data/ext/puppetlast +40 -0
  79. data/install.rb +12 -3
  80. data/lib/puppet.rb +1 -44
  81. data/lib/puppet/defaults.rb +23 -10
  82. data/lib/puppet/dsl.rb +2 -2
  83. data/lib/puppet/executables/client/certhandler.rb +77 -0
  84. data/lib/puppet/external/nagios.rb +1 -1
  85. data/lib/puppet/external/nagios/base.rb +60 -46
  86. data/lib/puppet/file_serving/indirection_hooks.rb +4 -2
  87. data/lib/puppet/file_serving/metadata.rb +0 -9
  88. data/lib/puppet/file_serving/terminus_helper.rb +4 -4
  89. data/lib/puppet/indirector.rb +26 -28
  90. data/lib/puppet/indirector/catalog/compiler.rb +6 -28
  91. data/lib/puppet/indirector/checksum/file.rb +2 -2
  92. data/lib/puppet/indirector/direct_file_server.rb +7 -7
  93. data/lib/puppet/indirector/envelope.rb +13 -0
  94. data/lib/puppet/indirector/exec.rb +2 -2
  95. data/lib/puppet/indirector/facts/facter.rb +2 -2
  96. data/lib/puppet/indirector/file.rb +17 -14
  97. data/lib/puppet/indirector/file_metadata/file.rb +2 -2
  98. data/lib/puppet/indirector/file_server.rb +14 -14
  99. data/lib/puppet/indirector/indirection.rb +113 -48
  100. data/lib/puppet/indirector/ldap.rb +13 -25
  101. data/lib/puppet/indirector/memory.rb +7 -7
  102. data/lib/puppet/indirector/module_files.rb +14 -14
  103. data/lib/puppet/indirector/node/exec.rb +3 -10
  104. data/lib/puppet/indirector/node/ldap.rb +138 -41
  105. data/lib/puppet/indirector/node/plain.rb +1 -8
  106. data/lib/puppet/indirector/node/rest.rb +1 -1
  107. data/lib/puppet/indirector/plain.rb +2 -2
  108. data/lib/puppet/indirector/report/processor.rb +2 -2
  109. data/lib/puppet/indirector/request.rb +42 -0
  110. data/lib/puppet/indirector/rest.rb +51 -3
  111. data/lib/puppet/indirector/terminus.rb +0 -27
  112. data/lib/puppet/indirector/yaml.rb +12 -17
  113. data/lib/puppet/metatype/attributes.rb +3 -7
  114. data/lib/puppet/metatype/evaluation.rb +2 -2
  115. data/lib/puppet/module.rb +6 -2
  116. data/lib/puppet/network/client/master.rb +29 -81
  117. data/lib/puppet/network/handler/master.rb +12 -43
  118. data/lib/puppet/network/http.rb +8 -6
  119. data/lib/puppet/network/http/handler.rb +42 -32
  120. data/lib/puppet/network/http/mongrel.rb +8 -9
  121. data/lib/puppet/network/http/mongrel/rest.rb +42 -15
  122. data/lib/puppet/network/http/webrick.rb +27 -16
  123. data/lib/puppet/network/http/webrick/rest.rb +38 -14
  124. data/lib/puppet/network/http_pool.rb +3 -2
  125. data/lib/puppet/network/server.rb +24 -22
  126. data/lib/puppet/network/xmlrpc/client.rb +6 -1
  127. data/lib/puppet/node.rb +38 -79
  128. data/lib/puppet/node/catalog.rb +9 -0
  129. data/lib/puppet/node/facts.rb +9 -1
  130. data/lib/puppet/parser/ast/function.rb +1 -1
  131. data/lib/puppet/parser/collector.rb +6 -0
  132. data/lib/puppet/parser/compiler.rb +1 -1
  133. data/lib/puppet/parser/functions.rb +25 -1
  134. data/lib/puppet/parser/interpreter.rb +2 -17
  135. data/lib/puppet/parser/parser.rb +4 -4
  136. data/lib/puppet/parser/parser_support.rb +6 -2
  137. data/lib/puppet/parser/resource.rb +6 -0
  138. data/lib/puppet/parser/templatewrapper.rb +9 -0
  139. data/lib/puppet/pgraph.rb +1 -1
  140. data/lib/puppet/property.rb +0 -1
  141. data/lib/puppet/provider.rb +9 -95
  142. data/lib/puppet/provider/confine.rb +77 -0
  143. data/lib/puppet/provider/confine/exists.rb +22 -0
  144. data/lib/puppet/provider/confine/false.rb +19 -0
  145. data/lib/puppet/provider/confine/feature.rb +17 -0
  146. data/lib/puppet/provider/confine/true.rb +20 -0
  147. data/lib/puppet/provider/confine/variable.rb +42 -0
  148. data/lib/puppet/provider/confine_collection.rb +47 -0
  149. data/lib/puppet/provider/confiner.rb +20 -0
  150. data/lib/puppet/provider/cron/crontab.rb +6 -2
  151. data/lib/puppet/provider/group/groupadd.rb +1 -1
  152. data/lib/puppet/provider/group/ldap.rb +48 -0
  153. data/lib/puppet/provider/ldap.rb +137 -0
  154. data/lib/puppet/provider/nameservice.rb +1 -2
  155. data/lib/puppet/provider/nameservice/objectadd.rb +2 -5
  156. data/lib/puppet/provider/package/dpkg.rb +16 -1
  157. data/lib/puppet/provider/package/freebsd.rb +15 -4
  158. data/lib/puppet/provider/package/gem.rb +33 -12
  159. data/lib/puppet/provider/package/pkgdmg.rb +1 -60
  160. data/lib/puppet/provider/package/ports.rb +6 -1
  161. data/lib/puppet/provider/package/rpm.rb +14 -13
  162. data/lib/puppet/provider/package/urpmi.rb +3 -3
  163. data/lib/puppet/provider/service/base.rb +4 -4
  164. data/lib/puppet/provider/service/debian.rb +1 -1
  165. data/lib/puppet/provider/service/init.rb +5 -3
  166. data/lib/puppet/provider/service/redhat.rb +35 -7
  167. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +69 -0
  168. data/lib/puppet/provider/user/ldap.rb +133 -0
  169. data/lib/puppet/provider/user/useradd.rb +1 -1
  170. data/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb +14 -14
  171. data/lib/puppet/rails/database/schema.rb +9 -0
  172. data/lib/puppet/rails/resource.rb +1 -0
  173. data/lib/puppet/reference/providers.rb +8 -2
  174. data/lib/puppet/reference/report.rb +23 -0
  175. data/lib/puppet/reports/rrdgraph.rb +4 -2
  176. data/lib/puppet/sslcertificates/ca.rb +9 -4
  177. data/lib/puppet/sslcertificates/support.rb +26 -2
  178. data/lib/puppet/transaction.rb +11 -16
  179. data/lib/puppet/transaction/change.rb +94 -0
  180. data/lib/puppet/transaction/event.rb +21 -0
  181. data/lib/puppet/transaction/report.rb +4 -0
  182. data/lib/puppet/type.rb +0 -2
  183. data/lib/puppet/type/file/ensure.rb +0 -5
  184. data/lib/puppet/type/file/group.rb +13 -7
  185. data/lib/puppet/type/file/source.rb +8 -15
  186. data/lib/puppet/type/file/target.rb +2 -0
  187. data/lib/puppet/type/group.rb +1 -1
  188. data/lib/puppet/type/mount.rb +4 -2
  189. data/lib/puppet/type/nagios_hostescalation.rb +3 -0
  190. data/lib/puppet/type/nagios_servicegroup.rb +3 -0
  191. data/lib/puppet/type/ssh_authorized_key.rb +56 -0
  192. data/lib/puppet/type/user.rb +3 -0
  193. data/lib/puppet/type/yumrepo.rb +0 -1
  194. data/lib/puppet/util.rb +1 -1
  195. data/lib/puppet/util/ldap.rb +5 -0
  196. data/lib/puppet/util/ldap/connection.rb +69 -0
  197. data/lib/puppet/util/ldap/generator.rb +45 -0
  198. data/lib/puppet/util/ldap/manager.rb +281 -0
  199. data/lib/puppet/util/posix.rb +2 -2
  200. data/lib/puppet/util/resource_template.rb +61 -0
  201. data/lib/puppet/util/settings.rb +63 -3
  202. data/lib/puppet/util/storage.rb +4 -0
  203. data/lib/puppet/util/warnings.rb +7 -0
  204. data/man/man8/filebucket.8 +116 -0
  205. data/man/man8/pi.8 +34 -0
  206. data/man/man8/puppet.8 +78 -0
  207. data/man/man8/puppet.conf.8 +1747 -0
  208. data/man/man8/puppetca.8 +118 -0
  209. data/man/man8/puppetd.8 +184 -0
  210. data/man/man8/puppetdoc.8 +62 -0
  211. data/man/man8/puppetmasterd.8 +87 -0
  212. data/man/man8/puppetrun.8 +151 -0
  213. data/man/man8/ralsh.8 +135 -0
  214. data/test/README +24 -0
  215. data/test/certmgr/support.rb +28 -1
  216. data/test/data/failers/badclassnoparam +10 -0
  217. data/test/data/failers/badclassparam +10 -0
  218. data/test/data/failers/badcompnoparam +9 -0
  219. data/test/data/failers/badcompparam +9 -0
  220. data/test/data/failers/badtypeparam +3 -0
  221. data/test/data/failers/noobjectrvalue +1 -0
  222. data/test/data/providers/cron/crontab.allthree +17 -0
  223. data/test/data/providers/cron/crontab.envNcomment +12 -0
  224. data/test/data/providers/cron/crontab.envNname +11 -0
  225. data/test/data/providers/cron/crontab.multirecords +12 -0
  226. data/test/data/providers/cron/crontab_collections.yaml +44 -0
  227. data/test/data/providers/cron/crontab_multiple_with_env.yaml +54 -0
  228. data/test/data/providers/cron/crontab_sample_records.yaml +272 -0
  229. data/test/data/providers/cron/examples/freebsd +2 -0
  230. data/test/data/providers/cron/examples/one +14 -0
  231. data/test/data/providers/cron/examples/openbsd +20 -0
  232. data/test/data/providers/package/testpackages.yaml +65 -0
  233. data/test/data/providers/ssh_authorized_key/parsed/authorized_keys +5 -0
  234. data/test/data/reports/1.yaml +108 -0
  235. data/test/data/reports/2.yaml +108 -0
  236. data/test/data/reports/tagmail_failers.conf +3 -0
  237. data/test/data/reports/tagmail_passers.conf +30 -0
  238. data/test/data/snippets/aliastest.pp +16 -0
  239. data/test/data/snippets/argumentdefaults +14 -0
  240. data/test/data/snippets/casestatement.pp +58 -0
  241. data/test/data/snippets/classheirarchy.pp +15 -0
  242. data/test/data/snippets/classincludes.pp +17 -0
  243. data/test/data/snippets/classpathtest +11 -0
  244. data/test/data/snippets/collection.pp +10 -0
  245. data/test/data/snippets/collection_within_virtual_definitions.pp +20 -0
  246. data/test/data/snippets/componentmetaparams.pp +11 -0
  247. data/test/data/snippets/componentrequire.pp +8 -0
  248. data/test/data/snippets/deepclassheirarchy.pp +23 -0
  249. data/test/data/snippets/defineoverrides.pp +17 -0
  250. data/test/data/snippets/emptyclass.pp +9 -0
  251. data/test/data/snippets/emptyexec.pp +3 -0
  252. data/test/data/snippets/falsevalues.pp +3 -0
  253. data/test/data/snippets/filecreate +11 -0
  254. data/test/data/snippets/fqdefinition.pp +5 -0
  255. data/test/data/snippets/fqparents.pp +11 -0
  256. data/test/data/snippets/implicititeration +15 -0
  257. data/test/data/snippets/multipleinstances +7 -0
  258. data/test/data/snippets/multisubs.pp +13 -0
  259. data/test/data/snippets/namevartest +9 -0
  260. data/test/data/snippets/scopetest +13 -0
  261. data/test/data/snippets/selectorvalues.pp +42 -0
  262. data/test/data/snippets/simpledefaults +5 -0
  263. data/test/data/snippets/simpleselector +38 -0
  264. data/test/data/snippets/singleary.pp +19 -0
  265. data/test/data/snippets/singlequote.pp +11 -0
  266. data/test/data/snippets/singleselector.pp +22 -0
  267. data/test/data/snippets/subclass_name_duplication.pp +11 -0
  268. data/test/data/snippets/tag.pp +9 -0
  269. data/test/data/snippets/tagged.pp +35 -0
  270. data/test/data/snippets/virtualresources.pp +14 -0
  271. data/test/data/types/hosts/1 +3 -0
  272. data/test/data/types/hosts/2 +13 -0
  273. data/test/data/types/hosts/solaris +5 -0
  274. data/test/data/types/mailalias/file1 +183 -0
  275. data/test/data/types/mount/freebsd.fstab +7 -0
  276. data/test/data/types/mount/linux.fstab +11 -0
  277. data/test/data/types/mount/solaris.fstab +11 -0
  278. data/test/data/types/port/1 +533 -0
  279. data/test/data/types/port/darwin +11866 -0
  280. data/test/data/types/ssh_authorized_key/1 +2 -0
  281. data/test/data/types/sshkey/1 +21 -0
  282. data/test/data/types/yumrepos/fedora-devel.repo +26 -0
  283. data/test/data/types/yumrepos/fedora.repo +9 -0
  284. data/test/language/parser.rb +8 -1
  285. data/test/lib/puppettest/runnable_test.rb +3 -0
  286. data/test/lib/puppettest/support/utils.rb +1 -1
  287. data/test/lib/rake/puppet_testtask.rb +3 -0
  288. data/test/lib/stubba.rb +1 -1
  289. data/test/network/client/ca.rb +1 -0
  290. data/test/network/client/master.rb +13 -127
  291. data/test/network/handler/master.rb +61 -80
  292. data/test/other/provider.rb +0 -45
  293. data/test/other/transactions.rb +53 -15
  294. data/test/rails/host.rb +0 -37
  295. data/test/ral/providers/cron/crontab.rb +32 -3
  296. data/test/ral/providers/provider.rb +28 -7
  297. data/test/ral/type/filesources.rb +2 -18
  298. data/test/ral/type/sshkey.rb +0 -1
  299. data/test/ral/type/user.rb +6 -0
  300. data/test/test +241 -0
  301. metadata +289 -113
  302. data/examples/root/etc/configfile +0 -0
  303. data/examples/root/etc/debian-passwd +0 -29
  304. data/examples/root/etc/debian-syslog.conf +0 -71
  305. data/lib/puppet/event.rb +0 -28
  306. data/lib/puppet/network/handler/configuration.rb +0 -184
  307. data/lib/puppet/network/http/mongrel/xmlrpc.rb +0 -4
  308. data/lib/puppet/network/http/webrick/xmlrpc.rb +0 -4
  309. data/lib/puppet/propertychange.rb +0 -141
  310. data/lib/puppet/provider/interface/redhat.rb +0 -250
  311. data/lib/puppet/provider/interface/sunos.rb +0 -133
  312. data/lib/puppet/type/interface.rb +0 -60
  313. data/lib/puppet/util/variables.rb +0 -38
  314. data/test/network/handler/configuration.rb +0 -160
  315. data/test/other/propertychange.rb +0 -140
  316. data/test/util/loadedfile.rb +0 -121
@@ -128,20 +128,6 @@ class Puppet::Indirector::Terminus
128
128
  end
129
129
  end
130
130
 
131
- # Do we have an update for this object? This compares the provided version
132
- # to our version, and returns true if our version is at least as high
133
- # as the asked-about version.
134
- def has_most_recent?(key, vers)
135
- raise Puppet::DevError.new("Cannot check update status when no 'version' method is defined") unless respond_to?(:version)
136
-
137
- if existing_version = version(key)
138
- #puts "%s fresh: %s (%s vs %s)" % [self.name, (existing_version.to_f >= vers.to_f).inspect, existing_version.to_f, vers.to_f]
139
- existing_version.to_f >= vers.to_f
140
- else
141
- false
142
- end
143
- end
144
-
145
131
  def indirection
146
132
  self.class.indirection
147
133
  end
@@ -163,17 +149,4 @@ class Puppet::Indirector::Terminus
163
149
  def terminus_type
164
150
  self.class.terminus_type
165
151
  end
166
-
167
- # Provide a default method for retrieving an instance's version.
168
- # By default, just find the resource and get its version. Individual
169
- # terminus types can override this method to provide custom definitions of
170
- # 'versions'.
171
- def version(name)
172
- raise Puppet::DevError.new("Cannot retrieve an instance's version without a :find method") unless respond_to?(:find)
173
- if instance = find(name)
174
- instance.version
175
- else
176
- nil
177
- end
178
- end
179
152
  end
@@ -3,23 +3,22 @@ require 'puppet/indirector/terminus'
3
3
  # The base class for YAML indirection termini.
4
4
  class Puppet::Indirector::Yaml < Puppet::Indirector::Terminus
5
5
  # Read a given name's file in and convert it from YAML.
6
- def find(name)
7
- raise ArgumentError.new("You must specify the name of the object to retrieve") unless name
8
- file = path(name)
6
+ def find(request)
7
+ file = path(request.key)
9
8
  return nil unless FileTest.exist?(file)
10
9
 
11
10
  begin
12
11
  return from_yaml(File.read(file))
13
12
  rescue => detail
14
- raise Puppet::Error, "Could not read YAML data for %s %s: %s" % [indirection.name, name, detail]
13
+ raise Puppet::Error, "Could not read YAML data for %s %s: %s" % [indirection.name, request.key, detail]
15
14
  end
16
15
  end
17
16
 
18
17
  # Convert our object to YAML and store it to the disk.
19
- def save(object)
20
- raise ArgumentError.new("You can only save objects that respond to :name") unless object.respond_to?(:name)
18
+ def save(request)
19
+ raise ArgumentError.new("You can only save objects that respond to :name") unless request.instance.respond_to?(:name)
21
20
 
22
- file = path(object.name)
21
+ file = path(request.key)
23
22
 
24
23
  basedir = File.dirname(file)
25
24
 
@@ -29,15 +28,16 @@ class Puppet::Indirector::Yaml < Puppet::Indirector::Terminus
29
28
  end
30
29
 
31
30
  begin
32
- File.open(file, "w", 0660) { |f| f.print to_yaml(object) }
31
+ File.open(file, "w", 0660) { |f| f.print to_yaml(request.instance) }
33
32
  rescue TypeError => detail
34
- Puppet.err "Could not save %s %s: %s" % [self.name, object.name, detail]
33
+ Puppet.err "Could not save %s %s: %s" % [self.name, request.key, detail]
35
34
  end
36
35
  end
37
36
 
38
- def version(name)
39
- return nil unless FileTest.exist?(path(name))
40
- return File.stat(path(name)).mtime
37
+ # Return the path to a given node's file.
38
+ def path(name)
39
+ base = (Puppet[:name] == "puppetmasterd") ? Puppet[:yamldir] : Puppet[:clientyamldir]
40
+ File.join(base, self.class.indirection_name.to_s, name.to_s + ".yaml")
41
41
  end
42
42
 
43
43
  private
@@ -49,9 +49,4 @@ class Puppet::Indirector::Yaml < Puppet::Indirector::Terminus
49
49
  def to_yaml(object)
50
50
  YAML.dump(object)
51
51
  end
52
-
53
- # Return the path to a given node's file.
54
- def path(name)
55
- File.join(Puppet[:yamldir], self.class.indirection_name.to_s, name.to_s + ".yaml")
56
- end
57
52
  end
@@ -477,13 +477,9 @@ class Puppet::Type
477
477
  end
478
478
 
479
479
  if obj = @parameters[name]
480
- # We throw a failure here, because this method is too
481
- # ambiguous when used with properties.
482
- if obj.is_a?(Puppet::Property)
483
- fail "[] called on a property"
484
- else
485
- return obj.value
486
- end
480
+ # Note that if this is a property, then the value is the "should" value,
481
+ # not the current value.
482
+ obj.value
487
483
  else
488
484
  return nil
489
485
  end
@@ -139,7 +139,7 @@ class Puppet::Type
139
139
  end
140
140
 
141
141
  if ensureparam and ! ensureparam.insync?(currentvalues[ensureparam])
142
- changes << Puppet::PropertyChange.new(ensureparam, currentvalues[ensureparam])
142
+ changes << Puppet::Transaction::Change.new(ensureparam, currentvalues[ensureparam])
143
143
  # Else, if the 'ensure' property is correctly absent, then do
144
144
  # nothing
145
145
  elsif ensureparam and currentvalues[ensureparam] == :absent
@@ -149,7 +149,7 @@ class Puppet::Type
149
149
  currentvalues[property] ||= :absent
150
150
  ! property.insync?(currentvalues[property])
151
151
  }.collect { |property|
152
- Puppet::PropertyChange.new(property, currentvalues[property])
152
+ Puppet::Transaction::Change.new(property, currentvalues[property])
153
153
  }
154
154
  end
155
155
 
@@ -63,6 +63,10 @@ class Puppet::Module
63
63
  return template
64
64
  end
65
65
 
66
+ # If we can find the template in :templatedir, we return that.
67
+ td_file = File.join(Puppet.settings.value(:templatedir, environment), template)
68
+ return td_file if File.exists?(td_file)
69
+
66
70
  path, file = split_path(template)
67
71
 
68
72
  # Because templates don't have an assumed template name, like manifests do,
@@ -76,7 +80,7 @@ class Puppet::Module
76
80
  if mod
77
81
  return mod.template(file)
78
82
  else
79
- return File.join(Puppet.settings.value(:templatedir, environment), template)
83
+ return td_file # Return this anyway, since we're going to fail.
80
84
  end
81
85
  end
82
86
 
@@ -132,7 +136,7 @@ class Puppet::Module
132
136
  def manifests(rest)
133
137
  rest ||= "init.pp"
134
138
  p = File::join(path, MANIFESTS, rest)
135
- files = Dir.glob(p)
139
+ files = Dir.glob(p).reject { |f| FileTest.directory?(f) }
136
140
  if files.size == 0
137
141
  files = Dir.glob(p + ".pp")
138
142
  end
@@ -26,6 +26,20 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
26
26
 
27
27
  down = Puppet[:downcasefacts]
28
28
 
29
+ Facter.clear
30
+
31
+ # Reload everything.
32
+ if Facter.respond_to? :loadfacts
33
+ Facter.loadfacts
34
+ elsif Facter.respond_to? :load
35
+ Facter.load
36
+ else
37
+ Puppet.warning "You should upgrade your version of Facter to at least 1.3.8"
38
+ end
39
+
40
+ # This loads all existing facts and any new ones. We have to remove and
41
+ # reload because there's no way to unload specific facts.
42
+ loadfacts()
29
43
  facts = Facter.to_hash.inject({}) do |newhash, array|
30
44
  name, fact = array
31
45
  if down
@@ -49,6 +63,8 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
49
63
  end
50
64
 
51
65
  # Return the list of dynamic facts as an array of symbols
66
+ # NOTE:LAK(2008/04/10): This code is currently unused, since we now always
67
+ # recompile.
52
68
  def self.dynamic_facts
53
69
  # LAK:NOTE See http://snurl.com/21zf8 [groups_google_com]
54
70
  x = Puppet.settings[:dynamicfacts].split(/\s*,\s*/).collect { |fact| fact.downcase }
@@ -97,31 +113,6 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
97
113
  end
98
114
  end
99
115
 
100
- # Check whether our catalog is up to date
101
- def fresh?(facts)
102
- if Puppet[:ignorecache]
103
- Puppet.notice "Ignoring cache"
104
- return false
105
- end
106
- unless self.compile_time
107
- Puppet.debug "No cached compile time"
108
- return false
109
- end
110
- if facts_changed?(facts)
111
- Puppet.info "Facts have changed; recompiling" unless local?
112
- return false
113
- end
114
-
115
- newcompile = @driver.freshness
116
- # We're willing to give a 2 second drift
117
- if newcompile - @compile_time.to_i < 1
118
- return true
119
- else
120
- Puppet.debug "Server compile time is %s vs %s" % [newcompile, @compile_time.to_i]
121
- return false
122
- end
123
- end
124
-
125
116
  # Let the daemon run again, freely in the filesystem. Frolick, little
126
117
  # daemon!
127
118
  def enable
@@ -138,6 +129,9 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
138
129
  def getconfig
139
130
  dostorage()
140
131
 
132
+ # Retrieve the plugins.
133
+ getplugins() if Puppet[:pluginsync]
134
+
141
135
  facts = nil
142
136
  Puppet::Util.benchmark(:debug, "Retrieved facts") do
143
137
  facts = self.class.facts
@@ -145,27 +139,24 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
145
139
 
146
140
  raise Puppet::Network::ClientError.new("Could not retrieve any facts") unless facts.length > 0
147
141
 
148
- # Retrieve the plugins.
149
- getplugins() if Puppet[:pluginsync]
150
-
151
- if (self.catalog or FileTest.exist?(self.cachefile)) and self.fresh?(facts)
152
- Puppet.info "Configuration is up to date"
153
- return if use_cached_config
154
- end
155
-
156
142
  Puppet.debug("Retrieving catalog")
157
143
 
158
144
  # If we can't retrieve the catalog, just return, which will either
159
145
  # fail, or use the in-memory catalog.
160
- unless yaml_objects = get_actual_config(facts)
146
+ unless marshalled_objects = get_actual_config(facts)
161
147
  use_cached_config(true)
162
148
  return
163
149
  end
164
150
 
165
151
  begin
166
- objects = YAML.load(yaml_objects)
152
+ case Puppet[:catalog_format]
153
+ when "marshal": objects = Marshal.load(marshalled_objects)
154
+ when "yaml": objects = YAML.load(marshalled_objects)
155
+ else
156
+ raise "Invalid catalog format '%s'" % Puppet[:catalog_format]
157
+ end
167
158
  rescue => detail
168
- msg = "Configuration could not be translated from yaml"
159
+ msg = "Configuration could not be translated from %s" % Puppet[:catalog_format]
169
160
  msg += "; using cached catalog" if use_cached_config(true)
170
161
  Puppet.warning msg
171
162
  return
@@ -189,7 +180,7 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
189
180
  end
190
181
 
191
182
  if ! @catalog.from_cache
192
- self.cache(yaml_objects)
183
+ self.cache(marshalled_objects)
193
184
  end
194
185
 
195
186
  # Keep the state database up to date.
@@ -368,23 +359,6 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
368
359
 
369
360
  files << resource[:path]
370
361
  end
371
- ensure
372
- # Clear all existing definitions.
373
- Facter.clear
374
-
375
- # Reload everything.
376
- if Facter.respond_to? :loadfacts
377
- Facter.loadfacts
378
- elsif Facter.respond_to? :load
379
- Facter.load
380
- else
381
- raise Puppet::Error,
382
- "You must upgrade your version of Facter to use centralized facts"
383
- end
384
-
385
- # This loads all existing facts and any new ones. We have to remove and
386
- # reload because there's no way to unload specific facts.
387
- loadfacts()
388
362
  end
389
363
 
390
364
  # Retrieve the plugins from the central server. We only have to load the
@@ -451,32 +425,6 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
451
425
 
452
426
  loadfacts()
453
427
 
454
- # Have the facts changed since we last compiled?
455
- def facts_changed?(facts)
456
- oldfacts = (Puppet::Util::Storage.cache(:configuration)[:facts] || {}).dup
457
- newfacts = facts.dup
458
- self.class.dynamic_facts.each do |fact|
459
- [oldfacts, newfacts].each do |facthash|
460
- facthash.delete(fact) if facthash.include?(fact)
461
- end
462
- end
463
-
464
- if oldfacts == newfacts
465
- return false
466
- else
467
- # unless oldfacts
468
- # puts "no old facts"
469
- # return true
470
- # end
471
- # newfacts.keys.each do |k|
472
- # unless newfacts[k] == oldfacts[k]
473
- # puts "%s: %s vs %s" % [k, newfacts[k], oldfacts[k]]
474
- # end
475
- # end
476
- return true
477
- end
478
- end
479
-
480
428
  # Actually retrieve the catalog, either from the server or from a
481
429
  # local master.
482
430
  def get_actual_config(facts)
@@ -499,7 +447,7 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
499
447
  benchmark(:debug, "Retrieved catalog") do
500
448
  # error handling for this is done in the network client
501
449
  begin
502
- textobjects = @driver.getconfig(textfacts, "yaml")
450
+ textobjects = @driver.getconfig(textfacts, Puppet[:catalog_format])
503
451
  begin
504
452
  textobjects = CGI.unescape(textobjects)
505
453
  rescue => detail
@@ -23,8 +23,8 @@ class Puppet::Network::Handler
23
23
 
24
24
  # Tell a client whether there's a fresh config for it
25
25
  def freshness(client = nil, clientip = nil)
26
- client ||= Facter.value("hostname")
27
- config_handler.version(client, clientip)
26
+ # Always force a recompile. Newer clients shouldn't do this (as of April 2008).
27
+ Time.now
28
28
  end
29
29
 
30
30
  def initialize(hash = {})
@@ -51,53 +51,27 @@ class Puppet::Network::Handler
51
51
  if hash.include?(:Classes)
52
52
  args[:Classes] = hash[:Classes]
53
53
  end
54
-
55
- @config_handler = Puppet::Network::Handler.handler(:configuration).new(args)
56
54
  end
57
55
 
58
56
  # Call our various handlers; this handler is getting deprecated.
59
57
  def getconfig(facts, format = "marshal", client = nil, clientip = nil)
60
58
  facts = decode_facts(facts)
61
- client, clientip = clientname(client, clientip, facts)
59
+
60
+ client ||= facts["hostname"]
62
61
 
63
62
  # Pass the facts to the fact handler
64
63
  Puppet::Node::Facts.new(client, facts).save unless local?
65
64
 
66
- # And get the configuration from the config handler
67
- config = nil
68
- benchmark(:notice, "Compiled configuration for %s" % client) do
69
- config = config_handler.configuration(client)
70
- end
71
-
72
- return translate(config.extract)
73
- end
74
-
75
- private
76
-
77
- # Manipulate the client name as appropriate.
78
- def clientname(name, ip, facts)
79
- # Always use the hostname from Facter.
80
- client = facts["hostname"]
81
- clientip = facts["ipaddress"]
82
- if Puppet[:node_name] == 'cert'
83
- if name
84
- client = name
85
- facts["fqdn"] = client
86
- facts["hostname"], facts["domain"] = client.split('.', 2)
87
- end
88
- if ip
89
- clientip = ip
90
- end
91
- end
92
-
93
- return client, clientip
94
- end
65
+ catalog = Puppet::Node::Catalog.find(client)
95
66
 
96
- def config_handler
97
- unless defined? @config_handler
98
- @config_handler = Puppet::Network::Handler.handler(:config).new :local => local?
67
+ case format
68
+ when "yaml":
69
+ return CGI.escape(catalog.extract.to_yaml(:UseBlock => true))
70
+ when "marshal":
71
+ return CGI.escape(Marshal.dump(catalog.extract))
72
+ else
73
+ raise "Invalid markup format '%s'" % format
99
74
  end
100
- @config_handler
101
75
  end
102
76
 
103
77
  #
@@ -123,11 +97,6 @@ class Puppet::Network::Handler
123
97
 
124
98
  # Translate our configuration appropriately for sending back to a client.
125
99
  def translate(config)
126
- if local?
127
- config
128
- else
129
- CGI.escape(config.to_yaml(:UseBlock => true))
130
- end
131
100
  end
132
101
  end
133
102
  end
@@ -1,13 +1,15 @@
1
1
  class Puppet::Network::HTTP
2
2
  def self.server_class_by_type(kind)
3
- return Puppet::Network::HTTP::WEBrick if kind.to_sym == :webrick
4
- if kind.to_sym == :mongrel
3
+ case kind.to_sym
4
+ when :webrick:
5
+ require 'puppet/network/http/webrick'
6
+ return Puppet::Network::HTTP::WEBrick
7
+ when :mongrel:
5
8
  raise ArgumentError, "Mongrel is not installed on this platform" unless Puppet.features.mongrel?
9
+ require 'puppet/network/http/mongrel'
6
10
  return Puppet::Network::HTTP::Mongrel
11
+ else
12
+ raise ArgumentError, "Unknown HTTP server name [#{kind}]"
7
13
  end
8
- raise ArgumentError, "Unknown HTTP server name [#{kind}]"
9
14
  end
10
15
  end
11
-
12
- require 'puppet/network/http/webrick'
13
- require 'puppet/network/http/mongrel'