puppet 7.9.0 → 7.12.1

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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a3a94d69b4fdb82daece239f631857956cb724f3f4582f50ecbec6a79dc83082
4
- data.tar.gz: 3deb923bf30984f5543826b11c49d03d8b055c2135790447729e914e58840344
3
+ metadata.gz: 9c9a5ad10d1fe29d4c28a410c34cc28236cc3a678444e72cdbcbd824ead10f99
4
+ data.tar.gz: 104352f3f069d1f9043dc386f035f0c18da3bbc09f1715092b682a6508b97842
5
5
  SHA512:
6
- metadata.gz: 9bcd1f23664896b430462ffc78a1fc63621017f76a96681f89e625685e58a2cc85ab06907b55320298864102c87f3bb621af73a057c63da8204927a6d7cabf84
7
- data.tar.gz: a6f338d559652ebe22d656af5c6b4623a22bf69dea46bda83f676580b06595b5ed5fa02addb7b97bd1bafb4b332a53f4295d78ff02c2b08f593677055f9403dc
6
+ metadata.gz: 45dcb3ec19cc2b62b3a642a3adbe3697a08eee3f6f79158b30e4b32dfecc4eb908f4d0c7a22958606b2cf3ba4cfefc93f17108b1ec159e49bdb4ed18540538aa
7
+ data.tar.gz: d5efd563f4a3bd518883d6ed8b8721cff49b81b9f0ccc0a382bb3e96ac4262ebbfe6535a12451f6d6a4ff61399cc5e79aeb64e13832443998dba2fa0fb2702ba
data/Gemfile CHANGED
@@ -53,7 +53,7 @@ end
53
53
  group(:development, optional: true) do
54
54
  gem 'memory_profiler', require: false, platforms: [:mri]
55
55
  gem 'pry', require: false, platforms: [:ruby]
56
- gem "racc", "1.4.9", require: false, platforms: [:ruby]
56
+ gem "racc", "1.5.2", require: false, platforms: [:ruby]
57
57
  if RUBY_PLATFORM != 'java'
58
58
  gem 'ruby-prof', '>= 0.16.0', require: false
59
59
  end
@@ -63,7 +63,7 @@ group(:packaging) do
63
63
  gem 'packaging', *location_for(ENV['PACKAGING_LOCATION'] || '~> 0.99')
64
64
  end
65
65
 
66
- group(:documentation) do
66
+ group(:documentation, optional: true) do
67
67
  gem 'gettext-setup', '~> 0.28', require: false, platforms: [:ruby]
68
68
  gem 'ronn', '~> 0.7.3', require: false, platforms: [:ruby]
69
69
  end
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  GIT
2
2
  remote: git://github.com/puppetlabs/packaging
3
- revision: 4d6d51947f44bfa2fc282658836c15f69672e757
3
+ revision: 4c5359786cad0d12877e10e98948065bfeb3e304
4
4
  branch: 1.0.x
5
5
  specs:
6
- packaging (0.99.78.4.g4d6d519)
6
+ packaging (0.103.0)
7
7
  artifactory (~> 2)
8
8
  csv (= 3.1.5)
9
9
  rake (>= 12.3)
@@ -12,7 +12,7 @@ GIT
12
12
  PATH
13
13
  remote: .
14
14
  specs:
15
- puppet (7.9.0)
15
+ puppet (7.12.1)
16
16
  CFPropertyList (~> 2.2)
17
17
  concurrent-ruby (~> 1.0)
18
18
  deep_merge (~> 1.0)
@@ -40,11 +40,11 @@ GEM
40
40
  deep_merge (1.2.1)
41
41
  diff-lcs (1.4.4)
42
42
  docopt (0.6.1)
43
- facter (4.2.2)
43
+ facter (4.2.5)
44
44
  hocon (~> 1.3)
45
45
  thor (>= 1.0.1, < 2.0)
46
46
  fast_gettext (1.1.2)
47
- ffi (1.15.3)
47
+ ffi (1.15.4)
48
48
  gettext (3.2.9)
49
49
  locale (>= 2.0.5)
50
50
  text (>= 1.3.0)
@@ -70,7 +70,7 @@ GEM
70
70
  multi_json (1.15.0)
71
71
  mustache (1.1.1)
