puppet 6.18.0-x86-mingw32 → 6.21.1-x86-mingw32

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 (276) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +2 -0
  4. data/Gemfile.lock +37 -34
  5. data/README.md +1 -2
  6. data/Rakefile +4 -12
  7. data/lib/puppet/agent/locker.rb +0 -7
  8. data/lib/puppet/application.rb +10 -6
  9. data/lib/puppet/application/agent.rb +9 -3
  10. data/lib/puppet/application/apply.rb +3 -2
  11. data/lib/puppet/application/device.rb +1 -0
  12. data/lib/puppet/application/doc.rb +1 -1
  13. data/lib/puppet/application/filebucket.rb +2 -2
  14. data/lib/puppet/application/lookup.rb +5 -5
  15. data/lib/puppet/application/script.rb +1 -0
  16. data/lib/puppet/application_support.rb +7 -0
  17. data/lib/puppet/configurer.rb +50 -8
  18. data/lib/puppet/defaults.rb +67 -35
  19. data/lib/puppet/environments.rb +84 -59
  20. data/lib/puppet/face/catalog.rb +1 -1
  21. data/lib/puppet/face/config.rb +56 -16
  22. data/lib/puppet/face/epp.rb +12 -2
  23. data/lib/puppet/face/facts.rb +60 -0
  24. data/lib/puppet/face/node.rb +3 -3
  25. data/lib/puppet/face/node/clean.rb +2 -2
  26. data/lib/puppet/face/status.rb +1 -1
  27. data/lib/puppet/ffi/posix.rb +10 -0
  28. data/lib/puppet/ffi/posix/constants.rb +14 -0
  29. data/lib/puppet/ffi/posix/functions.rb +24 -0
  30. data/lib/puppet/file_bucket/dipper.rb +1 -1
  31. data/lib/puppet/functions/epp.rb +1 -0
  32. data/lib/puppet/functions/inline_epp.rb +1 -0
  33. data/lib/puppet/functions/new.rb +8 -3
  34. data/lib/puppet/http.rb +1 -0
  35. data/lib/puppet/http/client.rb +1 -1
  36. data/lib/puppet/http/resolver.rb +5 -8
  37. data/lib/puppet/http/resolver/server_list.rb +18 -36
  38. data/lib/puppet/http/resolver/settings.rb +4 -4
  39. data/lib/puppet/http/resolver/srv.rb +5 -5
  40. data/lib/puppet/http/service.rb +3 -1
  41. data/lib/puppet/http/service/compiler.rb +1 -1
  42. data/lib/puppet/http/service/file_server.rb +1 -1
  43. data/lib/puppet/http/service/puppetserver.rb +39 -0
  44. data/lib/puppet/http/session.rb +5 -4
  45. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  46. data/lib/puppet/indirector/fact_search.rb +60 -0
  47. data/lib/puppet/indirector/facts/json.rb +27 -0
  48. data/lib/puppet/indirector/facts/yaml.rb +4 -59
  49. data/lib/puppet/indirector/json.rb +5 -1
  50. data/lib/puppet/indirector/msgpack.rb +1 -1
  51. data/lib/puppet/indirector/node/json.rb +8 -0
  52. data/lib/puppet/indirector/report/json.rb +34 -0
  53. data/lib/puppet/indirector/request.rb +4 -4
  54. data/lib/puppet/indirector/yaml.rb +1 -1
  55. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  56. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  57. data/lib/puppet/network/formats.rb +2 -1
  58. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  59. data/lib/puppet/node/facts.rb +17 -0
  60. data/lib/puppet/pal/pal_impl.rb +70 -17
  61. data/lib/puppet/parser/ast/leaf.rb +3 -2
  62. data/lib/puppet/parser/templatewrapper.rb +1 -1
  63. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  64. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  65. data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -3
  66. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  67. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  68. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  69. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  70. data/lib/puppet/property/list.rb +1 -1
  71. data/lib/puppet/provider/group/groupadd.rb +13 -8
  72. data/lib/puppet/provider/package/apt.rb +34 -2
  73. data/lib/puppet/provider/package/aptitude.rb +6 -0
  74. data/lib/puppet/provider/package/dpkg.rb +1 -1
  75. data/lib/puppet/provider/package/pip2.rb +17 -0
  76. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  77. data/lib/puppet/provider/package/yum.rb +1 -0
  78. data/lib/puppet/provider/service/debian.rb +2 -0
  79. data/lib/puppet/provider/user/aix.rb +2 -2
  80. data/lib/puppet/provider/user/useradd.rb +62 -8
  81. data/lib/puppet/reference/configuration.rb +6 -5
  82. data/lib/puppet/resource/type.rb +2 -1
  83. data/lib/puppet/rest/route.rb +2 -2
  84. data/lib/puppet/settings.rb +62 -20
  85. data/lib/puppet/settings/alias_setting.rb +37 -0
  86. data/lib/puppet/settings/base_setting.rb +26 -2
  87. data/lib/puppet/transaction/report.rb +11 -7
  88. data/lib/puppet/type/file/source.rb +1 -1
  89. data/lib/puppet/type/filebucket.rb +1 -1
  90. data/lib/puppet/type/package.rb +3 -3
  91. data/lib/puppet/util/autoload.rb +1 -8
  92. data/lib/puppet/util/connection.rb +8 -8
  93. data/lib/puppet/util/fact_dif.rb +62 -0
  94. data/lib/puppet/util/posix.rb +54 -5
  95. data/lib/puppet/util/rubygems.rb +5 -1
  96. data/lib/puppet/util/run_mode.rb +5 -1
  97. data/lib/puppet/util/windows/service.rb +1 -1
  98. data/lib/puppet/version.rb +1 -1
  99. data/locales/puppet.pot +289 -268
  100. data/man/man5/puppet.conf.5 +33 -17
  101. data/man/man8/puppet-agent.8 +7 -4
  102. data/man/man8/puppet-apply.8 +2 -2
  103. data/man/man8/puppet-catalog.8 +1 -1
  104. data/man/man8/puppet-config.8 +6 -6
  105. data/man/man8/puppet-describe.8 +1 -1
  106. data/man/man8/puppet-device.8 +2 -2
  107. data/man/man8/puppet-doc.8 +1 -1
  108. data/man/man8/puppet-epp.8 +1 -1
  109. data/man/man8/puppet-facts.8 +32 -1
  110. data/man/man8/puppet-filebucket.8 +3 -3
  111. data/man/man8/puppet-generate.8 +1 -1
  112. data/man/man8/puppet-help.8 +1 -1
  113. data/man/man8/puppet-key.8 +1 -1
  114. data/man/man8/puppet-lookup.8 +1 -1
  115. data/man/man8/puppet-man.8 +1 -1
  116. data/man/man8/puppet-module.8 +1 -1
  117. data/man/man8/puppet-node.8 +7 -4
  118. data/man/man8/puppet-parser.8 +1 -1
  119. data/man/man8/puppet-plugin.8 +1 -1
  120. data/man/man8/puppet-report.8 +4 -1
  121. data/man/man8/puppet-resource.8 +1 -1
  122. data/man/man8/puppet-script.8 +2 -2
  123. data/man/man8/puppet-ssl.8 +1 -1
  124. data/man/man8/puppet-status.8 +2 -2
  125. data/man/man8/puppet.8 +2 -2
  126. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  127. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  128. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  129. data/spec/integration/application/agent_spec.rb +183 -22
  130. data/spec/integration/application/apply_spec.rb +19 -0
  131. data/spec/integration/application/filebucket_spec.rb +7 -7
  132. data/spec/integration/application/plugin_spec.rb +3 -3
  133. data/spec/integration/configurer_spec.rb +14 -0
  134. data/spec/integration/defaults_spec.rb +19 -1
  135. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  136. data/spec/integration/resource/type_collection_spec.rb +2 -6
  137. data/spec/integration/transaction_spec.rb +4 -9
  138. data/spec/integration/util/windows/adsi_spec.rb +5 -3
  139. data/spec/integration/util/windows/registry_spec.rb +0 -10
  140. data/spec/lib/puppet_spec/settings.rb +6 -1
  141. data/spec/shared_contexts/types_setup.rb +2 -0
  142. data/spec/spec_helper.rb +1 -4
  143. data/spec/unit/agent_spec.rb +8 -6
  144. data/spec/unit/application/agent_spec.rb +0 -1
  145. data/spec/unit/application/config_spec.rb +224 -4
  146. data/spec/unit/application/doc_spec.rb +2 -2
  147. data/spec/unit/application/facts_spec.rb +3 -1
  148. data/spec/unit/application/filebucket_spec.rb +0 -2
  149. data/spec/unit/application_spec.rb +60 -13
  150. data/spec/unit/configurer_spec.rb +39 -6
  151. data/spec/unit/confine/feature_spec.rb +1 -1
  152. data/spec/unit/confine_spec.rb +8 -2
  153. data/spec/unit/defaults_spec.rb +20 -1
  154. data/spec/unit/environments_spec.rb +176 -32
  155. data/spec/unit/face/config_spec.rb +62 -11
  156. data/spec/unit/face/node_spec.rb +2 -13
  157. data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
  158. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  159. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  160. data/spec/unit/file_system_spec.rb +1 -2
  161. data/spec/unit/forge/module_release_spec.rb +2 -7
  162. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  163. data/spec/unit/http/resolver_spec.rb +24 -4
  164. data/spec/unit/http/service/ca_spec.rb +2 -2
  165. data/spec/unit/http/service/compiler_spec.rb +51 -2
  166. data/spec/unit/http/service/file_server_spec.rb +2 -2
  167. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  168. data/spec/unit/http/service/report_spec.rb +2 -2
  169. data/spec/unit/http/service_spec.rb +1 -1
  170. data/spec/unit/http/session_spec.rb +8 -20
  171. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  172. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  173. data/spec/unit/indirector/face_spec.rb +0 -1
  174. data/spec/unit/indirector/facts/facter_spec.rb +0 -1
  175. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  176. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  177. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  178. data/spec/unit/indirector/indirection_spec.rb +8 -12
  179. data/spec/unit/indirector/json_spec.rb +8 -8
  180. data/spec/unit/indirector/key/file_spec.rb +0 -1
  181. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  182. data/spec/unit/indirector/node/json_spec.rb +33 -0
  183. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  184. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  185. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  186. data/spec/unit/indirector/request_spec.rb +4 -4
  187. data/spec/unit/indirector/rest_spec.rb +1 -1
  188. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  189. data/spec/unit/indirector/yaml_spec.rb +7 -7
  190. data/spec/unit/indirector_spec.rb +2 -2
  191. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  192. data/spec/unit/network/authconfig_spec.rb +0 -3
  193. data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -9
  194. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  195. data/spec/unit/network/http/handler_spec.rb +0 -5
  196. data/spec/unit/parser/compiler_spec.rb +3 -19
  197. data/spec/unit/parser/resource_spec.rb +14 -8
  198. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  199. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  200. data/spec/unit/property_spec.rb +1 -0
  201. data/spec/unit/provider/exec_spec.rb +4 -3
  202. data/spec/unit/provider/group/groupadd_spec.rb +5 -2
  203. data/spec/unit/provider/nameservice_spec.rb +66 -65
  204. data/spec/unit/provider/package/apt_spec.rb +28 -23
  205. data/spec/unit/provider/package/aptitude_spec.rb +1 -1
  206. data/spec/unit/provider/package/base_spec.rb +6 -5
  207. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  208. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  209. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  210. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  211. data/spec/unit/provider/package/pip_spec.rb +6 -11
  212. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  213. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  214. data/spec/unit/provider/package/yum_spec.rb +31 -0
  215. data/spec/unit/provider/service/base_spec.rb +2 -4
  216. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  217. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  218. data/spec/unit/provider/service/debian_spec.rb +3 -5
  219. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  220. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  221. data/spec/unit/provider/service/init_spec.rb +4 -5
  222. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  223. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  224. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  225. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  226. data/spec/unit/provider/service/runit_spec.rb +2 -1
  227. data/spec/unit/provider/service/smf_spec.rb +1 -1
  228. data/spec/unit/provider/service/src_spec.rb +3 -5
  229. data/spec/unit/provider/service/systemd_spec.rb +3 -1
  230. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  231. data/spec/unit/provider/user/aix_spec.rb +5 -0
  232. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  233. data/spec/unit/provider/user/pw_spec.rb +2 -0
  234. data/spec/unit/provider/user/useradd_spec.rb +56 -3
  235. data/spec/unit/provider_spec.rb +8 -10
  236. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  237. data/spec/unit/resource/capability_finder_spec.rb +6 -1
  238. data/spec/unit/resource/type_spec.rb +1 -1
  239. data/spec/unit/resource_spec.rb +11 -10
  240. data/spec/unit/rest/route_spec.rb +4 -4
  241. data/spec/unit/settings_spec.rb +576 -239
  242. data/spec/unit/ssl/base_spec.rb +0 -1
  243. data/spec/unit/ssl/host_spec.rb +0 -5
  244. data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
  245. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  246. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  247. data/spec/unit/transaction/report_spec.rb +2 -0
  248. data/spec/unit/transaction_spec.rb +13 -4
  249. data/spec/unit/type/file/content_spec.rb +0 -1
  250. data/spec/unit/type/file/selinux_spec.rb +0 -2
  251. data/spec/unit/type/file/source_spec.rb +1 -1
  252. data/spec/unit/type/file_spec.rb +0 -6
  253. data/spec/unit/type/filebucket_spec.rb +1 -1
  254. data/spec/unit/type/group_spec.rb +13 -6
  255. data/spec/unit/type/resources_spec.rb +7 -7
  256. data/spec/unit/type/service_spec.rb +1 -1
  257. data/spec/unit/type/tidy_spec.rb +0 -1
  258. data/spec/unit/type_spec.rb +2 -2
  259. data/spec/unit/util/at_fork_spec.rb +2 -2
  260. data/spec/unit/util/autoload_spec.rb +5 -1
  261. data/spec/unit/util/backups_spec.rb +1 -2
  262. data/spec/unit/util/execution_spec.rb +15 -11
  263. data/spec/unit/util/inifile_spec.rb +6 -14
  264. data/spec/unit/util/log_spec.rb +8 -7
  265. data/spec/unit/util/logging_spec.rb +3 -3
  266. data/spec/unit/util/posix_spec.rb +363 -15
  267. data/spec/unit/util/rubygems_spec.rb +2 -2
  268. data/spec/unit/util/run_mode_spec.rb +6 -6
  269. data/spec/unit/util/selinux_spec.rb +76 -52
  270. data/spec/unit/util/storage_spec.rb +3 -1
  271. data/spec/unit/util/suidmanager_spec.rb +44 -41
  272. data/spec/unit/util_spec.rb +13 -6
  273. metadata +32 -10
  274. data/spec/integration/application/config_spec.rb +0 -74
  275. data/spec/unit/face/catalog_spec.rb +0 -6
  276. data/spec/unit/face/module_spec.rb +0 -3
