puppet 7.9.0-x86-mingw32 → 7.12.1-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/Gemfile.lock +12 -12
  4. data/{ext → examples/enc}/regexp_nodes/classes/databases +0 -0
  5. data/{ext → examples/enc}/regexp_nodes/classes/webservers +0 -0
  6. data/{ext → examples/enc}/regexp_nodes/environment/development +0 -0
  7. data/{ext → examples/enc}/regexp_nodes/parameters/service/prod +0 -0
  8. data/{ext → examples/enc}/regexp_nodes/parameters/service/qa +0 -0
  9. data/{ext → examples/enc}/regexp_nodes/parameters/service/sandbox +0 -0
  10. data/{ext → examples/enc}/regexp_nodes/regexp_nodes.rb +0 -0
  11. data/{ext → examples}/nagios/check_puppet.rb +2 -2
  12. data/ext/README.md +13 -0
  13. data/lib/puppet/application/agent.rb +4 -0
  14. data/lib/puppet/application/apply.rb +20 -2
  15. data/lib/puppet/application/resource.rb +15 -13
  16. data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
  17. data/lib/puppet/configurer.rb +236 -58
  18. data/lib/puppet/confine/variable.rb +1 -1
  19. data/lib/puppet/defaults.rb +66 -29
  20. data/lib/puppet/environments.rb +66 -26
  21. data/lib/puppet/facter_impl.rb +96 -0
  22. data/lib/puppet/file_serving/configuration/parser.rb +2 -0
  23. data/lib/puppet/file_serving/configuration.rb +2 -0
  24. data/lib/puppet/file_serving/mount/file.rb +4 -4
  25. data/lib/puppet/file_serving/mount/scripts.rb +24 -0
  26. data/lib/puppet/file_system/file_impl.rb +3 -1
  27. data/lib/puppet/file_system.rb +2 -1
  28. data/lib/puppet/forge.rb +1 -1
  29. data/lib/puppet/functions/find_template.rb +2 -2
  30. data/lib/puppet/http/client.rb +1 -1
  31. data/lib/puppet/http/redirector.rb +5 -0
  32. data/lib/puppet/http/service/compiler.rb +6 -1
  33. data/lib/puppet/indirector/catalog/compiler.rb +24 -6
  34. data/lib/puppet/indirector/catalog/rest.rb +1 -0
  35. data/lib/puppet/indirector/facts/facter.rb +6 -6
  36. data/lib/puppet/indirector/indirection.rb +1 -1
  37. data/lib/puppet/indirector/terminus.rb +4 -0
  38. data/lib/puppet/module/plan.rb +0 -1
  39. data/lib/puppet/module/task.rb +1 -1
  40. data/lib/puppet/module_tool/applications/installer.rb +8 -4
  41. data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
  42. data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
  43. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  44. data/lib/puppet/node/environment.rb +10 -11
  45. data/lib/puppet/pal/pal_impl.rb +1 -1
  46. data/lib/puppet/parser/resource.rb +1 -1
  47. data/lib/puppet/parser/scope.rb +8 -7
  48. data/lib/puppet/parser/templatewrapper.rb +1 -0
  49. data/lib/puppet/pops/evaluator/closure.rb +7 -5
  50. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +1 -0
  51. data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
  52. data/lib/puppet/pops/model/ast.rb +1 -0
  53. data/lib/puppet/pops/model/factory.rb +14 -13
  54. data/lib/puppet/pops/parser/egrammar.ra +2 -2
  55. data/lib/puppet/pops/parser/eparser.rb +752 -753
  56. data/lib/puppet/pops/parser/lexer2.rb +69 -68
  57. data/lib/puppet/pops/parser/slurp_support.rb +1 -0
  58. data/lib/puppet/pops/serialization/to_data_converter.rb +18 -6
  59. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
  60. data/lib/puppet/pops/types/type_formatter.rb +7 -6
  61. data/lib/puppet/pops/types/types.rb +1 -1
  62. data/lib/puppet/provider/aix_object.rb +1 -1
  63. data/lib/puppet/provider/group/groupadd.rb +5 -2
  64. data/lib/puppet/provider/package/pkg.rb +19 -2
  65. data/lib/puppet/provider/package/puppet_gem.rb +1 -1
  66. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
  67. data/lib/puppet/provider/package/yum.rb +1 -1
  68. data/lib/puppet/provider/service/base.rb +1 -1
  69. data/lib/puppet/provider/service/init.rb +5 -5
  70. data/lib/puppet/provider/service/launchd.rb +2 -2
  71. data/lib/puppet/provider/service/redhat.rb +1 -1
  72. data/lib/puppet/provider/service/smf.rb +3 -3
  73. data/lib/puppet/provider/service/systemd.rb +2 -2
  74. data/lib/puppet/provider/service/upstart.rb +5 -5
  75. data/lib/puppet/provider/user/aix.rb +44 -1
  76. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  77. data/lib/puppet/provider/user/useradd.rb +72 -16
  78. data/lib/puppet/provider.rb +1 -1
  79. data/lib/puppet/reference/providers.rb +2 -2
  80. data/lib/puppet/resource/catalog.rb +1 -1
  81. data/lib/puppet/resource/type_collection.rb +2 -1
  82. data/lib/puppet/resource.rb +38 -5
  83. data/lib/puppet/runtime.rb +11 -1
  84. data/lib/puppet/settings/file_setting.rb +3 -8
  85. data/lib/puppet/settings.rb +2 -2
  86. data/lib/puppet/test/test_helper.rb +4 -1
  87. data/lib/puppet/transaction/persistence.rb +11 -1
  88. data/lib/puppet/transaction/report.rb +15 -1
  89. data/lib/puppet/type/exec.rb +19 -2
  90. data/lib/puppet/type/file.rb +6 -6
  91. data/lib/puppet/type/filebucket.rb +2 -2
  92. data/lib/puppet/type/group.rb +0 -1
  93. data/lib/puppet/type/resources.rb +1 -1
  94. data/lib/puppet/type/service.rb +8 -3
  95. data/lib/puppet/type/user.rb +0 -1
  96. data/lib/puppet/type.rb +1 -1
  97. data/lib/puppet/util/autoload.rb +1 -1
  98. data/lib/puppet/util/command_line.rb +1 -1
  99. data/lib/puppet/util/filetype.rb +2 -2
  100. data/lib/puppet/util/json.rb +3 -0
  101. data/lib/puppet/util/log.rb +1 -2
  102. data/lib/puppet/util/logging.rb +1 -25
  103. data/lib/puppet/util/pidlock.rb +1 -1
  104. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  105. data/lib/puppet/util/suidmanager.rb +1 -2
  106. data/lib/puppet/util/tagging.rb +1 -0
  107. data/lib/puppet/util/windows/service.rb +0 -5
  108. data/lib/puppet/util/windows/user.rb +0 -1
  109. data/lib/puppet/util/windows.rb +3 -0
  110. data/lib/puppet/util.rb +4 -3
  111. data/lib/puppet/version.rb +1 -1
  112. data/lib/puppet.rb +2 -6
  113. data/locales/puppet.pot +265 -221
  114. data/man/man5/puppet.conf.5 +73 -25
  115. data/man/man8/puppet-agent.8 +4 -1
  116. data/man/man8/puppet-apply.8 +1 -1
  117. data/man/man8/puppet-catalog.8 +1 -1
  118. data/man/man8/puppet-config.8 +1 -1
  119. data/man/man8/puppet-describe.8 +1 -1
  120. data/man/man8/puppet-device.8 +1 -1
  121. data/man/man8/puppet-doc.8 +1 -1
  122. data/man/man8/puppet-epp.8 +1 -1
  123. data/man/man8/puppet-facts.8 +1 -1
  124. data/man/man8/puppet-filebucket.8 +1 -1
  125. data/man/man8/puppet-generate.8 +1 -1
  126. data/man/man8/puppet-help.8 +1 -1
  127. data/man/man8/puppet-lookup.8 +1 -1
  128. data/man/man8/puppet-module.8 +3 -3
  129. data/man/man8/puppet-node.8 +1 -1
  130. data/man/man8/puppet-parser.8 +1 -1
  131. data/man/man8/puppet-plugin.8 +1 -1
  132. data/man/man8/puppet-report.8 +1 -1
  133. data/man/man8/puppet-resource.8 +1 -1
  134. data/man/man8/puppet-script.8 +1 -1
  135. data/man/man8/puppet-ssl.8 +1 -1
  136. data/man/man8/puppet.8 +2 -2
  137. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +2 -1
  138. data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
  139. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
  140. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
  141. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
  142. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
  143. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
  144. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
  145. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
  146. data/spec/integration/application/agent_spec.rb +146 -52
  147. data/spec/integration/application/filebucket_spec.rb +5 -0
  148. data/spec/integration/configurer_spec.rb +18 -2
  149. data/spec/integration/indirector/facts/facter_spec.rb +3 -3
  150. data/spec/integration/l10n/compiler_spec.rb +37 -0
  151. data/spec/integration/parser/pcore_resource_spec.rb +10 -0
  152. data/spec/integration/transaction/report_spec.rb +1 -1
  153. data/spec/integration/type/file_spec.rb +2 -2
  154. data/spec/integration/type/package_spec.rb +6 -6
  155. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  156. data/spec/integration/util/windows/process_spec.rb +1 -9
  157. data/spec/lib/puppet_spec/modules.rb +13 -2
  158. data/spec/lib/puppet_spec/puppetserver.rb +15 -0
  159. data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
  160. data/spec/shared_contexts/l10n.rb +27 -0
  161. data/spec/spec_helper.rb +1 -10
  162. data/spec/unit/application/apply_spec.rb +76 -56
  163. data/spec/unit/application/resource_spec.rb +29 -0
  164. data/spec/unit/configurer_spec.rb +353 -57
  165. data/spec/unit/environments_spec.rb +150 -1
  166. data/spec/unit/facter_impl_spec.rb +31 -0
  167. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  168. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
  169. data/spec/unit/file_serving/configuration_spec.rb +12 -4
  170. data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
  171. data/spec/unit/file_system_spec.rb +7 -0
  172. data/spec/unit/functions/logging_spec.rb +1 -0
  173. data/spec/unit/functions/lookup_spec.rb +64 -0
  174. data/spec/unit/http/client_spec.rb +58 -1
  175. data/spec/unit/http/service/compiler_spec.rb +8 -0
  176. data/spec/unit/indirector/catalog/compiler_spec.rb +87 -0
  177. data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
  178. data/spec/unit/indirector/indirection_spec.rb +10 -3
  179. data/spec/unit/interface/action_spec.rb +0 -9
  180. data/spec/unit/module_spec.rb +14 -0
  181. data/spec/unit/module_tool/applications/installer_spec.rb +39 -12
  182. data/spec/unit/network/formats_spec.rb +6 -0
  183. data/spec/unit/pops/parser/parse_containers_spec.rb +0 -11
  184. data/spec/unit/pops/serialization/to_from_hr_spec.rb +58 -0
  185. data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
  186. data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
  187. data/spec/unit/provider/package/gem_spec.rb +1 -1
  188. data/spec/unit/provider/package/pip2_spec.rb +1 -1
  189. data/spec/unit/provider/package/pip3_spec.rb +1 -1
  190. data/spec/unit/provider/package/pip_spec.rb +1 -1
  191. data/spec/unit/provider/package/pkg_spec.rb +34 -5
  192. data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
  193. data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
  194. data/spec/unit/provider/service/launchd_spec.rb +11 -0
  195. data/spec/unit/provider/service/systemd_spec.rb +1 -1
  196. data/spec/unit/provider/user/aix_spec.rb +100 -0
  197. data/spec/unit/provider/user/directoryservice_spec.rb +1 -1
  198. data/spec/unit/provider/user/useradd_spec.rb +43 -2
  199. data/spec/unit/provider_spec.rb +4 -4
  200. data/spec/unit/puppet_spec.rb +12 -4
  201. data/spec/unit/resource/catalog_spec.rb +14 -1
  202. data/spec/unit/resource_spec.rb +58 -2
  203. data/spec/unit/settings/file_setting_spec.rb +10 -7
  204. data/spec/unit/type/service_spec.rb +27 -0
  205. data/spec/unit/type_spec.rb +2 -2
  206. data/spec/unit/util/autoload_spec.rb +25 -8
  207. data/spec/unit/util/logging_spec.rb +2 -0
  208. data/tasks/parallel.rake +3 -3
  209. metadata +37 -94
  210. data/ext/README.environment +0 -8
  211. data/ext/dbfix.sql +0 -132
  212. data/ext/debian/README.Debian +0 -8
  213. data/ext/debian/README.source +0 -2
  214. data/ext/debian/TODO.Debian +0 -1
  215. data/ext/debian/changelog.erb +0 -1122
  216. data/ext/debian/compat +0 -1
  217. data/ext/debian/control +0 -144
  218. data/ext/debian/copyright +0 -339
  219. data/ext/debian/docs +0 -1
  220. data/ext/debian/fileserver.conf +0 -41
  221. data/ext/debian/puppet-common.dirs +0 -13
  222. data/ext/debian/puppet-common.install +0 -3
  223. data/ext/debian/puppet-common.lintian-overrides +0 -5
  224. data/ext/debian/puppet-common.manpages +0 -28
  225. data/ext/debian/puppet-common.postinst +0 -35
  226. data/ext/debian/puppet-common.postrm +0 -33
  227. data/ext/debian/puppet-el.dirs +0 -1
  228. data/ext/debian/puppet-el.emacsen-install +0 -25
  229. data/ext/debian/puppet-el.emacsen-remove +0 -11
  230. data/ext/debian/puppet-el.emacsen-startup +0 -9
  231. data/ext/debian/puppet-el.install +0 -1
  232. data/ext/debian/puppet-testsuite.install +0 -2
  233. data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
  234. data/ext/debian/puppet.lintian-overrides +0 -3
  235. data/ext/debian/puppet.logrotate +0 -20
  236. data/ext/debian/puppet.postinst +0 -20
  237. data/ext/debian/puppet.postrm +0 -20
  238. data/ext/debian/puppet.preinst +0 -20
  239. data/ext/debian/puppetmaster-common.install +0 -2
  240. data/ext/debian/puppetmaster-common.manpages +0 -2
  241. data/ext/debian/puppetmaster-common.postinst +0 -6
  242. data/ext/debian/puppetmaster-passenger.dirs +0 -4
  243. data/ext/debian/puppetmaster-passenger.postinst +0 -162
  244. data/ext/debian/puppetmaster-passenger.postrm +0 -61
  245. data/ext/debian/puppetmaster.README.debian +0 -17
  246. data/ext/debian/puppetmaster.default +0 -14
  247. data/ext/debian/puppetmaster.init +0 -137
  248. data/ext/debian/puppetmaster.lintian-overrides +0 -3
  249. data/ext/debian/puppetmaster.postinst +0 -20
  250. data/ext/debian/puppetmaster.postrm +0 -5
  251. data/ext/debian/puppetmaster.preinst +0 -22
  252. data/ext/debian/rules +0 -132
  253. data/ext/debian/source/format +0 -1
  254. data/ext/debian/source/options +0 -1
  255. data/ext/debian/vim-puppet.README.Debian +0 -13
  256. data/ext/debian/vim-puppet.dirs +0 -5
  257. data/ext/debian/vim-puppet.yaml +0 -7
  258. data/ext/debian/watch +0 -2
  259. data/ext/freebsd/puppetd +0 -26
  260. data/ext/freebsd/puppetmasterd +0 -26
  261. data/ext/gentoo/conf.d/puppet +0 -5
  262. data/ext/gentoo/conf.d/puppetmaster +0 -12
  263. data/ext/gentoo/init.d/puppet +0 -38
  264. data/ext/gentoo/init.d/puppetmaster +0 -51
  265. data/ext/gentoo/puppet/fileserver.conf +0 -41
  266. data/ext/ips/puppet-agent +0 -44
  267. data/ext/ips/puppet-master +0 -44
  268. data/ext/ips/puppet.p5m.erb +0 -12
  269. data/ext/ips/puppetagent.xml +0 -42
  270. data/ext/ips/puppetmaster.xml +0 -42
  271. data/ext/ips/rules +0 -19
  272. data/ext/ips/transforms +0 -34
  273. data/ext/ldap/puppet.schema +0 -24
  274. data/ext/logcheck/puppet +0 -23
  275. data/ext/osx/file_mapping.yaml +0 -28
  276. data/ext/osx/postflight.erb +0 -109
  277. data/ext/osx/preflight.erb +0 -52
  278. data/ext/osx/prototype.plist.erb +0 -38
  279. data/ext/redhat/fileserver.conf +0 -41
  280. data/ext/redhat/logrotate +0 -21
  281. data/ext/redhat/puppet.spec.erb +0 -841
  282. data/ext/redhat/server.init +0 -128
  283. data/ext/redhat/server.sysconfig +0 -13
  284. data/ext/solaris/pkginfo +0 -6
  285. data/ext/solaris/smf/puppetd.xml +0 -77
  286. data/ext/solaris/smf/puppetmasterd.xml +0 -77
  287. data/ext/solaris/smf/svc-puppetd +0 -71
  288. data/ext/solaris/smf/svc-puppetmasterd +0 -67
  289. data/ext/suse/puppet.spec +0 -310
  290. data/ext/suse/server.init +0 -173
  291. data/ext/yaml_nodes.rb +0 -105
  292. data/spec/unit/indirector/store_configs_spec.rb +0 -7