72
72
  optimist (3.0.1)
73
- parallel (1.20.1)
73
+ parallel (1.21.0)
74
74
  parser (2.7.2.0)
75
75
  ast (~> 2.4.1)
76
76
  powerpack (0.1.3)
@@ -80,9 +80,9 @@ GEM
80
80
  public_suffix (4.0.6)
81
81
  puppet-resource_api (1.8.14)
82
82
  hocon (>= 1.0)
83
- puppetserver-ca (2.2.0)
83
+ puppetserver-ca (2.3.5)
84
84
  facter (>= 2.0.1, < 5)
85
- racc (1.4.9)
85
+ racc (1.5.2)
86
86
  rainbow (2.2.2)
87
87
  rake
88
88
  rake (13.0.6)
@@ -127,10 +127,10 @@ GEM
127
127
  semantic_puppet (1.0.4)
128
128
  text (1.3.1)
129
129
  thor (1.1.0)
130
- unicode-display_width (1.7.0)
130
+ unicode-display_width (1.8.0)
131
131
  vcr (5.1.0)
132
- webmock (3.13.0)
133
- addressable (>= 2.3.6)
132
+ webmock (3.14.0)
133
+ addressable (>= 2.8.0)
134
134
  crack (>= 0.3.2)
135
135
  hashdiff (>= 0.4.0, < 2.0.0)
136
136
  yard (0.9.26)
@@ -153,7 +153,7 @@ DEPENDENCIES
153
153
  puppet!
154
154
  puppet-resource_api (~> 1.5)
155
155
  puppetserver-ca (~> 2.0)
156
- racc (= 1.4.9)
156
+ racc (= 1.5.2)
157
157
  rake (~> 13.0)
158
158
  rdoc (~> 6.0)
159
159
  ronn (~> 0.7.3)
File without changes
@@ -11,8 +11,8 @@ class CheckPuppet
11
11
 
12
12
  # default options
13
13
  OPTIONS = {
14
- :statefile => "/var/lib/puppet/state/state.yaml",
15
- :process => "puppetd",
14
+ :statefile => "/opt/puppetlabs/puppet/cache/state/state.yaml",
15
+ :process => "puppet",
16
16
  :interval => 30,
17
17
  }
18
18
 