@@ -11,24 +11,24 @@ describe Puppet::Indirector::JSON do
11
11
 
12
12
  context "#path" do
13
13
  before :each do
14
- Puppet[:server_datadir] = '/sample/datadir/master'
14
+ Puppet[:server_datadir] = '/sample/datadir/server'
15
15
  Puppet[:client_datadir] = '/sample/datadir/client'
16
16
  end
17
17
 
18
- it "uses the :server_datadir setting if this is the master" do
19
- allow(Puppet.run_mode).to receive(:master?).and_return(true)
18
+ it "uses the :server_datadir setting if this is the server" do
19
+ allow(Puppet.run_mode).to receive(:server?).and_return(true)
20
20
  expected = File.join(Puppet[:server_datadir], 'indirector_testing', 'testing.json')
21
21
  expect(subject.path('testing')).to eq(expected)
22
22
  end
23
23
 
24
- it "uses the :client_datadir setting if this is not the master" do
25
- allow(Puppet.run_mode).to receive(:master?).and_return(false)
24
+ it "uses the :client_datadir setting if this is not the server" do
25
+ allow(Puppet.run_mode).to receive(:server?).and_return(false)
26
26
  expected = File.join(Puppet[:client_datadir], 'indirector_testing', 'testing.json')
27
27
  expect(subject.path('testing')).to eq(expected)