@@ -13,6 +13,7 @@ describe Puppet::Type.type(:user).provider(:useradd) do
13
13
  allow(described_class).to receive(:command).with(:localmodify).and_return('/usr/sbin/lusermod')
14
14
  allow(described_class).to receive(:command).with(:delete).and_return('/usr/sbin/userdel')
15
15
  allow(described_class).to receive(:command).with(:localdelete).and_return('/usr/sbin/luserdel')
16
+ allow(described_class).to receive(:command).with(:chpasswd).and_return('/usr/sbin/chpasswd')
16
17
  end
17
18
 
18
19
  let(:resource) do
@@ -62,7 +63,7 @@ describe Puppet::Type.type(:user).provider(:useradd) do
62
63
  :provider => provider,
63
64
  )
64
65
  resource2[:ensure] = :present
65
- expect(provider).to receive(:execute).with(kind_of(Array), hash_including(sensitive: true))
66
+ expect(provider).to receive(:execute).with(kind_of(Array), hash_including(sensitive: true)).twice
66
67
  provider.create
67
68
  end
68
69
 
@@ -208,7 +209,7 @@ describe Puppet::Type.type(:user).provider(:useradd) do
208
209
  end
209
210
 
210
211
  it "should call execute with sensitive if sensitive data is changed" do
