puppet 7.9.0-x64-mingw32 → 7.12.1-x64-mingw32

Sign up to get free protection for your applications and to get access to all the features.
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