28
28
  end
29
29
 
30
30
  it "overrides the default extension with a supplied value" do
31
- allow(Puppet.run_mode).to receive(:master?).and_return(true)
31
+ allow(Puppet.run_mode).to receive(:server?).and_return(true)
32
32
  expected = File.join(Puppet[:server_datadir], 'indirector_testing', 'testing.not-json')
33
33
  expect(subject.path('testing', '.not-json')).to eq(expected)
34
34
  end
@@ -50,7 +50,7 @@ describe Puppet::Indirector::JSON do
50
50
 
51
51
  context "handling requests" do
52
52
  before :each do
53
- allow(Puppet.run_mode).to receive(:master?).and_return(true)
53
+ allow(Puppet.run_mode).to receive(:server?).and_return(true)
54
54
  Puppet[:server_datadir] = tmpdir('jsondir')
55
55
  FileUtils.mkdir_p(File.join(Puppet[:server_datadir], 'indirector_testing'))
56
56
  end
@@ -158,7 +158,7 @@ describe Puppet::Indirector::JSON do
158
158
 
159
159
  context "#search" do
160
160
  before :each do
161
- allow(Puppet.run_mode).to receive(:master?).and_return(true)
161
+ allow(Puppet.run_mode).to receive(:server?).and_return(true)
162
162
  Puppet[:server_datadir] = tmpdir('jsondir')