211
- expect(provider).to receive(:execute).with(kind_of(Array), hash_including(sensitive: true))
212
+ expect(provider).to receive(:execute).with(kind_of(Array), hash_including(sensitive: true)).and_return('')
212
213
  provider.password = 'bird bird bird'
213
214
  end
214
215
  end
@@ -351,6 +352,46 @@ describe Puppet::Type.type(:user).provider(:useradd) do
351
352
  end
352
353
  end
353
354
 
355
+ describe "#shell" do
356
+ before { described_class.has_feature :manages_local_users_and_groups }
357
+
358
+ let(:content) { "myuser:x:x:x:x:x:/bin/local_shell" }
359
+
360
+ it "should return the local shell string when forcelocal is true" do
361
+ resource[:forcelocal] = true
362
+ allow(Puppet::FileSystem).to receive(:exist?).with('/etc/passwd').and_return(true)
363
+ allow(Puppet::FileSystem).to receive(:each_line).with('/etc/passwd').and_yield(content)
364
+ expect(provider.shell).to eq('/bin/local_shell')
365
+ end
366
+
367
+ it "should fall back to nameservice shell string when forcelocal is false" do
368
+ resource[:forcelocal] = false
369
+ allow(provider).to receive(:get).with(:shell).and_return('/bin/remote_shell')
370
+ expect(provider).not_to receive(:localshell)
371
+ expect(provider.shell).to eq('/bin/remote_shell')
372
+ end
373
+ end
374
+
375
+ describe "#home" do
376
+ before { described_class.has_feature :manages_local_users_and_groups }
377
+
378
+ let(:content) { "myuser:x:x:x:x:/opt/local_home:x" }
379
+
380
+ it "should return the local home string when forcelocal is true" do
381
+ resource[:forcelocal] = true
382
+ allow(Puppet::FileSystem).to receive(:exist?).with('/etc/passwd').and_return(true)
383
+ allow(Puppet::FileSystem).to receive(:each_line).with('/etc/passwd').and_yield(content)
384
+ expect(provider.home).to eq('/opt/local_home')
385
+ end
386
+
387
+ it "should fall back to nameservice home string when forcelocal is false" do
388
+ resource[:forcelocal] = false
389
+ allow(provider).to receive(:get).with(:home).and_return('/opt/remote_home')
390
+ expect(provider).not_to receive(:localhome)
391
+ expect(provider.home).to eq('/opt/remote_home')
392
+ end
393
+ end
394
+
354
395
  describe "#gid" do