data/ext/README.md ADDED
@@ -0,0 +1,13 @@
1
+ # `ext/` directory details
2
+ This directory contains files used internally when packaging [puppet](https://github.com/puppetlabs/puppet) and [puppet-agent](https://github.com/puppetlabs/puppet-agent)
3
+ What follows is a more detailed description of each directory/file:
4
+ * `debian/` - init scripts for puppet (used for Debian-based platforms that do not support systemd)
5
+ * `hiera/hiera.yaml` - installed to `$codedir/environments/production`as a default Hiera configuration file
6
+ * `osx/puppet.plist` - puppet launchd plist for macOS
7
+ * `redhat/` - init scripts for puppet (used for EL-based platforms that do not support systemd)
8
+ * `solaris/smf/` - service manifests for Solaris 11
9
+ * `suse/client.init` - init script for puppet (used for SUSE-based platforms that do not support systemd)
10
+ * `systemd/puppet.service` - systemd unit file for puppet
11
+ * `windows/` - the puppet daemon for Windows, and other useful `.bat` helper wrappers
12
+ * `build_defaults.yaml` - information pertaining to the puppetlabs build automation
13
+ * `project_data.yaml` - information used when packaging the puppet gem
@@ -334,6 +334,10 @@ generated by running puppet agent with '--genconfig'.
334
334
  specifying a time of 0.
335
335
  (This is a Puppet setting, and can go in puppet.conf.)
336
336
 
337
+ * --write_catalog_summary
338
+ After compiling the catalog saves the resource list and classes list to the node
339
+ in the state directory named classes.txt and resources.txt
340
+ (This is a Puppet setting, and can go in puppet.conf.)
337
341
 
338
342
  EXAMPLE
339
343
  -------
@@ -16,7 +16,9 @@ class Puppet::Application::Apply < Puppet::Application
16
16
  option("--use-nodes")
17
17
  option("--detailed-exitcodes")
18
18
 
19
- option("--write-catalog-summary")
19
+ option("--write-catalog-summary") do |arg|
20
+ Puppet[:write_catalog_summary] = arg
21
+ end
20
22
 
21
23
  option("--catalog catalog", "-c catalog") do |arg|
22
24
  options[:catalog] = arg
@@ -169,6 +171,7 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
169
171
  def app_defaults
170
172
  super.merge({
171
173
  :default_file_terminus => :file_server,
174
+ :write_catalog_summary => false
172
175
  })
173
176
  end
174
177
 
@@ -247,7 +250,22 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
247
250
 
248
251
  catalog.retrieval_duration = Time.now - starttime
249
252
 
250
- if options[:write_catalog_summary]
253
+ # We accept either the global option `--write_catalog_summary`
254
+ # corresponding to the new setting, or the application option
255
+ # `--write-catalog-summary`. The latter is needed to maintain backwards
256
+ # compatibility.
257
+ #
258
+ # Puppet settings parse global options using PuppetOptionParser, but it
259
+ # only recognizes underscores, not dashes.
260
+ # The base application parses app specific options using ruby's builtin
261
+ # OptionParser. As of ruby 2.4, it will accept either underscores or
262
+ # dashes, but prefer dashes.
263
+ #
264
+ # So if underscores are used, the PuppetOptionParser will parse it and
265
+ # store that in Puppet[:write_catalog_summary]. If dashes are used,
266
+ # OptionParser will parse it, and set Puppet[:write_catalog_summary]. In
267
+ # either case, settings will contain the correct value.
268
+ if Puppet[:write_catalog_summary]
251
269
  catalog.write_class_file
252
270
  catalog.write_resource_file
253
271
  end
@@ -225,21 +225,23 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
225
225
  def find_or_save_resources(type, name, params)
226
226
  key = local_key(type, name)
227
227
 
228
- if name
229
- if params.empty?
230
- [ Puppet::Resource.indirection.find( key ) ]
228
+ Puppet.override(stringify_rich: true) do
229
+ if name
230
+ if params.empty?
231
+ [ Puppet::Resource.indirection.find( key ) ]
232
+ else
233
+ resource = Puppet::Resource.new( type, name, :parameters => params )
234
+
235
+ # save returns [resource that was saved, transaction log from applying the resource]
236
+ save_result = Puppet::Resource.indirection.save(resource, key)
237
+ [ save_result.first ]
238
+ end
231
239
  else
232
- resource = Puppet::Resource.new( type, name, :parameters => params )
233
-
234
- # save returns [resource that was saved, transaction log from applying the resource]
235
- save_result = Puppet::Resource.indirection.save(resource, key)
236
- [ save_result.first ]
237
- end
238
- else
239
- if type == "file"
240
- raise _("Listing all file instances is not supported. Please specify a file or directory, e.g. puppet resource file /etc")
240
+ if type == "file"
241
+ raise _("Listing all file instances is not supported. Please specify a file or directory, e.g. puppet resource file /etc")
242
+ end
243
+ Puppet::Resource.indirection.search( key, {} )
241
244
  end
242
- Puppet::Resource.indirection.search( key, {} )
243
245
  end
244
246
  end
245
247
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Puppet
2
3
  module Concurrent
3
4
  module ThreadLocalSingleton
@@ -91,7 +91,7 @@ class Puppet::Configurer
91
91
 
92
92
  if result
93
93
  # don't use use cached catalog if it doesn't match server specified environment
94
- if @node_environment && result.environment != @environment
94
+ if result.environment != @environment
95
95
  Puppet.err _("Not using cached catalog because its environment '%{catalog_env}' does not match '%{local_env}'") % { catalog_env: result.environment, local_env: @environment }
96
96
  return nil
97
97
  end
@@ -118,14 +118,105 @@ class Puppet::Configurer
118
118
  catalog = result.to_ral
119
119
  catalog.finalize
120
120
  catalog.retrieval_duration = duration
121
- catalog.write_class_file
122
- catalog.write_resource_file
121
+
122
+ if Puppet[:write_catalog_summary]
123
+ catalog.write_class_file
124
+ catalog.write_resource_file
125
+ end
123
126
  end
124
127
  options[:report].add_times(:convert_catalog, catalog_conversion_time) if options[:report]
125
128
 
126
129
  catalog
127
130
  end
128
131
 
132
+ def warn_number_of_facts(size, max_number)
133
+ Puppet.warning _("The current total number of facts: %{size} exceeds the number of facts limit: %{max_size}") % { size: size, max_size: max_number }
134
+ end
135
+
136
+ def warn_fact_name_length(name, max_length)
137
+ Puppet.warning _("Fact %{name} with length: '%{length}' exceeds the length limit: %{limit}") % { name: name, length: name.to_s.bytesize, limit: max_length }
138
+ end
139
+
140
+ def warn_number_of_top_level_facts(size, max_number)
141
+ Puppet.warning _("The current number of top level facts: %{size} exceeds the top facts limit: %{max_size}") % { size: size, max_size: max_number }
142
+ end
143
+
144
+ def warn_fact_value_length(value, max_length)
145
+ Puppet.warning _("Fact value '%{value}' with the value length: '%{length}' exceeds the value length limit: %{max_length}") % { value: value, length:value.to_s.bytesize, max_length: max_length }
146
+ end
147
+
148
+ def warn_fact_payload_size(payload, max_size)
149
+ Puppet.warning _("Payload with the current size of: '%{payload}' exceeds the payload size limit: %{max_size}") % { payload: payload, max_size: max_size }
150
+ end
151
+
152
+ def check_fact_name_length(name, number_of_dots)
153
+ max_length = Puppet[:fact_name_length_soft_limit]
154
+ return if max_length.zero?
155
+
156
+ # rough byte size estimations of fact path as a postgresql btree index
157
+ size_as_btree_index = 8 + (number_of_dots * 2) + name.to_s.bytesize
158
+ warn_fact_name_length(name, max_length) if size_as_btree_index > max_length
159
+ end
160
+
161
+ def check_fact_values_length(values)
162
+ max_length = Puppet[:fact_value_length_soft_limit]
163
+ return if max_length.zero?
164
+
165
+ warn_fact_value_length(values, max_length) if values.to_s.bytesize > max_length
166
+ end
167
+
168
+ def check_top_level_number_limit(size)
169
+ max_size = Puppet[:top_level_facts_soft_limit]
170
+ return if max_size.zero?
171
+
172
+ warn_number_of_top_level_facts(size, max_size) if size > max_size
173
+ end
174
+
175
+ def check_total_number_limit(size)
176
+ max_size = Puppet[:number_of_facts_soft_limit]
177
+ return if max_size.zero?
178
+
179
+ warn_number_of_facts(size, max_size) if size > max_size
180
+ end
181
+
182
+ def check_payload_size(payload)
183
+ max_size = Puppet[:payload_soft_limit]
184
+ return if max_size.zero?
185
+
186
+ warn_fact_payload_size(payload, max_size) if payload > max_size
187
+ Puppet.debug _("The size of the payload is %{payload}") % {payload: payload}
188
+ end
189
+
190
+ def parse_fact_name_and_value_limits(object, path = [])
191
+ case object
192
+ when Hash
193
+ object.each do |key, value|
194
+ path.push(key)
195
+ parse_fact_name_and_value_limits(value, path)
196
+ path.pop
197
+ @number_of_facts += 1
198
+ end
199
+ when Array
200
+ object.each_with_index do |e, idx|
201
+ path.push(idx)
202
+ parse_fact_name_and_value_limits(e, path)
203
+ path.pop
204
+ end
205
+ else
206
+ check_fact_name_length(path.join(), path.size)
207
+ check_fact_values_length(object)
208
+ end
209
+ end
210
+
211
+ def check_facts_limits(facts)
212
+ @number_of_facts = 0
213
+ check_top_level_number_limit(facts.size)
214
+
215
+ parse_fact_name_and_value_limits(facts)
216
+ check_total_number_limit(@number_of_facts)
217
+ Puppet.debug _("The total number of facts registered is %{number_of_facts}") % {number_of_facts: @number_of_facts}
218
+ end
219
+
129
220
  def get_facts(options)
130
221
  if options[:pluginsync]
131
222
  plugin_sync_time = thinmark do
@@ -148,7 +239,9 @@ class Puppet::Configurer
148
239
  # facts_for_uploading may set Puppet[:node_name_value] as a side effect
149
240
  facter_time = thinmark do
150
241
  facts = find_facts
242
+ check_facts_limits(facts.to_data_hash['values'])
151
243
  facts_hash = encode_facts(facts) # encode for uploading # was: facts_for_uploading
244
+ check_payload_size(facts_hash[:facts].bytesize)
152
245
  end
153
246
  options[:report].add_times(:fact_generation, facter_time) if options[:report]
154
247
  end
@@ -255,6 +348,7 @@ class Puppet::Configurer
255
348
 
256
349
  def run_internal(options)
257
350
  report = options[:report]
351
+ report.initial_environment = Puppet[:environment]
258
352
 
259
353
  if options[:start_time]
260
354
  startup_time = Time.now - options[:start_time]
@@ -294,69 +388,42 @@ class Puppet::Configurer
294
388
  configured_environment = Puppet[:environment] if Puppet.settings.set_by_config?(:environment)
295
389
 
296
390
  # We only need to find out the environment to run in if we don't already have a catalog
297
- unless (cached_catalog || options[:catalog] || Puppet[:strict_environment_mode])
298
- begin
299
- node = nil
300
- node_retr_time = thinmark do
301
- node = Puppet::Node.indirection.find(Puppet[:node_name_value],
302
- :environment => Puppet::Node::Environment.remote(@environment),
303
- :configured_environment => configured_environment,
304
- :ignore_cache => true,
305
- :transaction_uuid => @transaction_uuid,
306
- :fail_on_404 => true)
307
- end
308
- options[:report].add_times(:node_retrieval, node_retr_time)
309
-
310
- if node
311
- # If we have deserialized a node from a rest call, we want to set
312
- # an environment instance as a simple 'remote' environment reference.
313
- if !node.has_environment_instance? && node.environment_name
314
- node.environment = Puppet::Node::Environment.remote(node.environment_name)
315
- end
316
-
317
- @node_environment = node.environment.to_s
318
-
319
- if node.environment.to_s != @environment
320
- Puppet.notice _("Local environment: '%{local_env}' doesn't match server specified node environment '%{node_env}', switching agent to '%{node_env}'.") % { local_env: @environment, node_env: node.environment }
321
- @environment = node.environment.to_s
322
- report.environment = @environment
323
- query_options = nil
324
- facts = nil
325
-
326
- new_env = Puppet::Node::Environment.remote(@environment)
327
- Puppet.push_context(
328
- {
329
- current_environment: new_env,
330
- loaders: Puppet::Pops::Loaders.new(new_env, true)
331
- },
332
- "Local node environment #{@environment} for configurer transaction"
333
- )
334
- else
335
- Puppet.info _("Using configured environment '%{env}'") % { env: @environment }
336
- end
337
- end
338
- rescue StandardError => detail
339
- Puppet.warning(_("Unable to fetch my node definition, but the agent run will continue:"))
340
- Puppet.warning(detail)
391
+ unless (cached_catalog || options[:catalog] || Puppet.settings.set_by_cli?(:environment) || Puppet[:strict_environment_mode])
392
+ Puppet.debug(_("Environment not passed via CLI and no catalog was given, attempting to find out the last server-specified environment"))
393
+ initial_environment, loaded_last_environment = last_server_specified_environment
394
+
395
+ unless loaded_last_environment
396
+ Puppet.debug(_("Requesting environment from the server"))
397
+ initial_environment = current_server_specified_environment(@environment, configured_environment, options)
398
+ end
399
+
400
+ if initial_environment
401
+ @environment = initial_environment
402
+ report.environment = initial_environment
403
+
404
+ push_current_environment_and_loaders
405
+ else
406
+ Puppet.debug(_("Could not find a usable environment in the lastrunfile. Either the file does not exist, does not have the required keys, or the values of 'initial_environment' and 'converged_environment' are identical."))
341
407
  end
342
408
  end
343
409
 
410
+ Puppet.info _("Using environment '%{env}'") % { env: @environment }
411
+
344
412
  # This is to maintain compatibility with anyone using this class
345
413
  # aside from agent, apply, device.
346
414
  unless Puppet.lookup(:loaders) { nil }
347
- new_env = Puppet::Node::Environment.remote(@environment)
348
- Puppet.push_context(
349
- {
350
- current_environment: new_env,
351
- loaders: Puppet::Pops::Loaders.new(new_env, true)
352
- },
353
- "Local node environment #{@environment} for configurer transaction"
354
- )
415
+ push_current_environment_and_loaders
355
416
  end
356
417
 
418
+ temp_value = options[:pluginsync]
419
+
420
+ # only validate server environment if pluginsync is requested
421
+ options[:pluginsync] = valid_server_environment? if options[:pluginsync] == true
422
+
357
423
  query_options, facts = get_facts(options) unless query_options
424
+ options[:pluginsync] = temp_value
425
+
358
426
  query_options[:configured_environment] = configured_environment
359
- options[:convert_for_node] = node
360
427
 
361
428
  catalog = prepare_and_retrieve_catalog(cached_catalog, facts, options, query_options)
362
429
  unless catalog
@@ -381,6 +448,8 @@ class Puppet::Configurer
381
448
  @environment = catalog.environment
382
449
  report.environment = @environment
383
450
 
451
+ push_current_environment_and_loaders
452
+
384
453
  query_options, facts = get_facts(options)
385
454
  query_options[:configured_environment] = configured_environment
386
455
 
@@ -454,6 +523,25 @@ class Puppet::Configurer
454
523
  end
455
524
  private :run_internal
456
525
 
526
+ def valid_server_environment?
527
+ session = Puppet.lookup(:http_session)
528
+ begin
529
+ fs = session.route_to(:fileserver)
530
+ fs.get_file_metadatas(path: URI(Puppet[:pluginsource]).path, recurse: :false, environment: @environment)
531
+ true
532
+ rescue Puppet::HTTP::ResponseError => detail
533
+ if detail.response.code == 404
534
+ Puppet.notice(_("Environment '%{environment}' not found on server, skipping initial pluginsync.") % { environment: @environment })
535
+ else
536
+ Puppet.log_exception(detail, detail.message)
537
+ end
538
+ false
539
+ rescue => detail
540
+ Puppet.log_exception(detail, detail.message)
541
+ false
542
+ end
543
+ end
544
+
457
545
  def find_functional_server
458
546
  begin
459
547
  session = Puppet.lookup(:http_session)
@@ -470,10 +558,88 @@ class Puppet::Configurer
470
558
  end
471
559
  private :find_functional_server
472
560
 
561
+ #
562
+ # @api private
563
+ #
564
+ # Read the last server-specified environment from the lastrunfile. The
565
+ # environment is considered to be server-specified if the values of
566
+ # `initial_environment` and `converged_environment` are different.
567
+ #
568
+ # @return [String, Boolean] An array containing a string with the environment
569
+ # read from the lastrunfile in case the server is authoritative, and a
570
+ # boolean marking whether the last environment was correctly loaded.
571
+ def last_server_specified_environment
572
+ return @last_server_specified_environment, @loaded_last_environment if @last_server_specified_environment
573
+
574
+ if Puppet::FileSystem.exist?(Puppet[:lastrunfile])
575
+ summary = Puppet::Util::Yaml.safe_load_file(Puppet[:lastrunfile])
576
+ return [nil, nil] unless summary['application']['run_mode'] == 'agent'
577
+ initial_environment = summary['application']['initial_environment']
578
+ converged_environment = summary['application']['converged_environment']
579
+ @last_server_specified_environment = converged_environment if initial_environment != converged_environment
580
+ Puppet.debug(_("Successfully loaded last environment from the lastrunfile"))
581
+ @loaded_last_environment = true
582
+ end
583
+
584
+ Puppet.debug(_("Found last server-specified environment: %{environment}") % { environment: @last_server_specified_environment }) if @last_server_specified_environment
585
+ [@last_server_specified_environment, @loaded_last_environment]
586
+ rescue => detail
587
+ Puppet.debug(_("Could not find last server-specified environment: %{detail}") % { detail: detail })
588
+ [nil, nil]
589
+ end
590
+ private :last_server_specified_environment
591
+
592
+ def current_server_specified_environment(current_environment, configured_environment, options)
593
+ return @server_specified_environment if @server_specified_environment
594
+
595
+ begin
596
+ node_retr_time = thinmark do
597
+ node = Puppet::Node.indirection.find(Puppet[:node_name_value],
598
+ :environment => Puppet::Node::Environment.remote(current_environment),
599
+ :configured_environment => configured_environment,
600
+ :ignore_cache => true,
601
+ :transaction_uuid => @transaction_uuid,
602
+ :fail_on_404 => true)
603
+
604
+ # The :rest node terminus returns a node with an environment_name, but not an
605
+ # environment instance. Attempting to get the environment instance will load
606
+ # it from disk, which will likely fail. So create a remote environment.
607
+ #
608
+ # The :plain node terminus returns a node with an environment, but not an
609
+ # environment_name.
610
+ if !node.has_environment_instance? && node.environment_name
611
+ node.environment = Puppet::Node::Environment.remote(node.environment_name)
612
+ end
613
+
614
+ @server_specified_environment = node.environment.to_s
615
+
616
+ if @server_specified_environment != @environment
617
+ Puppet.notice _("Local environment: '%{local_env}' doesn't match server specified node environment '%{node_env}', switching agent to '%{node_env}'.") % { local_env: @environment, node_env: @server_specified_environment }
618
+ end
619
+ end
620
+
621
+ options[:report].add_times(:node_retrieval, node_retr_time)
622
+
623
+ @server_specified_environment
624
+ rescue => detail
625
+ Puppet.warning(_("Unable to fetch my node definition, but the agent run will continue:"))
626
+ Puppet.warning(detail)
627
+ nil
628
+ end
629
+ end
630
+ private :current_server_specified_environment
631
+
473
632
  def send_report(report)
474
633
  puts report.summary if Puppet[:summarize]
475
634
  save_last_run_summary(report)
476
- Puppet::Transaction::Report.indirection.save(report, nil, :environment => Puppet::Node::Environment.remote(@environment)) if Puppet[:report]
635
+ if Puppet[:report]
636
+ remote = Puppet::Node::Environment.remote(@environment)
637
+ begin
638
+ Puppet::Transaction::Report.indirection.save(report, nil, ignore_cache: true, environment: remote)
639
+ ensure
640
+ Puppet::Transaction::Report.indirection.save(report, nil, ignore_terminus: true, environment: remote)
641
+ end
642
+ end
477
643
  rescue => detail
478
644
  Puppet.log_exception(detail, _("Could not send report: %{detail}") % { detail: detail })
479
645
  end
@@ -496,7 +662,7 @@ class Puppet::Configurer
496
662
  # @return [false] If an exception is raised during fact generation or
497
663
  # submission.
498
664
  def resubmit_facts
499
- ::Facter.clear
665
+ Puppet.runtime[:facter].clear
500
666
  facts = find_facts
501
667
 
502
668
  client = Puppet.runtime[:http]
@@ -531,6 +697,17 @@ class Puppet::Configurer
531
697
  end
532
698
  end
533
699
 
700
+ def push_current_environment_and_loaders
701
+ new_env = Puppet::Node::Environment.remote(@environment)
702
+ Puppet.push_context(
703
+ {
704
+ :current_environment => new_env,
705
+ :loaders => Puppet::Pops::Loaders.new(new_env, true)
706
+ },
707
+ "Local node environment #{@environment} for configurer transaction"
708
+ )
709
+ end
710
+
534
711
  def retrieve_catalog_from_cache(query_options)
535
712
  result = nil
536
713
  @duration = thinmark do
@@ -558,6 +735,7 @@ class Puppet::Configurer
558
735
  # don't update cache until after environment converges
559
736
  :ignore_cache_save => true,
560
737
  :environment => Puppet::Node::Environment.remote(@environment),
738
+ :check_environment => true,
561
739
  :fail_on_404 => true,
562
740
  :facts_for_catalog => facts
563
741
  )
@@ -18,7 +18,7 @@ class Puppet::Confine::Variable < Puppet::Confine
18
18
 
19
19
  # Retrieve the value from facter
20
20
  def facter_value
21
- @facter_value ||= ::Facter.value(name).to_s.downcase
21
+ @facter_value ||= Puppet.runtime[:facter].value(name).to_s.downcase
22
22
  end
23
23
 
24
24
  def initialize(values)