163
163
  FileUtils.mkdir_p(File.join(Puppet[:server_datadir], 'indirector_testing'))
164
164
  end
@@ -19,7 +19,6 @@ describe Puppet::SSL::Key::File do
19
19
  allow(Puppet.settings).to receive(:use)
20
20
 
21
21
  @searcher = Puppet::SSL::Key::File.new
22
- allow(@searcher).to receive(:ca?).and_return(false)
23
22
  expect(@searcher.public_key_path("whatever")).to eq(File.expand_path("/public/key/dir/whatever.pem"))
24
23
  end
25
24
  end
@@ -11,24 +11,24 @@ describe Puppet::Indirector::Msgpack, :if => Puppet.features.msgpack? do
11
11
 
12
12
  context "#path" do
13
13
  before :each do
14
- Puppet[:server_datadir] = '/sample/datadir/master'
14
+ Puppet[:server_datadir] = '/sample/datadir/server'
15
15
  Puppet[:client_datadir] = '/sample/datadir/client'
16
16
  end
17
17
 
18
- it "uses the :server_datadir setting if this is the master" do
19
- allow(Puppet.run_mode).to receive(:master?).and_return(true)
18
+ it "uses the :server_datadir setting if this is the server" do
19
+ allow(Puppet.run_mode).to receive(:server?).and_return(true)
20
20
  expected = File.join(Puppet[:server_datadir], 'indirector_testing', 'testing.msgpack')
21
21
  expect(subject.path('testing')).to eq(expected)
22
22
  end
23
23
 
24
- it "uses the :client_datadir setting if this is not the master" do
25
- allow(Puppet.run_mode).to receive(:master?).and_return(false)
24
+ it "uses the :client_datadir setting if this is not the server" do
25
+ allow(Puppet.run_mode).to receive(:server?).and_return(false)
26
26
  expected = File.join(Puppet[:client_datadir], 'indirector_testing', 'testing.msgpack')