355
396
  before { described_class.has_feature :manages_local_users_and_groups }
356
397
 
@@ -222,18 +222,18 @@ describe Puppet::Provider do
222
222
  { :true => false } => false,
223
223
  { :false => false } => true,
224
224
  { :false => true } => false,
225
- { :operatingsystem => Facter.value(:operatingsystem) } => true,
225
+ { :operatingsystem => Puppet.runtime[:facter].value(:operatingsystem) } => true,
226
226
  { :operatingsystem => :yayness } => false,
227
227
  { :nothing => :yayness } => false,
228
228
  { :exists => Puppet::Util.which(existing_command) } => true,
229
229
  { :exists => "/this/file/does/not/exist" } => false,
230
230
  { :true => true, :exists => Puppet::Util.which(existing_command) } => true,
231
231
  { :true => true, :exists => "/this/file/does/not/exist" } => false,
232
- { :operatingsystem => Facter.value(:operatingsystem),
232
+ { :operatingsystem => Puppet.runtime[:facter].value(:operatingsystem),
233
233
  :exists => Puppet::Util.which(existing_command) } => true,
234
234
  { :operatingsystem => :yayness,
235
235
  :exists => Puppet::Util.which(existing_command) } => false,
236
- { :operatingsystem => Facter.value(:operatingsystem),
236
+ { :operatingsystem => Puppet.runtime[:facter].value(:operatingsystem),
237
237
  :exists => "/this/file/does/not/exist" } => false,
238
238
  { :operatingsystem => :yayness,
239
239
  :exists => "/this/file/does/not/exist" } => false,
@@ -269,7 +269,7 @@ describe Puppet::Provider do
269
269
  end
270
270
 
271
271
  context "default providers" do
272
- let :os do Facter.value(:operatingsystem) end
272
+ let :os do Puppet.runtime[:facter].value(:operatingsystem) end
273
273
 
274
274
  it { is_expected.to respond_to :specificity }
275
275
 
@@ -91,12 +91,20 @@ describe Puppet do
91
91
  expect(Puppet.runtime[:http]).to be_an_instance_of(Puppet::HTTP::Client)
92
92
  end
93
93
 
94
- it 'allows an implementation to be registered' do
95
- impl = double('http')
96
- Puppet.initialize_settings([], true, true, http: impl)
94
+ it 'allows a http implementation to be registered' do
95
+ http_impl = double('http')
96
+ Puppet.initialize_settings([], true, true, http: http_impl)
97
97
 
98
98
 
99
- expect(Puppet.runtime[:http]).to eq(impl)
99
+ expect(Puppet.runtime[:http]).to eq(http_impl)
100
+ end
101
+
102
+ it 'allows a facter implementation to be registered' do
103
+ facter_impl = double('facter')
104
+ Puppet.initialize_settings([], true, true, facter: facter_impl)
105
+
106
+
107
+ expect(Puppet.runtime[:facter]).to eq(facter_impl)
100
108
  end
101
109
  end
102
110
 
@@ -104,7 +104,7 @@ describe Puppet::Resource::Catalog, "when compiling" do
104
104
 
105
105
  it "should include the current catalog_format" do
106
106
  catalog = Puppet::Resource::Catalog.new("host")
107
- expect(catalog.catalog_format).to eq(1)
107
+ expect(catalog.catalog_format).to eq(2)
108
108
  end
109
109
 
110
110
  describe "when compiling" do
@@ -178,6 +178,7 @@ describe Puppet::Resource::Catalog, "when compiling" do
178
178
  @original.add_edge(@middle, @bottom)
179
179
  @original.add_edge(@bottom, @bottomobject)
180
180
 
181
+ @original.catalog_format = 1
181
182
  @catalog = @original.to_ral
182
183
  end
183
184
 
@@ -190,6 +191,18 @@ describe Puppet::Resource::Catalog, "when compiling" do
190
191
  end
191
192
  end
192
193
 
194
+ it "should raise if an unknown resource is being converted" do
195
+ @new_res = Puppet::Resource.new "Unknown", "type", :kind => 'compilable_type'
196
+ @resource_array = [@new_res]
197
+
198
+ @original.add_resource(*@resource_array)
199
+ @original.add_edge(@bottomobject, @new_res)
200
+
201
+ @original.catalog_format = 2
202
+
203
+ expect { @original.to_ral }.to raise_error(Puppet::Error, "Resource type 'Unknown' was not found")
204
+ end
205
+
193
206
  it "should copy the tag list to the new catalog" do
194
207
  expect(@catalog.tags.sort).to eq(@original.tags.sort)
195
208
  end
@@ -638,19 +638,68 @@ describe Puppet::Resource do
638
638
  it "should use the resource type's :new method to create the resource if the resource is of a builtin type" do
639
639
  resource = Puppet::Resource.new("file", basepath+"/my/file")
640
640
  result = resource.to_ral
641
+
641
642
  expect(result).to be_instance_of(Puppet::Type.type(:file))
642
643
  expect(result[:path]).to eq(basepath+"/my/file")
643
644
  end
644
645
 
645
- it "should convert to a component instance if the resource type is not of a builtin type" do
646
+ it "should convert to a component instance if the resource is not a compilable_type" do
646
647
  resource = Puppet::Resource.new("foobar", "somename")
647
648
  result = resource.to_ral
648
649
 
649
650
  expect(result).to be_instance_of(Puppet::Type.type(:component))
650
651
  expect(result.title).to eq("Foobar[somename]")
651
652
  end
652
- end
653
653
 
654
+ it "should convert to a component instance if the resource is a class" do
655
+ resource = Puppet::Resource.new("Class", "somename")
656
+ result = resource.to_ral
657
+
658
+ expect(result).to be_instance_of(Puppet::Type.type(:component))
659
+ expect(result.title).to eq("Class[Somename]")
660
+ end
661
+
662
+ it "should convert to component when the resource is a defined_type" do
663
+ resource = Puppet::Resource.new("Unknown", "type", :kind => 'defined_type')
664
+
665
+ result = resource.to_ral
666
+ expect(result).to be_instance_of(Puppet::Type.type(:component))
667
+ end
668
+
669
+ it "should raise if a resource type is a compilable_type and it wasn't found" do
670
+ resource = Puppet::Resource.new("Unknown", "type", :kind => 'compilable_type')
671
+
672
+ expect { resource.to_ral }.to raise_error(Puppet::Error, "Resource type 'Unknown' was not found")
673
+ end
674
+
675
+ it "should use the old behaviour when the catalog_format is equal to 1" do
676
+ resource = Puppet::Resource.new("Unknown", "type")
677
+ catalog = Puppet::Resource::Catalog.new("mynode")
678
+
679
+ resource.catalog = catalog
680
+ resource.catalog.catalog_format = 1
681
+
682
+ result = resource.to_ral
683
+ expect(result).to be_instance_of(Puppet::Type.type(:component))
684
+ end
685
+
686
+ it "should use the new behaviour and fail when the catalog_format is greater than 1" do
687
+ resource = Puppet::Resource.new("Unknown", "type", :kind => 'compilable_type')
688
+ catalog = Puppet::Resource::Catalog.new("mynode")
689
+
690
+ resource.catalog = catalog
691
+ resource.catalog.catalog_format = 2
692
+
693
+ expect { resource.to_ral }.to raise_error(Puppet::Error, "Resource type 'Unknown' was not found")
694
+ end
695
+
696
+ it "should use the resource type when the resource doesn't respond to kind and the resource type can be found" do
697
+ resource = Puppet::Resource.new("file", basepath+"/my/file")
698
+
699
+ result = resource.to_ral
700
+ expect(result).to be_instance_of(Puppet::Type.type(:file))
701
+ end
702
+ end
654
703
  describe "when converting to puppet code" do
655
704
  before do
656
705
  @resource = Puppet::Resource.new("one::two", "/my/file",
@@ -766,6 +815,13 @@ describe Puppet::Resource do
766
815
  expect(Puppet::Resource.from_data_hash(JSON.parse(resource.to_json)).line).to eq(50)
767
816
  end
768
817
 
818
+ it "should include the kind if one is set" do
819
+ resource = Puppet::Resource.new("File", "/foo")
820
+ resource.kind = 'im_a_file'
821
+
822
+ expect(Puppet::Resource.from_data_hash(JSON.parse(resource.to_json)).kind).to eq('im_a_file')
823
+ end
824
+
769
825
  it "should include the 'exported' value if one is set" do
770
826
  resource = Puppet::Resource.new("File", "/foo")
771
827
  resource.exported = true
@@ -125,9 +125,10 @@ describe Puppet::Settings::FileSetting do
125
125
  describe "when being converted to a resource" do
126
126
  before do
127
127
  @basepath = make_absolute("/somepath")
128
+ allow(Puppet::FileSystem).to receive(:exist?).and_call_original
129
+ allow(Puppet::FileSystem).to receive(:exist?).with(@basepath).and_return(true)
128
130
  @settings = double('settings')
129
131
  @file = Puppet::Settings::FileSetting.new(:settings => @settings, :desc => "eh", :name => :myfile, :section => "mysect")
130
- allow(@file).to receive(:create_files?).and_return(true)
131
132
  allow(@settings).to receive(:value).with(:myfile, nil, false).and_return(@basepath)
132
133
  end
133
134
 
@@ -135,18 +136,19 @@ describe Puppet::Settings::FileSetting do
135
136
  expect(@file.type).to eq(:file)
136
137
  end
137
138
 
138
- it "should skip non-existent files if 'create_files' is not enabled" do
139
- expect(@file).to receive(:create_files?).and_return(false)
139
+ it "skips non-existent files" do
140
140
  expect(@file).to receive(:type).and_return(:file)
141
141
  expect(Puppet::FileSystem).to receive(:exist?).with(@basepath).and_return(false)
142
142
  expect(@file.to_resource).to be_nil
143
143
  end
144
144
 
145
- it "should manage existent files even if 'create_files' is not enabled" do
146
- expect(@file).to receive(:create_files?).and_return(false)
145
+ it "manages existing files" do
147
146
  expect(@file).to receive(:type).and_return(:file)
148
- allow(Puppet::FileSystem).to receive(:exist?)
149
- expect(Puppet::FileSystem).to receive(:exist?).with(@basepath).and_return(true)
147
+ expect(@file.to_resource).to be_instance_of(Puppet::Resource)
148
+ end
149
+
150
+ it "always manages directories" do
151
+ expect(@file).to receive(:type).and_return(:directory)
150
152
  expect(@file.to_resource).to be_instance_of(Puppet::Resource)
151
153
  end
152
154
 
@@ -177,6 +179,7 @@ describe Puppet::Settings::FileSetting do
177
179
  it "should fully qualified returned files if necessary (#795)" do
178
180
  allow(@settings).to receive(:value).with(:myfile, nil, false).and_return("myfile")
179
181
  path = File.expand_path('myfile')
182
+ allow(Puppet::FileSystem).to receive(:exist?).with(path).and_return(true)
180
183
  expect(@file.to_resource.title).to eq(path)
181
184
  end
182
185
 
@@ -158,6 +158,33 @@ describe test_title, "when validating attribute values" do
158
158
  expect(srv[:timeout]).to eq(int)
159
159
  end
160
160
  end
161
+
162
+ it "should default :timeout to 10 when provider has no default value" do
163
+ srv = Puppet::Type.type(:service).new(:name => "yay")
164
+ expect(srv[:timeout]).to eq(10)
165
+ end
166
+
167
+ it "should default :timeout to provider given default time when it has one" do
168
+ provider_class_with_timeout = Puppet::Type.type(:service).provide(:simple) do
169
+ has_features :configurable_timeout
170
+ def default_timeout
171
+ 30
172
+ end
173
+ end
174
+ allow(Puppet::Type.type(:service)).to receive(:defaultprovider).and_return(provider_class_with_timeout)
175
+
176
+ srv = Puppet::Type.type(:service).new(:name => "yay")
177
+ expect(srv[:timeout]).to eq(30)
178
+ end
179
+
180
+ it "should accept string as value" do
181
+ srv = Puppet::Type.type(:service).new(:name => "yay", :timeout => "25")
182
+ expect(srv[:timeout]).to eq(25)
183
+ end
184
+
185
+ it "should not support values that cannot be converted to Integer such as Array" do
186
+ expect { Puppet::Type.type(:service).new(:name => "yay", :timeout => [25]) }.to raise_error(Puppet::Error)
187
+ end
161
188
  end
162
189
 
163
190
  describe "the service logon credentials" do
@@ -1142,7 +1142,7 @@ describe Puppet::Type, :unless => Puppet::Util::Platform.windows? do
1142
1142
 
1143
1143
  before :each do
1144
1144
  type.provide(:default) do
1145
- defaultfor :operatingsystem => Facter.value(:operatingsystem)
1145
+ defaultfor :operatingsystem => Puppet.runtime[:facter].value(:operatingsystem)
1146
1146
  mk_resource_methods
1147
1147
  class << self
1148
1148
  attr_accessor :params
@@ -1172,7 +1172,7 @@ describe Puppet::Type, :unless => Puppet::Util::Platform.windows? do
1172
1172
  context "with a default provider" do
1173
1173
  before :each do
1174
1174
  type.provide(:default) do
1175
- defaultfor :operatingsystem => Facter.value(:operatingsystem)
1175
+ defaultfor :operatingsystem => Puppet.runtime[:facter].value(:operatingsystem)
1176
1176
  mk_resource_methods
1177
1177
  class << self
1178
1178
  attr_accessor :names
@@ -178,15 +178,14 @@ describe Puppet::Util::Autoload do
178
178
  end
179
179
 
180
180
  describe "when loading all files" do
181
+ let(:basedir) { tmpdir('autoloader') }
182
+ let(:path) { File.join(basedir, @autoload.path, 'file.rb') }
183
+
181
184
  before do
182
- allow(@autoload.class).to receive(:search_directories).and_return([make_absolute("/a")])
183
- allow(FileTest).to receive(:directory?).and_return(true)
184
- allow(Dir).to receive(:glob).and_return([make_absolute("/a/foo/file.rb")])
185
- allow(Puppet::FileSystem).to receive(:exist?).and_return(true)
186
- @time_a = Time.utc(2010, 'jan', 1, 6, 30)
187
- allow(File).to receive(:mtime).and_return(@time_a)
185
+ FileUtils.mkdir_p(File.dirname(path))
186
+ FileUtils.touch(path)
188
187
 
189
- allow(@autoload.class).to receive(:loaded?).and_return(false)
188
+ allow(@autoload.class).to receive(:search_directories).and_return([basedir])
190
189
  end
191
190
 
192
191
  [RuntimeError, LoadError, SyntaxError].each do |error|
@@ -198,7 +197,25 @@ describe Puppet::Util::Autoload do
198
197
  end
199
198
 
200
199
  it "should require the full path to the file" do
201
- expect(Kernel).to receive(:load).with(make_absolute("/a/foo/file.rb"), any_args)
200
+ expect(Kernel).to receive(:load).with(path, any_args)
201
+
202
+ @autoload.loadall(env)
203
+ end
204
+
205
+ it "autoloads from a directory whose ancestor is Windows 8.3", if: Puppet::Util::Platform.windows? do
206
+ # File.expand_path will expand ~ in the last directory component only(!)
207
+ # so create an ancestor directory with a long path
208
+ dir = File.join(tmpdir('longpath'), 'short')
209
+ path = File.join(dir, @autoload.path, 'file.rb')
210
+
211
+ FileUtils.mkdir_p(File.dirname(path))
212
+ FileUtils.touch(path)
213
+
214
+ dir83 = File.join(File.dirname(basedir), 'longpa~1', 'short')
215
+ path83 = File.join(dir83, @autoload.path, 'file.rb')
216
+
217
+ allow(@autoload.class).to receive(:search_directories).and_return([dir83])
218
+ expect(Kernel).to receive(:load).with(path83, any_args)
202
219
 
203
220
  @autoload.loadall(env)
204
221
  end
@@ -552,6 +552,7 @@ original
552
552
 
553
553
  describe 'does support debugging' do
554
554
  before :each do
555
+ allow(Facter).to receive(:respond_to?).with(:on_message).and_return(true)
555
556
  allow(Facter).to receive(:respond_to?).with(:debugging, any_args).and_return(true)
556
557
  end
557
558
 
@@ -568,6 +569,7 @@ original
568
569
 
569
570
  describe 'does support trace' do
570
571
  before :each do
572
+ allow(Facter).to receive(:respond_to?).with(:on_message)
571
573
  allow(Facter).to receive(:respond_to?).with(:trace, any_args).and_return(true)
572
574
  end
573
575
 
data/tasks/parallel.rake CHANGED
@@ -5,9 +5,9 @@ require 'thread'
5
5
  begin
6
6
  require 'rspec'
7
7
  require 'rspec/core/formatters/helpers'
8
- require 'facter'
8
+ require 'etc'
9
9
  rescue LoadError
10
- # Don't define the task if we don't have rspec or facter present
10
+ # Don't define the task if we don't have rspec present
11
11
  else
12
12
  module Parallel
13
13
  module RSpec
@@ -401,7 +401,7 @@ else
401
401
  # Default group size in rspec examples
402
402
  DEFAULT_GROUP_SIZE = 1000
403
403
 
404
- process_count = [(args[:process_count] || Facter.value("processorcount")).to_i, 1].max
404
+ process_count = [(args[:process_count] || Etc.nprocessors).to_i, 1].max
405
405
  group_size = [(args[:group_size] || DEFAULT_GROUP_SIZE).to_i, 1].max
406
406
 
407
407
  abort unless Parallel::RSpec::Parallelizer.new(process_count, group_size, color_output?, args.extras).run