27
27
  expect(subject.path('testing')).to eq(expected)
28
28
  end
29
29
 
30
30
  it "overrides the default extension with a supplied value" do
31
- allow(Puppet.run_mode).to receive(:master?).and_return(true)
31
+ allow(Puppet.run_mode).to receive(:server?).and_return(true)
32
32
  expected = File.join(Puppet[:server_datadir], 'indirector_testing', 'testing.not-msgpack')
33
33
  expect(subject.path('testing', '.not-msgpack')).to eq(expected)
34
34
  end
@@ -50,7 +50,7 @@ describe Puppet::Indirector::Msgpack, :if => Puppet.features.msgpack? do
50
50
 
51
51
  context "handling requests" do
52
52
  before :each do
53
- allow(Puppet.run_mode).to receive(:master?).and_return(true)
53
+ allow(Puppet.run_mode).to receive(:server?).and_return(true)
54
54
  Puppet[:server_datadir] = tmpdir('msgpackdir')
55
55
  FileUtils.mkdir_p(File.join(Puppet[:server_datadir], 'indirector_testing'))
56
56
  end
@@ -158,7 +158,7 @@ describe Puppet::Indirector::Msgpack, :if => Puppet.features.msgpack? do
158
158
 
159
159
  context "#search" do
160
160
  before :each do
161
- allow(Puppet.run_mode).to receive(:master?).and_return(true)
161
+ allow(Puppet.run_mode).to receive(:server?).and_return(true)
162
162
  Puppet[:server_datadir] = tmpdir('msgpackdir')
163
163
  FileUtils.mkdir_p(File.join(Puppet[:server_datadir], 'indirector_testing'))
164
164
  end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+ require 'puppet/node'
3
+ require 'puppet/indirector/node/json'
4
+
5
+ describe Puppet::Node::Json do
6
+ describe '#save' do
7
+ subject(:indirection) { described_class.indirection }
8
+
9
+ let(:env) { Puppet::Node::Environment.create(:testing, []) }
10
+ let(:node) { Puppet::Node.new('node_name', :environment => env) }
11
+ let(:file) { File.join(Puppet[:client_datadir], "node", "node_name.json") }
12
+
13
+ before do
14
+ indirection.terminus_class = :json
15
+ end
16
+
17
+ it 'saves the instance of the node as JSON to disk' do
18
+ indirection.save(node)
19
+ json = Puppet::FileSystem.read(file, :encoding => 'bom|utf-8')
20
+ content = Puppet::Util::Json.load(json)
21
+ expect(content["name"]).to eq('node_name')
22
+ end
23
+
24
+ context 'when node cannot be saved' do
25
+ it 'raises Errno::EISDIR' do
26
+ FileUtils.mkdir_p(file)
27
+ expect {
28
+ indirection.save(node)
29
+ }.to raise_error(Errno::EISDIR, /node_name.json/)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -10,7 +10,7 @@ describe Puppet::Node::Rest do
10
10
 
11
11
  before :each do
12
12
  Puppet[:server] = 'compiler.example.com'
13
- Puppet[:masterport] = 8140
13
+ Puppet[:serverport] = 8140
14
14
 
15
15
  described_class.indirection.terminus_class = :rest
16
16
  end
@@ -1,9 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  require 'puppet/transaction/report'
4
- require 'puppet/indirector/report/yaml'
4
+ require 'puppet/indirector/report/json'
5
5
 
6
- describe Puppet::Transaction::Report::Yaml do
6
+ describe Puppet::Transaction::Report::Json do
7
+ include PuppetSpec::Files
7
8
  describe '#save' do
8
9
  subject(:indirection) { described_class.indirection }
9
10
 
@@ -17,19 +18,17 @@ describe Puppet::Transaction::Report::Yaml do
17
18
  let(:file) { request.path(:me) }
18
19
 
19
20
  before do
20
- indirection.terminus_class = :yaml
21
- end
21
+ Puppet[:lastrunreport] = File.join(Puppet[:statedir], "last_run_report.json")
22
22
 
23
- it 'is saves a report' do
24
- indirection.save(report)
23
+ indirection.terminus_class = :json
25
24
  end
26
25
 
27
- it 'saves the instance of the report as YAML to disk' do
26
+ it 'saves the instance of the report as JSON to disk' do
27
+
28
28
  indirection.save(report)
29
- content = Puppet::Util::Yaml.safe_load_file(
30
- Puppet[:lastrunreport], [Puppet::Transaction::Report]
31
- )
32
- expect(content.host).to eq(certname)
29
+ json = Puppet::FileSystem.read(Puppet[:lastrunreport], :encoding => 'bom|utf-8')
30
+ content = Puppet::Util::Json.load(json)
31
+ expect(content["host"]).to eq(certname)
33
32
  end
34
33
 
35
34
  it 'allows mode overwrite' do
@@ -37,8 +36,7 @@ describe Puppet::Transaction::Report::Yaml do
37
36
  indirection.save(report)
38
37
 
39
38
  if Puppet::Util::Platform.windows?
40
- require 'puppet/util/windows/security'
41
- mode = Puppet::Util::Windows::Security.get_mode(file)
39
+ mode = File.stat(file).mode
42
40
  else
43
41
  mode = Puppet::FileSystem.stat(file).mode
44
42
  end
@@ -62,21 +60,12 @@ describe Puppet::Transaction::Report::Yaml do
62
60
  end
63
61
  end
64
62
 
65
- context 'when repport is invalid' do
66
- it 'logs error' do
67
- expect(Puppet).to receive(:send_log).with(:err, /Could not save yaml ziggy: can't dump anonymous class/)
68
-
69
- report.configuration_version = Class.new
70
- indirection.save(report)
71
- end
72
- end
73
-
74
63
  context 'when report cannot be saved' do
75
- it 'raises Errno::EISDIR' do
64
+ it 'raises Error' do
76
65
  FileUtils.mkdir_p(file)
77
66
  expect {
78
67
  indirection.save(report)
79
- }.to raise_error(Errno::EISDIR, /last_run_report.yaml/)
68
+ }.to raise_error(Errno::EISDIR, /last_run_report.json/)
80
69
  end
81
70
  end
82
71
  end
@@ -4,14 +4,6 @@ require 'puppet/transaction/report'
4
4
  require 'puppet/indirector/report/yaml'
5
5
 
6
6
  describe Puppet::Transaction::Report::Yaml do
7
- it "should be a subclass of the Yaml terminus" do
8
- expect(Puppet::Transaction::Report::Yaml.superclass).to equal(Puppet::Indirector::Yaml)
9
- end
10
-
11
- it "should have documentation" do
12
- expect(Puppet::Transaction::Report::Yaml.doc).not_to be_nil
13
- end
14
-
15
7
  it "should be registered with the report indirection" do
16
8
  indirection = Puppet::Indirector::Indirection.instance(:report)
17
9
  expect(Puppet::Transaction::Report::Yaml.indirection).to equal(indirection)
@@ -24,4 +16,76 @@ describe Puppet::Transaction::Report::Yaml do
24
16
  it "should unconditionally save/load from the --lastrunreport setting" do
25
17
  expect(subject.path(:me)).to eq(Puppet[:lastrunreport])
26
18
  end
19
+
20
+ describe '#save' do
21
+ subject(:indirection) { described_class.indirection }
22
+
23
+ let(:request) { described_class.new }
24
+ let(:certname) { 'ziggy' }
25
+ let(:report) do
26
+ report = Puppet::Transaction::Report.new
27
+ report.host = certname
28
+ report
29
+ end
30
+ let(:file) { request.path(:me) }
31
+
32
+ before do
33
+ indirection.terminus_class = :yaml
34
+ end
35
+
36
+ it 'saves the instance of the report as YAML to disk' do
37
+ indirection.save(report)
38
+ content = Puppet::Util::Yaml.safe_load_file(
39
+ Puppet[:lastrunreport], [Puppet::Transaction::Report]
40
+ )
41
+ expect(content.host).to eq(certname)
42
+ end
43
+
44
+ it 'allows mode overwrite' do
45
+ Puppet.settings.setting(:lastrunreport).mode = '0644'
46
+ indirection.save(report)
47
+
48
+ if Puppet::Util::Platform.windows?
49
+ mode = File.stat(file).mode
50
+ else
51
+ mode = Puppet::FileSystem.stat(file).mode
52
+ end
53
+
54
+ expect(mode & 07777).to eq(0644)
55
+ end
56
+
57
+ context 'when mode is invalid' do
58
+ before do
59
+ Puppet.settings.setting(:lastrunreport).mode = '9999'
60
+ end
61
+
62
+ after do
63
+ Puppet.settings.setting(:lastrunreport).mode = '0644'
64
+ end
65
+
66
+ it 'raises Puppet::DevError ' do
67
+ expect{
68
+ indirection.save(report)
69
+ }.to raise_error(Puppet::DevError, "replace_file mode: 9999 is invalid")
70
+ end
71
+ end
72
+
73
+ context 'when repport is invalid' do
74
+ it 'logs error' do
75
+ expect(Puppet).to receive(:send_log).with(:err, /Could not save yaml ziggy: can't dump anonymous class/)
76
+
77
+ report.configuration_version = Class.new
78
+ indirection.save(report)
79
+ end
80
+ end
81
+
82
+ context 'when report cannot be saved' do
83
+ it 'raises Error' do
84
+ FileUtils.mkdir_p(file)
85
+ expect {
86
+ indirection.save(report)
87
+ }.to raise_error(Errno::EISDIR, /last_run_report.yaml/)
88
+ end
89
+ end
90
+ end
27
91
  end
@@ -126,8 +126,8 @@ describe Puppet::Indirector::Request do
126
126
  expect(Puppet::Indirector::Request.new(:ind, :method, "http://host:543/", nil).port).to eq(543)
127
127
  end
128
128
 
129
- it "should default to the masterport if the URI scheme is 'puppet'" do
130
- Puppet[:masterport] = "321"
129
+ it "should default to the serverport if the URI scheme is 'puppet'" do
130
+ Puppet[:serverport] = "321"
131
131
  expect(Puppet::Indirector::Request.new(:ind, :method, "puppet://host/", nil).port).to eq(321)
132
132
  end
133
133
 
@@ -534,7 +534,7 @@ describe Puppet::Indirector::Request do
534
534
  expect(request.server).to be_nil
535
535
  expect(request.port).to be_nil
536
536
  expect(Puppet.settings[:server]).not_to be_nil
537
- expect(Puppet.settings[:masterport]).not_to be_nil
537
+ expect(Puppet.settings[:serverport]).not_to be_nil
538
538
  end
539
539
  end
540
540
  end
@@ -552,7 +552,7 @@ describe Puppet::Indirector::Request do
552
552
  req = Puppet::Indirector::Request.new('node', 'find', 'localhost', nil)
553
553
  req.do_request() do |request|
554
554
  expect(request.server).to eq(Puppet.settings[:server])
555
- expect(request.port).to eq(Puppet.settings[:masterport])
555
+ expect(request.port).to eq(Puppet.settings[:serverport])
556
556
  end
557
557
  end
558
558
  end
@@ -249,7 +249,7 @@ describe Puppet::Indirector::REST do
249
249
 
250
250
  it "should default to :port for the port setting" do
251
251
  expect(terminus_class).to receive(:port_setting).and_return(nil)
252
- Puppet[:masterport] = "543"
252
+ Puppet[:serverport] = "543"
253
253
  expect(terminus_class.port).to eq(543)
254
254
  end
255
255
 
@@ -9,7 +9,7 @@ describe Puppet::Indirector::Status::Rest do
9
9
 
10
10
  before :each do
11
11
  Puppet[:server] = 'compiler.example.com'
12
- Puppet[:masterport] = 8140
12
+ Puppet[:serverport] = 8140
13
13
 
14
14
  described_class.indirection.terminus_class = :rest
15
15
  end
@@ -38,30 +38,30 @@ describe Puppet::Indirector::Yaml do
38
38
 
39
39
  before :each do
40
40
  Puppet[:clientyamldir] = dir
41
- allow(Puppet.run_mode).to receive(:master?).and_return(false)
41
+ allow(Puppet.run_mode).to receive(:server?).and_return(false)
42
42
  end
43
43
 
44
44
  describe "when choosing file location" do
45
- it "should use the server_datadir if the run_mode is master" do
46
- allow(Puppet.run_mode).to receive(:master?).and_return(true)
45
+ it "should use the server_datadir if the run_mode is server" do
46
+ allow(Puppet.run_mode).to receive(:server?).and_return(true)
47
47
  Puppet[:yamldir] = serverdir
48
48
  expect(terminus.path(:me)).to match(/^#{serverdir}/)
49
49
  end
50
50
 
51
- it "should use the client yamldir if the run_mode is not master" do
52
- allow(Puppet.run_mode).to receive(:master?).and_return(false)
51
+ it "should use the client yamldir if the run_mode is not server" do
52
+ allow(Puppet.run_mode).to receive(:server?).and_return(false)
53
53
  Puppet[:clientyamldir] = clientdir
54
54
  expect(terminus.path(:me)).to match(/^#{clientdir}/)
55
55
  end
56
56
 
57
57
  it "should use the extension if one is specified" do
58
- allow(Puppet.run_mode).to receive(:master?).and_return(true)
58
+ allow(Puppet.run_mode).to receive(:server?).and_return(true)
59
59
  Puppet[:yamldir] = serverdir
60
60
  expect(terminus.path(:me,'.farfignewton')).to match(%r{\.farfignewton$})
61
61
  end
62
62
 
63
63
  it "should assume an extension of .yaml if none is specified" do
64
- allow(Puppet.run_mode).to receive(:master?).and_return(true)
64
+ allow(Puppet.run_mode).to receive(:server?).and_return(true)
65
65
  Puppet[:yamldir] = serverdir
66
66
  expect(terminus.path(:me)).to match(%r{\.yaml$})
67
67
  end
@@ -112,8 +112,8 @@ describe Puppet::Indirector, "when registering an indirection" do
112
112
  end
113
113
 
114
114
  it "should pass any provided options to the indirection during initialization" do
115
- expect(Puppet::Indirector::Indirection).to receive(:new).with(@thingie, :first, {:some => :options, :indirected_class => 'Thingie'})
116
- @indirection = @thingie.indirects :first, :some => :options
115
+ expect(Puppet::Indirector::Indirection).to receive(:new).with(@thingie, :first, {:doc => 'some docs', :indirected_class => 'Thingie'})
116
+ @indirection = @thingie.indirects :first, :doc => 'some docs'
117
117
  end
118
118
 
119
119
  it "should extend the class to handle serialization" do
@@ -247,6 +247,21 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => RUBY_PLATFORM =
247
247
  expect(subject).to include :result => :success
248
248
  graph_should_include 'pmtacceptance-mysql', nil => v('0.8.0')
249
249
  end
250
+
251
+ context 'with an already installed dependency' do
252
+ before { preinstall('pmtacceptance-stdlib', '2.6.0') }
253
+
254
+ def options
255
+ super.merge(:version => '0.7.0')
256
+ end
257
+
258
+ it 'installs given version without errors and does not change version of dependency' do
259
+ expect(subject).to include :result => :success
260
+ graph_should_include 'pmtacceptance-mysql', nil => v('0.7.0')
261
+ expect(subject[:error]).to be_nil
262
+ graph_should_include 'pmtacceptance-stdlib', v('2.6.0') => v('2.6.0')
263
+ end
264
+ end
250
265
  end
251
266
 
252
267
  context 'with a --version that cannot satisfy' do
@@ -258,6 +273,20 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => RUBY_PLATFORM =
258
273
  expect(subject).to include :result => :failure
259
274
  end
260
275
 
276
+ it 'prints a detailed error containing the modules that would not be satisfied' do
277
+ graph = double(SemanticPuppet::Dependency::Graph, :modules => ['pmtacceptance-mysql'])
278
+ exception = SemanticPuppet::Dependency::UnsatisfiableGraph.new(graph)
279
+ allow(exception).to receive(:respond_to?).and_return(true)
280
+ allow(exception).to receive(:unsatisfied).and_return('pmtacceptance-mysql')
281
+ allow(SemanticPuppet::Dependency).to receive(:resolve).and_raise(exception)
282
+
283
+ expect(subject[:error]).to include(:multiline)
284
+ expect(subject[:error][:multiline]).to include("Could not install module 'pmtacceptance-mysql' (> 1.0.0)")
285
+ expect(subject[:error][:multiline]).to include("The requested version cannot satisfy one or more of the following installed modules:")
286
+ expect(subject[:error][:multiline]).to include("pmtacceptance-keystone, expects 'pmtacceptance-mysql': >=0.6.1 <1.0.0")
287
+ expect(subject[:error][:multiline]).to include("Use `puppet module install 'pmtacceptance-mysql' --ignore-dependencies` to install only this module")
288
+ end
289
+
261
290
  context 'with --ignore-dependencies' do
262
291
  def options
263
292
  super.merge(:ignore_dependencies => true)
@@ -278,6 +307,43 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => RUBY_PLATFORM =
278
307
  graph_should_include 'pmtacceptance-mysql', nil => v('2.1.0')
279
308
  end
280
309
  end
310
+
311
+ context 'with an already installed dependency' do
312
+ let(:graph) {
313
+ double(SemanticPuppet::Dependency::Graph,
314
+ :dependencies => {
315
+ 'pmtacceptance-mysql' => {
316
+ :version => '2.1.0'
317
+ }
318
+ },
319
+ :modules => ['pmtacceptance-mysql'],
320
+ :unsatisfied => 'pmtacceptance-stdlib'
321
+ )
322
+ }
323
+
324
+ let(:unsatisfiable_graph_exception) { SemanticPuppet::Dependency::UnsatisfiableGraph.new(graph) }
325
+
326
+ before do
327
+ allow(SemanticPuppet::Dependency).to receive(:resolve).and_raise(unsatisfiable_graph_exception)
328
+ allow(unsatisfiable_graph_exception).to receive(:respond_to?).and_return(true)
329
+ allow(unsatisfiable_graph_exception).to receive(:unsatisfied).and_return(graph.unsatisfied)
330
+
331
+ preinstall('pmtacceptance-stdlib', '2.6.0')
332
+ end
333
+
334
+ def options
335
+ super.merge(:version => '2.1.0')
336
+ end
337
+
338
+ it 'fails to install and outputs a multiline error containing the versions, expectations and workaround' do
339
+ expect(subject).to include :result => :failure
340
+ expect(subject[:error]).to include(:multiline)
341
+ expect(subject[:error][:multiline]).to include("Could not install module 'pmtacceptance-mysql' (v2.1.0)")
342
+ expect(subject[:error][:multiline]).to include("The requested version cannot satisfy one or more of the following installed modules:")
343
+ expect(subject[:error][:multiline]).to include("pmtacceptance-stdlib, installed: 2.6.0, expected: >= 2.2.1")
344
+ expect(subject[:error][:multiline]).to include("Use `puppet module install 'pmtacceptance-mysql' --ignore-dependencies` to install only this module")
345
+ end
346
+ end
281
347
  end
282
348
  end
283
349