openvox 9.0.0.pre.rc1-universal-darwin

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1105) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +468 -0
  3. data/CODE_OF_CONDUCT.md +70 -0
  4. data/Gemfile +106 -0
  5. data/Gemfile.lock +666 -0
  6. data/Guardfile.example +76 -0
  7. data/LICENSE +202 -0
  8. data/README.md +63 -0
  9. data/Rakefile +173 -0
  10. data/bin/puppet +10 -0
  11. data/conf/environment.conf +18 -0
  12. data/conf/fileserver.conf +32 -0
  13. data/conf/hiera.yaml +11 -0
  14. data/conf/puppet.conf +6 -0
  15. data/examples/enc/regexp_nodes/classes/databases +2 -0
  16. data/examples/enc/regexp_nodes/classes/webservers +2 -0
  17. data/examples/enc/regexp_nodes/environment/development +2 -0
  18. data/examples/enc/regexp_nodes/parameters/service/prod +1 -0
  19. data/examples/enc/regexp_nodes/parameters/service/qa +3 -0
  20. data/examples/enc/regexp_nodes/parameters/service/sandbox +1 -0
  21. data/examples/enc/regexp_nodes/regexp_nodes.rb +270 -0
  22. data/examples/hiera/README.md +102 -0
  23. data/examples/hiera/data/common.yaml +12 -0
  24. data/examples/hiera/data/dc1.yaml +6 -0
  25. data/examples/hiera/hiera.yaml +15 -0
  26. data/examples/hiera/modules/ntp/data/common.yaml +4 -0
  27. data/examples/hiera/modules/ntp/hiera.yaml +9 -0
  28. data/examples/hiera/modules/ntp/manifests/config.pp +18 -0
  29. data/examples/hiera/modules/ntp/templates/ntp.conf.epp +3 -0
  30. data/examples/hiera/modules/users/manifests/common.pp +9 -0
  31. data/examples/hiera/modules/users/manifests/dc1.pp +9 -0
  32. data/examples/hiera/site.pp +3 -0
  33. data/examples/nagios/check_puppet.rb +123 -0
  34. data/ext/README.md +13 -0
  35. data/ext/build_defaults.yaml +18 -0
  36. data/ext/debian/puppet.default +4 -0
  37. data/ext/debian/puppet.init +113 -0
  38. data/ext/hiera/hiera.yaml +15 -0
  39. data/ext/osx/puppet.plist +32 -0
  40. data/ext/project_data.yaml +20 -0
  41. data/ext/redhat/client.init +169 -0
  42. data/ext/redhat/client.sysconfig +3 -0
  43. data/ext/solaris/smf/puppet +44 -0
  44. data/ext/solaris/smf/puppet.xml +46 -0
  45. data/ext/suse/client.init +141 -0
  46. data/ext/systemd/puppet.service +26 -0
  47. data/ext/windows/puppet_interactive.bat +6 -0
  48. data/ext/windows/puppet_shell.bat +9 -0
  49. data/ext/windows/run_puppet_interactive.bat +9 -0
  50. data/ext/windows/service/daemon.bat +6 -0
  51. data/ext/windows/service/daemon.rb +218 -0
  52. data/install.rb +392 -0
  53. data/lib/hiera/puppet_function.rb +85 -0
  54. data/lib/hiera/scope.rb +90 -0
  55. data/lib/hiera_puppet.rb +78 -0
  56. data/lib/puppet/agent/disabler.rb +55 -0
  57. data/lib/puppet/agent/locker.rb +46 -0
  58. data/lib/puppet/agent.rb +178 -0
  59. data/lib/puppet/application/agent.rb +525 -0
  60. data/lib/puppet/application/apply.rb +435 -0
  61. data/lib/puppet/application/catalog.rb +6 -0
  62. data/lib/puppet/application/config.rb +7 -0
  63. data/lib/puppet/application/describe.rb +255 -0
  64. data/lib/puppet/application/device.rb +440 -0
  65. data/lib/puppet/application/doc.rb +230 -0
  66. data/lib/puppet/application/epp.rb +7 -0
  67. data/lib/puppet/application/face_base.rb +277 -0
  68. data/lib/puppet/application/facts.rb +11 -0
  69. data/lib/puppet/application/filebucket.rb +324 -0
  70. data/lib/puppet/application/generate.rb +7 -0
  71. data/lib/puppet/application/help.rb +7 -0
  72. data/lib/puppet/application/indirection_base.rb +6 -0
  73. data/lib/puppet/application/lookup.rb +433 -0
  74. data/lib/puppet/application/module.rb +6 -0
  75. data/lib/puppet/application/node.rb +6 -0
  76. data/lib/puppet/application/parser.rb +7 -0
  77. data/lib/puppet/application/plugin.rb +6 -0
  78. data/lib/puppet/application/report.rb +6 -0
  79. data/lib/puppet/application/resource.rb +264 -0
  80. data/lib/puppet/application/script.rb +266 -0
  81. data/lib/puppet/application/ssl.rb +397 -0
  82. data/lib/puppet/application.rb +595 -0
  83. data/lib/puppet/application_support.rb +69 -0
  84. data/lib/puppet/coercion.rb +42 -0
  85. data/lib/puppet/compilable_resource_type.rb +17 -0
  86. data/lib/puppet/concurrent/lock.rb +15 -0
  87. data/lib/puppet/concurrent/synchronized.rb +15 -0
  88. data/lib/puppet/concurrent/thread_local_singleton.rb +18 -0
  89. data/lib/puppet/concurrent.rb +4 -0
  90. data/lib/puppet/configurer/downloader.rb +91 -0
  91. data/lib/puppet/configurer/fact_handler.rb +51 -0
  92. data/lib/puppet/configurer/plugin_handler.rb +61 -0
  93. data/lib/puppet/configurer.rb +766 -0
  94. data/lib/puppet/confine/any.rb +28 -0
  95. data/lib/puppet/confine/boolean.rb +47 -0
  96. data/lib/puppet/confine/exists.rb +21 -0
  97. data/lib/puppet/confine/false.rb +27 -0
  98. data/lib/puppet/confine/feature.rb +18 -0
  99. data/lib/puppet/confine/true.rb +28 -0
  100. data/lib/puppet/confine/variable.rb +61 -0
  101. data/lib/puppet/confine.rb +85 -0
  102. data/lib/puppet/confine_collection.rb +54 -0
  103. data/lib/puppet/confiner.rb +48 -0
  104. data/lib/puppet/context/trusted_information.rb +122 -0
  105. data/lib/puppet/context.rb +190 -0
  106. data/lib/puppet/daemon.rb +198 -0
  107. data/lib/puppet/data_binding.rb +16 -0
  108. data/lib/puppet/datatypes/error.rb +23 -0
  109. data/lib/puppet/datatypes/impl/error.rb +42 -0
  110. data/lib/puppet/datatypes.rb +218 -0
  111. data/lib/puppet/defaults.rb +2250 -0
  112. data/lib/puppet/environments.rb +590 -0
  113. data/lib/puppet/error.rb +142 -0
  114. data/lib/puppet/etc.rb +185 -0
  115. data/lib/puppet/external/dot.rb +315 -0
  116. data/lib/puppet/face/catalog/select.rb +51 -0
  117. data/lib/puppet/face/catalog.rb +167 -0
  118. data/lib/puppet/face/config.rb +267 -0
  119. data/lib/puppet/face/epp.rb +563 -0
  120. data/lib/puppet/face/facts.rb +184 -0
  121. data/lib/puppet/face/generate.rb +69 -0
  122. data/lib/puppet/face/help/action.erb +89 -0
  123. data/lib/puppet/face/help/face.erb +114 -0
  124. data/lib/puppet/face/help/global.erb +16 -0
  125. data/lib/puppet/face/help/man.erb +152 -0
  126. data/lib/puppet/face/help.rb +278 -0
  127. data/lib/puppet/face/module/changes.rb +44 -0
  128. data/lib/puppet/face/module/install.rb +149 -0
  129. data/lib/puppet/face/module/list.rb +271 -0
  130. data/lib/puppet/face/module/uninstall.rb +91 -0
  131. data/lib/puppet/face/module/upgrade.rb +89 -0
  132. data/lib/puppet/face/module.rb +21 -0
  133. data/lib/puppet/face/node/clean.rb +109 -0
  134. data/lib/puppet/face/node.rb +45 -0
  135. data/lib/puppet/face/parser.rb +226 -0
  136. data/lib/puppet/face/plugin.rb +62 -0
  137. data/lib/puppet/face/report.rb +54 -0
  138. data/lib/puppet/face/resource.rb +55 -0
  139. data/lib/puppet/face.rb +14 -0
  140. data/lib/puppet/facter_impl.rb +96 -0
  141. data/lib/puppet/feature/base.rb +76 -0
  142. data/lib/puppet/feature/bolt.rb +5 -0
  143. data/lib/puppet/feature/cfpropertylist.rb +5 -0
  144. data/lib/puppet/feature/dbus.rb +5 -0
  145. data/lib/puppet/feature/eventlog.rb +7 -0
  146. data/lib/puppet/feature/hiera_eyaml.rb +5 -0
  147. data/lib/puppet/feature/hocon.rb +5 -0
  148. data/lib/puppet/feature/libuser.rb +10 -0
  149. data/lib/puppet/feature/msgpack.rb +5 -0
  150. data/lib/puppet/feature/pe_license.rb +6 -0
  151. data/lib/puppet/feature/pson.rb +6 -0
  152. data/lib/puppet/feature/selinux.rb +5 -0
  153. data/lib/puppet/feature/ssh.rb +5 -0
  154. data/lib/puppet/feature/telnet.rb +5 -0
  155. data/lib/puppet/feature/zlib.rb +7 -0
  156. data/lib/puppet/ffi/posix/constants.rb +16 -0
  157. data/lib/puppet/ffi/posix/functions.rb +25 -0
  158. data/lib/puppet/ffi/posix.rb +12 -0
  159. data/lib/puppet/ffi/windows/api_types.rb +313 -0
  160. data/lib/puppet/ffi/windows/constants.rb +406 -0
  161. data/lib/puppet/ffi/windows/functions.rb +629 -0
  162. data/lib/puppet/ffi/windows/structs.rb +339 -0
  163. data/lib/puppet/ffi/windows.rb +14 -0
  164. data/lib/puppet/file_bucket/dipper.rb +181 -0
  165. data/lib/puppet/file_bucket/file.rb +131 -0
  166. data/lib/puppet/file_bucket.rb +6 -0
  167. data/lib/puppet/file_serving/base.rb +94 -0
  168. data/lib/puppet/file_serving/configuration/parser.rb +116 -0
  169. data/lib/puppet/file_serving/configuration.rb +116 -0
  170. data/lib/puppet/file_serving/content.rb +44 -0
  171. data/lib/puppet/file_serving/fileset.rb +190 -0
  172. data/lib/puppet/file_serving/http_metadata.rb +86 -0
  173. data/lib/puppet/file_serving/metadata.rb +174 -0
  174. data/lib/puppet/file_serving/mount/file.rb +126 -0
  175. data/lib/puppet/file_serving/mount/locales.rb +35 -0
  176. data/lib/puppet/file_serving/mount/modules.rb +29 -0
  177. data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
  178. data/lib/puppet/file_serving/mount/plugins.rb +35 -0
  179. data/lib/puppet/file_serving/mount/scripts.rb +27 -0
  180. data/lib/puppet/file_serving/mount/tasks.rb +26 -0
  181. data/lib/puppet/file_serving/mount.rb +40 -0
  182. data/lib/puppet/file_serving/terminus_helper.rb +33 -0
  183. data/lib/puppet/file_serving/terminus_selector.rb +33 -0
  184. data/lib/puppet/file_serving.rb +5 -0
  185. data/lib/puppet/file_system/file_impl.rb +189 -0
  186. data/lib/puppet/file_system/jruby.rb +25 -0
  187. data/lib/puppet/file_system/memory_file.rb +82 -0
  188. data/lib/puppet/file_system/memory_impl.rb +103 -0
  189. data/lib/puppet/file_system/path_pattern.rb +95 -0
  190. data/lib/puppet/file_system/posix.rb +52 -0
  191. data/lib/puppet/file_system/uniquefile.rb +187 -0
  192. data/lib/puppet/file_system/windows.rb +224 -0
  193. data/lib/puppet/file_system.rb +421 -0
  194. data/lib/puppet/forge/cache.rb +61 -0
  195. data/lib/puppet/forge/errors.rb +113 -0
  196. data/lib/puppet/forge/repository.rb +98 -0
  197. data/lib/puppet/forge.rb +257 -0
  198. data/lib/puppet/functions/abs.rb +64 -0
  199. data/lib/puppet/functions/alert.rb +16 -0
  200. data/lib/puppet/functions/all.rb +106 -0
  201. data/lib/puppet/functions/annotate.rb +110 -0
  202. data/lib/puppet/functions/any.rb +111 -0
  203. data/lib/puppet/functions/assert_type.rb +96 -0
  204. data/lib/puppet/functions/binary_file.rb +35 -0
  205. data/lib/puppet/functions/break.rb +49 -0
  206. data/lib/puppet/functions/call.rb +81 -0
  207. data/lib/puppet/functions/camelcase.rb +63 -0
  208. data/lib/puppet/functions/capitalize.rb +62 -0
  209. data/lib/puppet/functions/ceiling.rb +38 -0
  210. data/lib/puppet/functions/chomp.rb +58 -0
  211. data/lib/puppet/functions/chop.rb +68 -0
  212. data/lib/puppet/functions/compare.rb +127 -0
  213. data/lib/puppet/functions/contain.rb +58 -0
  214. data/lib/puppet/functions/convert_to.rb +36 -0
  215. data/lib/puppet/functions/crit.rb +16 -0
  216. data/lib/puppet/functions/debug.rb +16 -0
  217. data/lib/puppet/functions/defined.rb +163 -0
  218. data/lib/puppet/functions/dig.rb +70 -0
  219. data/lib/puppet/functions/downcase.rb +91 -0
  220. data/lib/puppet/functions/each.rb +169 -0
  221. data/lib/puppet/functions/emerg.rb +16 -0
  222. data/lib/puppet/functions/empty.rb +87 -0
  223. data/lib/puppet/functions/epp.rb +50 -0
  224. data/lib/puppet/functions/err.rb +16 -0
  225. data/lib/puppet/functions/eyaml_lookup_key.rb +103 -0
  226. data/lib/puppet/functions/filter.rb +138 -0
  227. data/lib/puppet/functions/find_file.rb +50 -0
  228. data/lib/puppet/functions/find_template.rb +65 -0
  229. data/lib/puppet/functions/flatten.rb +66 -0
  230. data/lib/puppet/functions/floor.rb +38 -0
  231. data/lib/puppet/functions/get.rb +152 -0
  232. data/lib/puppet/functions/getvar.rb +89 -0
  233. data/lib/puppet/functions/group_by.rb +62 -0
  234. data/lib/puppet/functions/hiera.rb +91 -0
  235. data/lib/puppet/functions/hiera_array.rb +83 -0
  236. data/lib/puppet/functions/hiera_hash.rb +94 -0
  237. data/lib/puppet/functions/hiera_include.rb +107 -0
  238. data/lib/puppet/functions/hocon_data.rb +41 -0
  239. data/lib/puppet/functions/import.rb +9 -0
  240. data/lib/puppet/functions/include.rb +56 -0
  241. data/lib/puppet/functions/index.rb +168 -0
  242. data/lib/puppet/functions/info.rb +16 -0
  243. data/lib/puppet/functions/inline_epp.rb +61 -0
  244. data/lib/puppet/functions/join.rb +58 -0
  245. data/lib/puppet/functions/json_data.rb +33 -0
  246. data/lib/puppet/functions/keys.rb +27 -0
  247. data/lib/puppet/functions/length.rb +45 -0
  248. data/lib/puppet/functions/lest.rb +57 -0
  249. data/lib/puppet/functions/lookup.rb +224 -0
  250. data/lib/puppet/functions/lstrip.rb +59 -0
  251. data/lib/puppet/functions/map.rb +137 -0
  252. data/lib/puppet/functions/match.rb +133 -0
  253. data/lib/puppet/functions/max.rb +250 -0
  254. data/lib/puppet/functions/min.rb +249 -0
  255. data/lib/puppet/functions/module_directory.rb +43 -0
  256. data/lib/puppet/functions/new.rb +1013 -0
  257. data/lib/puppet/functions/next.rb +35 -0
  258. data/lib/puppet/functions/notice.rb +16 -0
  259. data/lib/puppet/functions/partition.rb +62 -0
  260. data/lib/puppet/functions/reduce.rb +159 -0
  261. data/lib/puppet/functions/regsubst.rb +107 -0
  262. data/lib/puppet/functions/require.rb +81 -0
  263. data/lib/puppet/functions/return.rb +17 -0
  264. data/lib/puppet/functions/reverse_each.rb +96 -0
  265. data/lib/puppet/functions/round.rb +26 -0
  266. data/lib/puppet/functions/rstrip.rb +59 -0
  267. data/lib/puppet/functions/scanf.rb +46 -0
  268. data/lib/puppet/functions/size.rb +15 -0
  269. data/lib/puppet/functions/slice.rb +127 -0
  270. data/lib/puppet/functions/sort.rb +76 -0
  271. data/lib/puppet/functions/split.rb +78 -0
  272. data/lib/puppet/functions/step.rb +100 -0
  273. data/lib/puppet/functions/strftime.rb +214 -0
  274. data/lib/puppet/functions/strip.rb +59 -0
  275. data/lib/puppet/functions/then.rb +80 -0
  276. data/lib/puppet/functions/tree_each.rb +198 -0
  277. data/lib/puppet/functions/type.rb +74 -0
  278. data/lib/puppet/functions/unique.rb +135 -0
  279. data/lib/puppet/functions/unwrap.rb +61 -0
  280. data/lib/puppet/functions/upcase.rb +91 -0
  281. data/lib/puppet/functions/values.rb +27 -0
  282. data/lib/puppet/functions/versioncmp.rb +41 -0
  283. data/lib/puppet/functions/warning.rb +16 -0
  284. data/lib/puppet/functions/with.rb +34 -0
  285. data/lib/puppet/functions/yaml_data.rb +45 -0
  286. data/lib/puppet/functions.rb +858 -0
  287. data/lib/puppet/generate/models/type/property.rb +73 -0
  288. data/lib/puppet/generate/models/type/type.rb +68 -0
  289. data/lib/puppet/generate/templates/type/pcore.erb +42 -0
  290. data/lib/puppet/generate/type.rb +259 -0
  291. data/lib/puppet/gettext/config.rb +280 -0
  292. data/lib/puppet/gettext/module_translations.rb +43 -0
  293. data/lib/puppet/gettext/stubs.rb +13 -0
  294. data/lib/puppet/graph/key.rb +28 -0
  295. data/lib/puppet/graph/prioritizer.rb +31 -0
  296. data/lib/puppet/graph/rb_tree_map.rb +407 -0
  297. data/lib/puppet/graph/relationship_graph.rb +286 -0
  298. data/lib/puppet/graph/sequential_prioritizer.rb +33 -0
  299. data/lib/puppet/graph/simple_graph.rb +549 -0
  300. data/lib/puppet/graph.rb +11 -0
  301. data/lib/puppet/http/client.rb +529 -0
  302. data/lib/puppet/http/dns.rb +159 -0
  303. data/lib/puppet/http/errors.rb +50 -0
  304. data/lib/puppet/http/external_client.rb +89 -0
  305. data/lib/puppet/http/factory.rb +53 -0
  306. data/lib/puppet/http/pool.rb +174 -0
  307. data/lib/puppet/http/pool_entry.rb +19 -0
  308. data/lib/puppet/http/proxy.rb +139 -0
  309. data/lib/puppet/http/redirector.rb +87 -0
  310. data/lib/puppet/http/resolver/server_list.rb +88 -0
  311. data/lib/puppet/http/resolver/settings.rb +24 -0
  312. data/lib/puppet/http/resolver/srv.rb +42 -0
  313. data/lib/puppet/http/resolver.rb +50 -0
  314. data/lib/puppet/http/response.rb +104 -0
  315. data/lib/puppet/http/response_converter.rb +25 -0
  316. data/lib/puppet/http/response_net_http.rb +43 -0
  317. data/lib/puppet/http/retry_after_handler.rb +78 -0
  318. data/lib/puppet/http/service/ca.rb +133 -0
  319. data/lib/puppet/http/service/compiler.rb +356 -0
  320. data/lib/puppet/http/service/file_server.rb +200 -0
  321. data/lib/puppet/http/service/puppetserver.rb +54 -0
  322. data/lib/puppet/http/service/report.rb +62 -0
  323. data/lib/puppet/http/service.rb +201 -0
  324. data/lib/puppet/http/session.rb +124 -0
  325. data/lib/puppet/http/site.rb +44 -0
  326. data/lib/puppet/http.rb +48 -0
  327. data/lib/puppet/indirector/catalog/compiler.rb +432 -0
  328. data/lib/puppet/indirector/catalog/json.rb +42 -0
  329. data/lib/puppet/indirector/catalog/msgpack.rb +8 -0
  330. data/lib/puppet/indirector/catalog/rest.rb +51 -0
  331. data/lib/puppet/indirector/catalog/store_configs.rb +8 -0
  332. data/lib/puppet/indirector/catalog/yaml.rb +8 -0
  333. data/lib/puppet/indirector/code.rb +8 -0
  334. data/lib/puppet/indirector/data_binding/hiera.rb +99 -0
  335. data/lib/puppet/indirector/data_binding/none.rb +10 -0
  336. data/lib/puppet/indirector/direct_file_server.rb +20 -0
  337. data/lib/puppet/indirector/envelope.rb +13 -0
  338. data/lib/puppet/indirector/errors.rb +7 -0
  339. data/lib/puppet/indirector/exec.rb +40 -0
  340. data/lib/puppet/indirector/face.rb +142 -0
  341. data/lib/puppet/indirector/fact_search.rb +62 -0
  342. data/lib/puppet/indirector/facts/facter.rb +120 -0
  343. data/lib/puppet/indirector/facts/json.rb +29 -0
  344. data/lib/puppet/indirector/facts/memory.rb +11 -0
  345. data/lib/puppet/indirector/facts/network_device.rb +29 -0
  346. data/lib/puppet/indirector/facts/rest.rb +46 -0
  347. data/lib/puppet/indirector/facts/store_configs.rb +12 -0
  348. data/lib/puppet/indirector/facts/yaml.rb +31 -0
  349. data/lib/puppet/indirector/file_bucket_file/file.rb +266 -0
  350. data/lib/puppet/indirector/file_bucket_file/rest.rb +57 -0
  351. data/lib/puppet/indirector/file_bucket_file/selector.rb +54 -0
  352. data/lib/puppet/indirector/file_content/file.rb +9 -0
  353. data/lib/puppet/indirector/file_content/file_server.rb +9 -0
  354. data/lib/puppet/indirector/file_content/rest.rb +37 -0
  355. data/lib/puppet/indirector/file_content/selector.rb +32 -0
  356. data/lib/puppet/indirector/file_content.rb +7 -0
  357. data/lib/puppet/indirector/file_metadata/file.rb +9 -0
  358. data/lib/puppet/indirector/file_metadata/file_server.rb +9 -0
  359. data/lib/puppet/indirector/file_metadata/http.rb +49 -0
  360. data/lib/puppet/indirector/file_metadata/rest.rb +58 -0
  361. data/lib/puppet/indirector/file_metadata/selector.rb +32 -0
  362. data/lib/puppet/indirector/file_metadata.rb +7 -0
  363. data/lib/puppet/indirector/file_server.rb +57 -0
  364. data/lib/puppet/indirector/generic_http.rb +7 -0
  365. data/lib/puppet/indirector/indirection.rb +381 -0
  366. data/lib/puppet/indirector/json.rb +82 -0
  367. data/lib/puppet/indirector/memory.rb +37 -0
  368. data/lib/puppet/indirector/msgpack.rb +87 -0
  369. data/lib/puppet/indirector/node/exec.rb +70 -0
  370. data/lib/puppet/indirector/node/json.rb +9 -0
  371. data/lib/puppet/indirector/node/memory.rb +12 -0
  372. data/lib/puppet/indirector/node/msgpack.rb +9 -0
  373. data/lib/puppet/indirector/node/plain.rb +23 -0
  374. data/lib/puppet/indirector/node/rest.rb +31 -0
  375. data/lib/puppet/indirector/node/store_configs.rb +8 -0
  376. data/lib/puppet/indirector/node/yaml.rb +9 -0
  377. data/lib/puppet/indirector/none.rb +10 -0
  378. data/lib/puppet/indirector/plain.rb +11 -0
  379. data/lib/puppet/indirector/report/json.rb +36 -0
  380. data/lib/puppet/indirector/report/msgpack.rb +13 -0
  381. data/lib/puppet/indirector/report/processor.rb +63 -0
  382. data/lib/puppet/indirector/report/rest.rb +31 -0
  383. data/lib/puppet/indirector/report/yaml.rb +36 -0
  384. data/lib/puppet/indirector/request.rb +197 -0
  385. data/lib/puppet/indirector/resource/ral.rb +66 -0
  386. data/lib/puppet/indirector/resource/store_configs.rb +14 -0
  387. data/lib/puppet/indirector/resource/validator.rb +10 -0
  388. data/lib/puppet/indirector/rest.rb +66 -0
  389. data/lib/puppet/indirector/store_configs.rb +32 -0
  390. data/lib/puppet/indirector/terminus.rb +180 -0
  391. data/lib/puppet/indirector/yaml.rb +65 -0
  392. data/lib/puppet/indirector.rb +64 -0
  393. data/lib/puppet/info_service/class_information_service.rb +108 -0
  394. data/lib/puppet/info_service/plan_information_service.rb +38 -0
  395. data/lib/puppet/info_service/task_information_service.rb +45 -0
  396. data/lib/puppet/info_service.rb +27 -0
  397. data/lib/puppet/interface/action.rb +410 -0
  398. data/lib/puppet/interface/action_builder.rb +167 -0
  399. data/lib/puppet/interface/action_manager.rb +101 -0
  400. data/lib/puppet/interface/documentation.rb +363 -0
  401. data/lib/puppet/interface/face_collection.rb +141 -0
  402. data/lib/puppet/interface/option.rb +184 -0
  403. data/lib/puppet/interface/option_builder.rb +110 -0
  404. data/lib/puppet/interface/option_manager.rb +108 -0
  405. data/lib/puppet/interface.rb +240 -0
  406. data/lib/puppet/loaders.rb +31 -0
  407. data/lib/puppet/metatype/manager.rb +198 -0
  408. data/lib/puppet/module/plan.rb +166 -0
  409. data/lib/puppet/module/task.rb +288 -0
  410. data/lib/puppet/module.rb +482 -0
  411. data/lib/puppet/module_tool/applications/application.rb +96 -0
  412. data/lib/puppet/module_tool/applications/checksummer.rb +62 -0
  413. data/lib/puppet/module_tool/applications/installer.rb +402 -0
  414. data/lib/puppet/module_tool/applications/uninstaller.rb +121 -0
  415. data/lib/puppet/module_tool/applications/unpacker.rb +104 -0
  416. data/lib/puppet/module_tool/applications/upgrader.rb +288 -0
  417. data/lib/puppet/module_tool/applications.rb +14 -0
  418. data/lib/puppet/module_tool/checksums.rb +50 -0
  419. data/lib/puppet/module_tool/dependency.rb +42 -0
  420. data/lib/puppet/module_tool/errors/base.rb +17 -0
  421. data/lib/puppet/module_tool/errors/installer.rb +94 -0
  422. data/lib/puppet/module_tool/errors/shared.rb +228 -0
  423. data/lib/puppet/module_tool/errors/uninstaller.rb +51 -0
  424. data/lib/puppet/module_tool/errors/upgrader.rb +64 -0
  425. data/lib/puppet/module_tool/errors.rb +13 -0
  426. data/lib/puppet/module_tool/install_directory.rb +48 -0
  427. data/lib/puppet/module_tool/installed_modules.rb +99 -0
  428. data/lib/puppet/module_tool/local_tarball.rb +92 -0
  429. data/lib/puppet/module_tool/metadata.rb +226 -0
  430. data/lib/puppet/module_tool/shared_behaviors.rb +199 -0
  431. data/lib/puppet/module_tool/tar/gnu.rb +23 -0
  432. data/lib/puppet/module_tool/tar/mini.rb +112 -0
  433. data/lib/puppet/module_tool/tar.rb +20 -0
  434. data/lib/puppet/module_tool.rb +194 -0
  435. data/lib/puppet/network/authconfig.rb +9 -0
  436. data/lib/puppet/network/authorization.rb +21 -0
  437. data/lib/puppet/network/client_request.rb +32 -0
  438. data/lib/puppet/network/format.rb +116 -0
  439. data/lib/puppet/network/format_handler.rb +110 -0
  440. data/lib/puppet/network/format_support.rb +140 -0
  441. data/lib/puppet/network/formats.rb +338 -0
  442. data/lib/puppet/network/http/api/indirected_routes.rb +270 -0
  443. data/lib/puppet/network/http/api/indirection_type.rb +33 -0
  444. data/lib/puppet/network/http/api/master/v3/environments.rb +4 -0
  445. data/lib/puppet/network/http/api/master/v3.rb +4 -0
  446. data/lib/puppet/network/http/api/master.rb +5 -0
  447. data/lib/puppet/network/http/api/server/v3/environments.rb +54 -0
  448. data/lib/puppet/network/http/api/server/v3.rb +40 -0
  449. data/lib/puppet/network/http/api/server.rb +12 -0
  450. data/lib/puppet/network/http/api.rb +41 -0
  451. data/lib/puppet/network/http/connection.rb +288 -0
  452. data/lib/puppet/network/http/error.rb +75 -0
  453. data/lib/puppet/network/http/handler.rb +213 -0
  454. data/lib/puppet/network/http/issues.rb +14 -0
  455. data/lib/puppet/network/http/memory_response.rb +15 -0
  456. data/lib/puppet/network/http/request.rb +83 -0
  457. data/lib/puppet/network/http/response.rb +25 -0
  458. data/lib/puppet/network/http/route.rb +104 -0
  459. data/lib/puppet/network/http.rb +30 -0
  460. data/lib/puppet/network/http_pool.rb +78 -0
  461. data/lib/puppet/network/uri.rb +20 -0
  462. data/lib/puppet/network.rb +5 -0
  463. data/lib/puppet/node/environment.rb +638 -0
  464. data/lib/puppet/node/facts.rb +166 -0
  465. data/lib/puppet/node/server_facts.rb +40 -0
  466. data/lib/puppet/node.rb +260 -0
  467. data/lib/puppet/pal/catalog_compiler.rb +107 -0
  468. data/lib/puppet/pal/compiler.rb +227 -0
  469. data/lib/puppet/pal/function_signature.rb +54 -0
  470. data/lib/puppet/pal/json_catalog_encoder.rb +76 -0
  471. data/lib/puppet/pal/pal_api.rb +17 -0
  472. data/lib/puppet/pal/pal_impl.rb +561 -0
  473. data/lib/puppet/pal/plan_signature.rb +73 -0
  474. data/lib/puppet/pal/script_compiler.rb +75 -0
  475. data/lib/puppet/pal/task_signature.rb +64 -0
  476. data/lib/puppet/parameter/boolean.rb +17 -0
  477. data/lib/puppet/parameter/package_options.rb +33 -0
  478. data/lib/puppet/parameter/path.rb +61 -0
  479. data/lib/puppet/parameter/value.rb +93 -0
  480. data/lib/puppet/parameter/value_collection.rb +213 -0
  481. data/lib/puppet/parameter.rb +590 -0
  482. data/lib/puppet/parser/abstract_compiler.rb +35 -0
  483. data/lib/puppet/parser/ast/block_expression.rb +17 -0
  484. data/lib/puppet/parser/ast/branch.rb +21 -0
  485. data/lib/puppet/parser/ast/hostclass.rb +29 -0
  486. data/lib/puppet/parser/ast/leaf.rb +84 -0
  487. data/lib/puppet/parser/ast/node.rb +19 -0
  488. data/lib/puppet/parser/ast/pops_bridge.rb +245 -0
  489. data/lib/puppet/parser/ast/resource.rb +66 -0
  490. data/lib/puppet/parser/ast/resource_instance.rb +13 -0
  491. data/lib/puppet/parser/ast/resourceparam.rb +33 -0
  492. data/lib/puppet/parser/ast/top_level_construct.rb +6 -0
  493. data/lib/puppet/parser/ast.rb +61 -0
  494. data/lib/puppet/parser/catalog_compiler.rb +56 -0
  495. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +41 -0
  496. data/lib/puppet/parser/compiler/catalog_validator.rb +34 -0
  497. data/lib/puppet/parser/compiler.rb +616 -0
  498. data/lib/puppet/parser/e4_parser_adapter.rb +61 -0
  499. data/lib/puppet/parser/files.rb +93 -0
  500. data/lib/puppet/parser/functions/assert_type.rb +62 -0
  501. data/lib/puppet/parser/functions/binary_file.rb +26 -0
  502. data/lib/puppet/parser/functions/break.rb +41 -0
  503. data/lib/puppet/parser/functions/contain.rb +32 -0
  504. data/lib/puppet/parser/functions/create_resources.rb +114 -0
  505. data/lib/puppet/parser/functions/defined.rb +109 -0
  506. data/lib/puppet/parser/functions/dig.rb +40 -0
  507. data/lib/puppet/parser/functions/digest.rb +7 -0
  508. data/lib/puppet/parser/functions/each.rb +106 -0
  509. data/lib/puppet/parser/functions/epp.rb +40 -0
  510. data/lib/puppet/parser/functions/fail.rb +13 -0
  511. data/lib/puppet/parser/functions/file.rb +35 -0
  512. data/lib/puppet/parser/functions/filter.rb +81 -0
  513. data/lib/puppet/parser/functions/find_file.rb +29 -0
  514. data/lib/puppet/parser/functions/fqdn_rand.rb +46 -0
  515. data/lib/puppet/parser/functions/generate.rb +39 -0
  516. data/lib/puppet/parser/functions/hiera.rb +105 -0
  517. data/lib/puppet/parser/functions/hiera_array.rb +93 -0
  518. data/lib/puppet/parser/functions/hiera_hash.rb +103 -0
  519. data/lib/puppet/parser/functions/hiera_include.rb +102 -0
  520. data/lib/puppet/parser/functions/include.rb +36 -0
  521. data/lib/puppet/parser/functions/inline_epp.rb +52 -0
  522. data/lib/puppet/parser/functions/inline_template.rb +28 -0
  523. data/lib/puppet/parser/functions/lest.rb +51 -0
  524. data/lib/puppet/parser/functions/lookup.rb +134 -0
  525. data/lib/puppet/parser/functions/map.rb +78 -0
  526. data/lib/puppet/parser/functions/match.rb +45 -0
  527. data/lib/puppet/parser/functions/md5.rb +7 -0
  528. data/lib/puppet/parser/functions/new.rb +992 -0
  529. data/lib/puppet/parser/functions/next.rb +40 -0
  530. data/lib/puppet/parser/functions/realize.rb +22 -0
  531. data/lib/puppet/parser/functions/reduce.rb +139 -0
  532. data/lib/puppet/parser/functions/regsubst.rb +65 -0
  533. data/lib/puppet/parser/functions/require.rb +43 -0
  534. data/lib/puppet/parser/functions/return.rb +94 -0
  535. data/lib/puppet/parser/functions/reverse_each.rb +85 -0
  536. data/lib/puppet/parser/functions/scanf.rb +40 -0
  537. data/lib/puppet/parser/functions/sha1.rb +7 -0
  538. data/lib/puppet/parser/functions/sha256.rb +7 -0
  539. data/lib/puppet/parser/functions/shellquote.rb +63 -0
  540. data/lib/puppet/parser/functions/slice.rb +41 -0
  541. data/lib/puppet/parser/functions/split.rb +29 -0
  542. data/lib/puppet/parser/functions/sprintf.rb +62 -0
  543. data/lib/puppet/parser/functions/step.rb +86 -0
  544. data/lib/puppet/parser/functions/strftime.rb +187 -0
  545. data/lib/puppet/parser/functions/tag.rb +15 -0
  546. data/lib/puppet/parser/functions/tagged.rb +24 -0
  547. data/lib/puppet/parser/functions/template.rb +42 -0
  548. data/lib/puppet/parser/functions/then.rb +75 -0
  549. data/lib/puppet/parser/functions/type.rb +55 -0
  550. data/lib/puppet/parser/functions/versioncmp.rb +31 -0
  551. data/lib/puppet/parser/functions/with.rb +30 -0
  552. data/lib/puppet/parser/functions.rb +324 -0
  553. data/lib/puppet/parser/parser_factory.rb +32 -0
  554. data/lib/puppet/parser/relationship.rb +90 -0
  555. data/lib/puppet/parser/resource/param.rb +37 -0
  556. data/lib/puppet/parser/resource.rb +349 -0
  557. data/lib/puppet/parser/scope.rb +1137 -0
  558. data/lib/puppet/parser/script_compiler.rb +123 -0
  559. data/lib/puppet/parser/templatewrapper.rb +105 -0
  560. data/lib/puppet/parser/type_loader.rb +151 -0
  561. data/lib/puppet/parser.rb +22 -0
  562. data/lib/puppet/plugins/configuration.rb +31 -0
  563. data/lib/puppet/plugins/syntax_checkers.rb +99 -0
  564. data/lib/puppet/plugins.rb +11 -0
  565. data/lib/puppet/pops/adaptable.rb +197 -0
  566. data/lib/puppet/pops/adapters.rb +159 -0
  567. data/lib/puppet/pops/evaluator/access_operator.rb +732 -0
  568. data/lib/puppet/pops/evaluator/callable_signature.rb +108 -0
  569. data/lib/puppet/pops/evaluator/closure.rb +370 -0
  570. data/lib/puppet/pops/evaluator/collector_transformer.rb +237 -0
  571. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +88 -0
  572. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +30 -0
  573. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +71 -0
  574. data/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +38 -0
  575. data/lib/puppet/pops/evaluator/compare_operator.rb +269 -0
  576. data/lib/puppet/pops/evaluator/deferred_resolver.rb +230 -0
  577. data/lib/puppet/pops/evaluator/epp_evaluator.rb +121 -0
  578. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1317 -0
  579. data/lib/puppet/pops/evaluator/external_syntax_support.rb +47 -0
  580. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +83 -0
  581. data/lib/puppet/pops/evaluator/literal_evaluator.rb +100 -0
  582. data/lib/puppet/pops/evaluator/puppet_proc.rb +72 -0
  583. data/lib/puppet/pops/evaluator/relationship_operator.rb +188 -0
  584. data/lib/puppet/pops/evaluator/runtime3_converter.rb +225 -0
  585. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
  586. data/lib/puppet/pops/evaluator/runtime3_support.rb +528 -0
  587. data/lib/puppet/pops/functions/dispatch.rb +107 -0
  588. data/lib/puppet/pops/functions/dispatcher.rb +76 -0
  589. data/lib/puppet/pops/functions/function.rb +137 -0
  590. data/lib/puppet/pops/issue_reporter.rb +140 -0
  591. data/lib/puppet/pops/issues.rb +933 -0
  592. data/lib/puppet/pops/label_provider.rb +92 -0
  593. data/lib/puppet/pops/loader/base_loader.rb +176 -0
  594. data/lib/puppet/pops/loader/dependency_loader.rb +95 -0
  595. data/lib/puppet/pops/loader/gem_support.rb +54 -0
  596. data/lib/puppet/pops/loader/generic_plan_instantiator.rb +30 -0
  597. data/lib/puppet/pops/loader/loader.rb +219 -0
  598. data/lib/puppet/pops/loader/loader_paths.rb +413 -0
  599. data/lib/puppet/pops/loader/module_loaders.rb +552 -0
  600. data/lib/puppet/pops/loader/predefined_loader.rb +28 -0
  601. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +88 -0
  602. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +97 -0
  603. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
  604. data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +43 -0
  605. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +49 -0
  606. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +130 -0
  607. data/lib/puppet/pops/loader/runtime3_type_loader.rb +102 -0
  608. data/lib/puppet/pops/loader/simple_environment_loader.rb +20 -0
  609. data/lib/puppet/pops/loader/static_loader.rb +133 -0
  610. data/lib/puppet/pops/loader/task_instantiator.rb +46 -0
  611. data/lib/puppet/pops/loader/type_definition_instantiator.rb +104 -0
  612. data/lib/puppet/pops/loader/typed_name.rb +56 -0
  613. data/lib/puppet/pops/loader/uri_helper.rb +24 -0
  614. data/lib/puppet/pops/loaders.rb +548 -0
  615. data/lib/puppet/pops/lookup/configured_data_provider.rb +95 -0
  616. data/lib/puppet/pops/lookup/context.rb +208 -0
  617. data/lib/puppet/pops/lookup/data_adapter.rb +29 -0
  618. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +146 -0
  619. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +128 -0
  620. data/lib/puppet/pops/lookup/data_provider.rb +94 -0
  621. data/lib/puppet/pops/lookup/environment_data_provider.rb +37 -0
  622. data/lib/puppet/pops/lookup/explainer.rb +597 -0
  623. data/lib/puppet/pops/lookup/function_provider.rb +112 -0
  624. data/lib/puppet/pops/lookup/global_data_provider.rb +76 -0
  625. data/lib/puppet/pops/lookup/hiera_config.rb +821 -0
  626. data/lib/puppet/pops/lookup/interpolation.rb +164 -0
  627. data/lib/puppet/pops/lookup/invocation.rb +272 -0
  628. data/lib/puppet/pops/lookup/key_recorder.rb +19 -0
  629. data/lib/puppet/pops/lookup/location_resolver.rb +101 -0
  630. data/lib/puppet/pops/lookup/lookup_adapter.rb +474 -0
  631. data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
  632. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +94 -0
  633. data/lib/puppet/pops/lookup/module_data_provider.rb +92 -0
  634. data/lib/puppet/pops/lookup/sub_lookup.rb +96 -0
  635. data/lib/puppet/pops/lookup.rb +102 -0
  636. data/lib/puppet/pops/merge_strategy.rb +447 -0
  637. data/lib/puppet/pops/migration/migration_checker.rb +60 -0
  638. data/lib/puppet/pops/model/ast.pp +669 -0
  639. data/lib/puppet/pops/model/ast.rb +4776 -0
  640. data/lib/puppet/pops/model/ast_transformer.rb +131 -0
  641. data/lib/puppet/pops/model/factory.rb +1157 -0
  642. data/lib/puppet/pops/model/model_label_provider.rb +137 -0
  643. data/lib/puppet/pops/model/model_tree_dumper.rb +447 -0
  644. data/lib/puppet/pops/model/pn_transformer.rb +384 -0
  645. data/lib/puppet/pops/model/tree_dumper.rb +62 -0
  646. data/lib/puppet/pops/parser/code_merger.rb +29 -0
  647. data/lib/puppet/pops/parser/egrammar.ra +889 -0
  648. data/lib/puppet/pops/parser/eparser.rb +3184 -0
  649. data/lib/puppet/pops/parser/epp_parser.rb +52 -0
  650. data/lib/puppet/pops/parser/epp_support.rb +266 -0
  651. data/lib/puppet/pops/parser/evaluating_parser.rb +166 -0
  652. data/lib/puppet/pops/parser/heredoc_support.rb +153 -0
  653. data/lib/puppet/pops/parser/interpolation_support.rb +249 -0
  654. data/lib/puppet/pops/parser/lexer2.rb +789 -0
  655. data/lib/puppet/pops/parser/lexer_support.rb +219 -0
  656. data/lib/puppet/pops/parser/locatable.rb +21 -0
  657. data/lib/puppet/pops/parser/locator.rb +352 -0
  658. data/lib/puppet/pops/parser/parser_support.rb +252 -0
  659. data/lib/puppet/pops/parser/pn_parser.rb +318 -0
  660. data/lib/puppet/pops/parser/slurp_support.rb +119 -0
  661. data/lib/puppet/pops/patterns.rb +60 -0
  662. data/lib/puppet/pops/pcore.rb +136 -0
  663. data/lib/puppet/pops/pn.rb +239 -0
  664. data/lib/puppet/pops/puppet_stack.rb +63 -0
  665. data/lib/puppet/pops/resource/param.rb +56 -0
  666. data/lib/puppet/pops/resource/resource_type_impl.rb +296 -0
  667. data/lib/puppet/pops/resource/resource_type_set.pcore +22 -0
  668. data/lib/puppet/pops/semantic_error.rb +31 -0
  669. data/lib/puppet/pops/serialization/abstract_reader.rb +182 -0
  670. data/lib/puppet/pops/serialization/abstract_writer.rb +224 -0
  671. data/lib/puppet/pops/serialization/deserializer.rb +83 -0
  672. data/lib/puppet/pops/serialization/extension.rb +166 -0
  673. data/lib/puppet/pops/serialization/from_data_converter.rb +231 -0
  674. data/lib/puppet/pops/serialization/instance_reader.rb +21 -0
  675. data/lib/puppet/pops/serialization/instance_writer.rb +16 -0
  676. data/lib/puppet/pops/serialization/json.rb +301 -0
  677. data/lib/puppet/pops/serialization/json_path.rb +129 -0
  678. data/lib/puppet/pops/serialization/object.rb +73 -0
  679. data/lib/puppet/pops/serialization/serializer.rb +144 -0
  680. data/lib/puppet/pops/serialization/time_factory.rb +68 -0
  681. data/lib/puppet/pops/serialization/to_data_converter.rb +316 -0
  682. data/lib/puppet/pops/serialization/to_stringified_converter.rb +227 -0
  683. data/lib/puppet/pops/serialization.rb +45 -0
  684. data/lib/puppet/pops/time/timespan.rb +726 -0
  685. data/lib/puppet/pops/time/timestamp.rb +167 -0
  686. data/lib/puppet/pops/types/annotatable.rb +37 -0
  687. data/lib/puppet/pops/types/annotation.rb +73 -0
  688. data/lib/puppet/pops/types/class_loader.rb +132 -0
  689. data/lib/puppet/pops/types/implementation_registry.rb +137 -0
  690. data/lib/puppet/pops/types/iterable.rb +373 -0
  691. data/lib/puppet/pops/types/p_binary_type.rb +232 -0
  692. data/lib/puppet/pops/types/p_init_type.rb +241 -0
  693. data/lib/puppet/pops/types/p_meta_type.rb +95 -0
  694. data/lib/puppet/pops/types/p_object_type.rb +1142 -0
  695. data/lib/puppet/pops/types/p_object_type_extension.rb +229 -0
  696. data/lib/puppet/pops/types/p_runtime_type.rb +115 -0
  697. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +191 -0
  698. data/lib/puppet/pops/types/p_sem_ver_type.rb +155 -0
  699. data/lib/puppet/pops/types/p_sensitive_type.rb +81 -0
  700. data/lib/puppet/pops/types/p_timespan_type.rb +192 -0
  701. data/lib/puppet/pops/types/p_timestamp_type.rb +74 -0
  702. data/lib/puppet/pops/types/p_type_set_type.rb +394 -0
  703. data/lib/puppet/pops/types/p_uri_type.rb +198 -0
  704. data/lib/puppet/pops/types/puppet_object.rb +39 -0
  705. data/lib/puppet/pops/types/recursion_guard.rb +142 -0
  706. data/lib/puppet/pops/types/ruby_generator.rb +477 -0
  707. data/lib/puppet/pops/types/ruby_method.rb +32 -0
  708. data/lib/puppet/pops/types/string_converter.rb +1144 -0
  709. data/lib/puppet/pops/types/tree_iterators.rb +250 -0
  710. data/lib/puppet/pops/types/type_acceptor.rb +26 -0
  711. data/lib/puppet/pops/types/type_asserter.rb +49 -0
  712. data/lib/puppet/pops/types/type_assertion_error.rb +27 -0
  713. data/lib/puppet/pops/types/type_calculator.rb +829 -0
  714. data/lib/puppet/pops/types/type_conversion_error.rb +7 -0
  715. data/lib/puppet/pops/types/type_factory.rb +640 -0
  716. data/lib/puppet/pops/types/type_formatter.rb +796 -0
  717. data/lib/puppet/pops/types/type_mismatch_describer.rb +1105 -0
  718. data/lib/puppet/pops/types/type_parser.rb +690 -0
  719. data/lib/puppet/pops/types/type_set_reference.rb +62 -0
  720. data/lib/puppet/pops/types/type_with_members.rb +43 -0
  721. data/lib/puppet/pops/types/types.rb +3644 -0
  722. data/lib/puppet/pops/utils.rb +111 -0
  723. data/lib/puppet/pops/validation/checker4_0.rb +1151 -0
  724. data/lib/puppet/pops/validation/tasks_checker.rb +95 -0
  725. data/lib/puppet/pops/validation/validator_factory_4_0.rb +45 -0
  726. data/lib/puppet/pops/validation.rb +462 -0
  727. data/lib/puppet/pops/visitable.rb +8 -0
  728. data/lib/puppet/pops/visitor.rb +136 -0
  729. data/lib/puppet/pops.rb +124 -0
  730. data/lib/puppet/property/boolean.rb +9 -0
  731. data/lib/puppet/property/ensure.rb +103 -0
  732. data/lib/puppet/property/keyvalue.rb +159 -0
  733. data/lib/puppet/property/list.rb +71 -0
  734. data/lib/puppet/property/ordered_list.rb +30 -0
  735. data/lib/puppet/property.rb +610 -0
  736. data/lib/puppet/provider/aix_object.rb +491 -0
  737. data/lib/puppet/provider/command.rb +27 -0
  738. data/lib/puppet/provider/confine.rb +8 -0
  739. data/lib/puppet/provider/exec/posix.rb +63 -0
  740. data/lib/puppet/provider/exec/shell.rb +27 -0
  741. data/lib/puppet/provider/exec/windows.rb +57 -0
  742. data/lib/puppet/provider/exec.rb +107 -0
  743. data/lib/puppet/provider/file/posix.rb +162 -0
  744. data/lib/puppet/provider/file/windows.rb +151 -0
  745. data/lib/puppet/provider/group/aix.rb +101 -0
  746. data/lib/puppet/provider/group/directoryservice.rb +24 -0
  747. data/lib/puppet/provider/group/groupadd.rb +184 -0
  748. data/lib/puppet/provider/group/ldap.rb +51 -0
  749. data/lib/puppet/provider/group/pw.rb +52 -0
  750. data/lib/puppet/provider/group/windows_adsi.rb +116 -0
  751. data/lib/puppet/provider/ldap.rb +143 -0
  752. data/lib/puppet/provider/nameservice/directoryservice.rb +522 -0
  753. data/lib/puppet/provider/nameservice/objectadd.rb +22 -0
  754. data/lib/puppet/provider/nameservice/pw.rb +21 -0
  755. data/lib/puppet/provider/nameservice.rb +295 -0
  756. data/lib/puppet/provider/network_device.rb +73 -0
  757. data/lib/puppet/provider/package/aix.rb +171 -0
  758. data/lib/puppet/provider/package/appdmg.rb +113 -0
  759. data/lib/puppet/provider/package/apple.rb +49 -0
  760. data/lib/puppet/provider/package/apt.rb +265 -0
  761. data/lib/puppet/provider/package/aptitude.rb +34 -0
  762. data/lib/puppet/provider/package/aptrpm.rb +87 -0
  763. data/lib/puppet/provider/package/blastwave.rb +109 -0
  764. data/lib/puppet/provider/package/dnf.rb +57 -0
  765. data/lib/puppet/provider/package/dnfmodule.rb +143 -0
  766. data/lib/puppet/provider/package/dpkg.rb +191 -0
  767. data/lib/puppet/provider/package/fink.rb +99 -0
  768. data/lib/puppet/provider/package/freebsd.rb +49 -0
  769. data/lib/puppet/provider/package/gem.rb +296 -0
  770. data/lib/puppet/provider/package/hpux.rb +46 -0
  771. data/lib/puppet/provider/package/macports.rb +112 -0
  772. data/lib/puppet/provider/package/nim.rb +290 -0
  773. data/lib/puppet/provider/package/openbsd.rb +145 -0
  774. data/lib/puppet/provider/package/opkg.rb +85 -0
  775. data/lib/puppet/provider/package/pacman.rb +269 -0
  776. data/lib/puppet/provider/package/pip.rb +347 -0
  777. data/lib/puppet/provider/package/pip2.rb +18 -0
  778. data/lib/puppet/provider/package/pip3.rb +18 -0
  779. data/lib/puppet/provider/package/pkg.rb +300 -0
  780. data/lib/puppet/provider/package/pkgdmg.rb +157 -0
  781. data/lib/puppet/provider/package/pkgin.rb +88 -0
  782. data/lib/puppet/provider/package/pkgng.rb +178 -0
  783. data/lib/puppet/provider/package/pkgutil.rb +186 -0
  784. data/lib/puppet/provider/package/portage.rb +314 -0
  785. data/lib/puppet/provider/package/ports.rb +94 -0
  786. data/lib/puppet/provider/package/portupgrade.rb +233 -0
  787. data/lib/puppet/provider/package/puppet_gem.rb +25 -0
  788. data/lib/puppet/provider/package/puppetserver_gem.rb +171 -0
  789. data/lib/puppet/provider/package/rpm.rb +255 -0
  790. data/lib/puppet/provider/package/rug.rb +51 -0
  791. data/lib/puppet/provider/package/sun.rb +137 -0
  792. data/lib/puppet/provider/package/sunfreeware.rb +11 -0
  793. data/lib/puppet/provider/package/tdnf.rb +35 -0
  794. data/lib/puppet/provider/package/up2date.rb +40 -0
  795. data/lib/puppet/provider/package/urpmi.rb +57 -0
  796. data/lib/puppet/provider/package/windows/exe_package.rb +108 -0
  797. data/lib/puppet/provider/package/windows/msi_package.rb +72 -0
  798. data/lib/puppet/provider/package/windows/package.rb +113 -0
  799. data/lib/puppet/provider/package/windows.rb +131 -0
  800. data/lib/puppet/provider/package/xbps.rb +127 -0
  801. data/lib/puppet/provider/package/yum.rb +390 -0
  802. data/lib/puppet/provider/package/zypper.rb +206 -0
  803. data/lib/puppet/provider/package.rb +128 -0
  804. data/lib/puppet/provider/package_targetable.rb +71 -0
  805. data/lib/puppet/provider/parsedfile.rb +492 -0
  806. data/lib/puppet/provider/service/base.rb +133 -0
  807. data/lib/puppet/provider/service/bsd.rb +53 -0
  808. data/lib/puppet/provider/service/daemontools.rb +196 -0
  809. data/lib/puppet/provider/service/debian.rb +77 -0
  810. data/lib/puppet/provider/service/freebsd.rb +141 -0
  811. data/lib/puppet/provider/service/gentoo.rb +47 -0
  812. data/lib/puppet/provider/service/init.rb +194 -0
  813. data/lib/puppet/provider/service/launchd.rb +391 -0
  814. data/lib/puppet/provider/service/openbsd.rb +101 -0
  815. data/lib/puppet/provider/service/openrc.rb +72 -0
  816. data/lib/puppet/provider/service/openwrt.rb +36 -0
  817. data/lib/puppet/provider/service/rcng.rb +53 -0
  818. data/lib/puppet/provider/service/redhat.rb +75 -0
  819. data/lib/puppet/provider/service/runit.rb +107 -0
  820. data/lib/puppet/provider/service/service.rb +66 -0
  821. data/lib/puppet/provider/service/smf.rb +322 -0
  822. data/lib/puppet/provider/service/src.rb +147 -0
  823. data/lib/puppet/provider/service/systemd.rb +191 -0
  824. data/lib/puppet/provider/service/upstart.rb +385 -0
  825. data/lib/puppet/provider/service/windows.rb +179 -0
  826. data/lib/puppet/provider/user/aix.rb +365 -0
  827. data/lib/puppet/provider/user/directoryservice.rb +685 -0
  828. data/lib/puppet/provider/user/hpux.rb +93 -0
  829. data/lib/puppet/provider/user/ldap.rb +135 -0
  830. data/lib/puppet/provider/user/openbsd.rb +94 -0
  831. data/lib/puppet/provider/user/pw.rb +109 -0
  832. data/lib/puppet/provider/user/user_role_add.rb +243 -0
  833. data/lib/puppet/provider/user/useradd.rb +417 -0
  834. data/lib/puppet/provider/user/windows_adsi.rb +176 -0
  835. data/lib/puppet/provider.rb +613 -0
  836. data/lib/puppet/reference/configuration.rb +98 -0
  837. data/lib/puppet/reference/function.rb +19 -0
  838. data/lib/puppet/reference/indirection.rb +76 -0
  839. data/lib/puppet/reference/metaparameter.rb +35 -0
  840. data/lib/puppet/reference/providers.rb +119 -0
  841. data/lib/puppet/reference/report.rb +22 -0
  842. data/lib/puppet/reference/type.rb +111 -0
  843. data/lib/puppet/relationship.rb +85 -0
  844. data/lib/puppet/reports/http.rb +45 -0
  845. data/lib/puppet/reports/log.rb +15 -0
  846. data/lib/puppet/reports/store.rb +71 -0
  847. data/lib/puppet/reports.rb +95 -0
  848. data/lib/puppet/resource/catalog.rb +655 -0
  849. data/lib/puppet/resource/status.rb +231 -0
  850. data/lib/puppet/resource/type.rb +449 -0
  851. data/lib/puppet/resource/type_collection.rb +235 -0
  852. data/lib/puppet/resource.rb +673 -0
  853. data/lib/puppet/runtime.rb +67 -0
  854. data/lib/puppet/scheduler/job.rb +55 -0
  855. data/lib/puppet/scheduler/scheduler.rb +46 -0
  856. data/lib/puppet/scheduler/splay_job.rb +45 -0
  857. data/lib/puppet/scheduler/timer.rb +15 -0
  858. data/lib/puppet/scheduler.rb +18 -0
  859. data/lib/puppet/settings/alias_setting.rb +37 -0
  860. data/lib/puppet/settings/array_setting.rb +18 -0
  861. data/lib/puppet/settings/autosign_setting.rb +23 -0
  862. data/lib/puppet/settings/base_setting.rb +227 -0
  863. data/lib/puppet/settings/boolean_setting.rb +34 -0
  864. data/lib/puppet/settings/certificate_revocation_setting.rb +22 -0
  865. data/lib/puppet/settings/config_file.rb +148 -0
  866. data/lib/puppet/settings/directory_setting.rb +20 -0
  867. data/lib/puppet/settings/duration_setting.rb +33 -0
  868. data/lib/puppet/settings/enum_setting.rb +18 -0
  869. data/lib/puppet/settings/environment_conf.rb +220 -0
  870. data/lib/puppet/settings/errors.rb +14 -0
  871. data/lib/puppet/settings/file_or_directory_setting.rb +37 -0
  872. data/lib/puppet/settings/file_setting.rb +232 -0
  873. data/lib/puppet/settings/http_extra_headers_setting.rb +26 -0
  874. data/lib/puppet/settings/ini_file.rb +228 -0
  875. data/lib/puppet/settings/integer_setting.rb +19 -0
  876. data/lib/puppet/settings/path_setting.rb +10 -0
  877. data/lib/puppet/settings/port_setting.rb +17 -0
  878. data/lib/puppet/settings/priority_setting.rb +44 -0
  879. data/lib/puppet/settings/server_list_setting.rb +30 -0
  880. data/lib/puppet/settings/string_setting.rb +11 -0
  881. data/lib/puppet/settings/symbolic_enum_setting.rb +19 -0
  882. data/lib/puppet/settings/terminus_setting.rb +16 -0
  883. data/lib/puppet/settings/ttl_setting.rb +53 -0
  884. data/lib/puppet/settings/value_translator.rb +16 -0
  885. data/lib/puppet/settings.rb +1608 -0
  886. data/lib/puppet/ssl/base.rb +152 -0
  887. data/lib/puppet/ssl/certificate.rb +102 -0
  888. data/lib/puppet/ssl/certificate_request.rb +320 -0
  889. data/lib/puppet/ssl/certificate_request_attributes.rb +40 -0
  890. data/lib/puppet/ssl/certificate_signer.rb +39 -0
  891. data/lib/puppet/ssl/digest.rb +22 -0
  892. data/lib/puppet/ssl/error.rb +29 -0
  893. data/lib/puppet/ssl/oids.rb +199 -0
  894. data/lib/puppet/ssl/openssl_loader.rb +26 -0
  895. data/lib/puppet/ssl/ssl_context.rb +27 -0
  896. data/lib/puppet/ssl/ssl_provider.rb +356 -0
  897. data/lib/puppet/ssl/state_machine.rb +611 -0
  898. data/lib/puppet/ssl/verifier.rb +143 -0
  899. data/lib/puppet/ssl.rb +25 -0
  900. data/lib/puppet/syntax_checkers/base64.rb +42 -0
  901. data/lib/puppet/syntax_checkers/epp.rb +35 -0
  902. data/lib/puppet/syntax_checkers/json.rb +35 -0
  903. data/lib/puppet/syntax_checkers/pp.rb +35 -0
  904. data/lib/puppet/syntax_checkers.rb +5 -0
  905. data/lib/puppet/test/test_helper.rb +250 -0
  906. data/lib/puppet/thread_local.rb +6 -0
  907. data/lib/puppet/transaction/additional_resource_generator.rb +225 -0
  908. data/lib/puppet/transaction/event.rb +170 -0
  909. data/lib/puppet/transaction/event_manager.rb +180 -0
  910. data/lib/puppet/transaction/persistence.rb +117 -0
  911. data/lib/puppet/transaction/report.rb +511 -0
  912. data/lib/puppet/transaction/resource_harness.rb +331 -0
  913. data/lib/puppet/transaction.rb +492 -0
  914. data/lib/puppet/trusted_external.rb +46 -0
  915. data/lib/puppet/type/component.rb +95 -0
  916. data/lib/puppet/type/exec.rb +730 -0
  917. data/lib/puppet/type/file/checksum.rb +64 -0
  918. data/lib/puppet/type/file/checksum_value.rb +56 -0
  919. data/lib/puppet/type/file/content.rb +153 -0
  920. data/lib/puppet/type/file/ctime.rb +22 -0
  921. data/lib/puppet/type/file/data_sync.rb +101 -0
  922. data/lib/puppet/type/file/ensure.rb +203 -0
  923. data/lib/puppet/type/file/group.rb +50 -0
  924. data/lib/puppet/type/file/mode.rb +192 -0
  925. data/lib/puppet/type/file/mtime.rb +21 -0
  926. data/lib/puppet/type/file/owner.rb +52 -0
  927. data/lib/puppet/type/file/selcontext.rb +143 -0
  928. data/lib/puppet/type/file/source.rb +374 -0
  929. data/lib/puppet/type/file/target.rb +86 -0
  930. data/lib/puppet/type/file/type.rb +21 -0
  931. data/lib/puppet/type/file.rb +1144 -0
  932. data/lib/puppet/type/filebucket.rb +137 -0
  933. data/lib/puppet/type/group.rb +238 -0
  934. data/lib/puppet/type/notify.rb +48 -0
  935. data/lib/puppet/type/package.rb +739 -0
  936. data/lib/puppet/type/resources.rb +190 -0
  937. data/lib/puppet/type/schedule.rb +441 -0
  938. data/lib/puppet/type/service.rb +310 -0
  939. data/lib/puppet/type/stage.rb +29 -0
  940. data/lib/puppet/type/tidy.rb +382 -0
  941. data/lib/puppet/type/user.rb +861 -0
  942. data/lib/puppet/type/whit.rb +35 -0
  943. data/lib/puppet/type.rb +2616 -0
  944. data/lib/puppet/util/at_fork/noop.rb +17 -0
  945. data/lib/puppet/util/at_fork/solaris.rb +158 -0
  946. data/lib/puppet/util/at_fork.rb +37 -0
  947. data/lib/puppet/util/autoload.rb +221 -0
  948. data/lib/puppet/util/backups.rb +88 -0
  949. data/lib/puppet/util/character_encoding.rb +83 -0
  950. data/lib/puppet/util/checksums.rb +400 -0
  951. data/lib/puppet/util/classgen.rb +223 -0
  952. data/lib/puppet/util/colors.rb +102 -0
  953. data/lib/puppet/util/command_line/puppet_option_parser.rb +89 -0
  954. data/lib/puppet/util/command_line/trollop.rb +847 -0
  955. data/lib/puppet/util/command_line.rb +198 -0
  956. data/lib/puppet/util/constant_inflector.rb +25 -0
  957. data/lib/puppet/util/diff.rb +80 -0
  958. data/lib/puppet/util/docs.rb +132 -0
  959. data/lib/puppet/util/errors.rb +161 -0
  960. data/lib/puppet/util/execution.rb +446 -0
  961. data/lib/puppet/util/execution_stub.rb +28 -0
  962. data/lib/puppet/util/feature.rb +129 -0
  963. data/lib/puppet/util/file_watcher.rb +31 -0
  964. data/lib/puppet/util/fileparsing.rb +398 -0
  965. data/lib/puppet/util/filetype.rb +356 -0
  966. data/lib/puppet/util/http_proxy.rb +6 -0
  967. data/lib/puppet/util/inifile.rb +335 -0
  968. data/lib/puppet/util/instance_loader.rb +69 -0
  969. data/lib/puppet/util/json.rb +58 -0
  970. data/lib/puppet/util/json_lockfile.rb +47 -0
  971. data/lib/puppet/util/ldap/connection.rb +75 -0
  972. data/lib/puppet/util/ldap/generator.rb +42 -0
  973. data/lib/puppet/util/ldap/manager.rb +283 -0
  974. data/lib/puppet/util/ldap.rb +4 -0
  975. data/lib/puppet/util/libuser.conf +15 -0
  976. data/lib/puppet/util/libuser.rb +13 -0
  977. data/lib/puppet/util/limits.rb +14 -0
  978. data/lib/puppet/util/lockfile.rb +66 -0
  979. data/lib/puppet/util/log/destination.rb +50 -0
  980. data/lib/puppet/util/log/destinations.rb +253 -0
  981. data/lib/puppet/util/log.rb +436 -0
  982. data/lib/puppet/util/logging.rb +304 -0
  983. data/lib/puppet/util/metaid.rb +22 -0
  984. data/lib/puppet/util/metric.rb +68 -0
  985. data/lib/puppet/util/monkey_patches.rb +95 -0
  986. data/lib/puppet/util/multi_match.rb +55 -0
  987. data/lib/puppet/util/network_device/base.rb +24 -0
  988. data/lib/puppet/util/network_device/config.rb +105 -0
  989. data/lib/puppet/util/network_device/transport/base.rb +24 -0
  990. data/lib/puppet/util/network_device/transport.rb +7 -0
  991. data/lib/puppet/util/network_device.rb +19 -0
  992. data/lib/puppet/util/package/version/debian.rb +177 -0
  993. data/lib/puppet/util/package/version/gem.rb +18 -0
  994. data/lib/puppet/util/package/version/pip.rb +173 -0
  995. data/lib/puppet/util/package/version/range/eq.rb +17 -0
  996. data/lib/puppet/util/package/version/range/gt.rb +17 -0
  997. data/lib/puppet/util/package/version/range/gt_eq.rb +17 -0
  998. data/lib/puppet/util/package/version/range/lt.rb +17 -0
  999. data/lib/puppet/util/package/version/range/lt_eq.rb +17 -0
  1000. data/lib/puppet/util/package/version/range/min_max.rb +26 -0
  1001. data/lib/puppet/util/package/version/range/simple.rb +13 -0
  1002. data/lib/puppet/util/package/version/range.rb +57 -0
  1003. data/lib/puppet/util/package/version/rpm.rb +75 -0
  1004. data/lib/puppet/util/package.rb +43 -0
  1005. data/lib/puppet/util/pidlock.rb +103 -0
  1006. data/lib/puppet/util/platform.rb +72 -0
  1007. data/lib/puppet/util/plist.rb +161 -0
  1008. data/lib/puppet/util/posix.rb +206 -0
  1009. data/lib/puppet/util/profiler/aggregate.rb +82 -0
  1010. data/lib/puppet/util/profiler/around_profiler.rb +68 -0
  1011. data/lib/puppet/util/profiler/logging.rb +50 -0
  1012. data/lib/puppet/util/profiler/object_counts.rb +19 -0
  1013. data/lib/puppet/util/profiler/wall_clock.rb +36 -0
  1014. data/lib/puppet/util/profiler.rb +55 -0
  1015. data/lib/puppet/util/provider_features.rb +183 -0
  1016. data/lib/puppet/util/psych_support.rb +32 -0
  1017. data/lib/puppet/util/rdoc/code_objects.rb +293 -0
  1018. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +263 -0
  1019. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +16 -0
  1020. data/lib/puppet/util/rdoc/parser.rb +14 -0
  1021. data/lib/puppet/util/rdoc.rb +57 -0
  1022. data/lib/puppet/util/reference.rb +94 -0
  1023. data/lib/puppet/util/resource_template.rb +63 -0
  1024. data/lib/puppet/util/retry_action.rb +47 -0
  1025. data/lib/puppet/util/rpm_compare.rb +196 -0
  1026. data/lib/puppet/util/rubygems.rb +67 -0
  1027. data/lib/puppet/util/run_mode.rb +164 -0
  1028. data/lib/puppet/util/selinux.rb +346 -0
  1029. data/lib/puppet/util/skip_tags.rb +15 -0
  1030. data/lib/puppet/util/splayer.rb +20 -0
  1031. data/lib/puppet/util/storage.rb +100 -0
  1032. data/lib/puppet/util/suidmanager.rb +167 -0
  1033. data/lib/puppet/util/symbolic_file_mode.rb +156 -0
  1034. data/lib/puppet/util/tag_set.rb +29 -0
  1035. data/lib/puppet/util/tagging.rb +131 -0
  1036. data/lib/puppet/util/terminal.rb +18 -0
  1037. data/lib/puppet/util/user_attr.rb +23 -0
  1038. data/lib/puppet/util/warnings.rb +35 -0
  1039. data/lib/puppet/util/watched_file.rb +40 -0
  1040. data/lib/puppet/util/watcher/change_watcher.rb +35 -0
  1041. data/lib/puppet/util/watcher/periodic_watcher.rb +38 -0
  1042. data/lib/puppet/util/watcher/timer.rb +21 -0
  1043. data/lib/puppet/util/watcher.rb +17 -0
  1044. data/lib/puppet/util/windows/access_control_entry.rb +86 -0
  1045. data/lib/puppet/util/windows/access_control_list.rb +116 -0
  1046. data/lib/puppet/util/windows/adsi.rb +662 -0
  1047. data/lib/puppet/util/windows/com.rb +228 -0
  1048. data/lib/puppet/util/windows/daemon.rb +340 -0
  1049. data/lib/puppet/util/windows/error.rb +86 -0
  1050. data/lib/puppet/util/windows/eventlog.rb +191 -0
  1051. data/lib/puppet/util/windows/file.rb +358 -0
  1052. data/lib/puppet/util/windows/monkey_patches/process.rb +413 -0
  1053. data/lib/puppet/util/windows/principal.rb +204 -0
  1054. data/lib/puppet/util/windows/process.rb +360 -0
  1055. data/lib/puppet/util/windows/registry.rb +443 -0
  1056. data/lib/puppet/util/windows/root_certs.rb +110 -0
  1057. data/lib/puppet/util/windows/security.rb +909 -0
  1058. data/lib/puppet/util/windows/security_descriptor.rb +64 -0
  1059. data/lib/puppet/util/windows/service.rb +708 -0
  1060. data/lib/puppet/util/windows/sid.rb +291 -0
  1061. data/lib/puppet/util/windows/string.rb +17 -0
  1062. data/lib/puppet/util/windows/user.rb +551 -0
  1063. data/lib/puppet/util/windows.rb +58 -0
  1064. data/lib/puppet/util/yaml.rb +67 -0
  1065. data/lib/puppet/util.rb +769 -0
  1066. data/lib/puppet/vendor/require_vendored.rb +4 -0
  1067. data/lib/puppet/vendor.rb +59 -0
  1068. data/lib/puppet/version.rb +98 -0
  1069. data/lib/puppet/x509/cert_provider.rb +405 -0
  1070. data/lib/puppet/x509/pem_store.rb +57 -0
  1071. data/lib/puppet/x509.rb +13 -0
  1072. data/lib/puppet.rb +348 -0
  1073. data/lib/puppet_pal.rb +10 -0
  1074. data/lib/puppet_x.rb +16 -0
  1075. data/locales/config.yaml +29 -0
  1076. data/locales/en/puppet.po +19 -0
  1077. data/locales/puppet.pot +9736 -0
  1078. data/man/man5/puppet.conf.5 +1383 -0
  1079. data/man/man8/puppet-agent.8 +135 -0
  1080. data/man/man8/puppet-apply.8 +67 -0
  1081. data/man/man8/puppet-catalog.8 +194 -0
  1082. data/man/man8/puppet-config.8 +103 -0
  1083. data/man/man8/puppet-describe.8 +35 -0
  1084. data/man/man8/puppet-device.8 +83 -0
  1085. data/man/man8/puppet-doc.8 +30 -0
  1086. data/man/man8/puppet-epp.8 +232 -0
  1087. data/man/man8/puppet-facts.8 +156 -0
  1088. data/man/man8/puppet-filebucket.8 +134 -0
  1089. data/man/man8/puppet-generate.8 +54 -0
  1090. data/man/man8/puppet-help.8 +46 -0
  1091. data/man/man8/puppet-lookup.8 +71 -0
  1092. data/man/man8/puppet-module.8 +220 -0
  1093. data/man/man8/puppet-node.8 +108 -0
  1094. data/man/man8/puppet-parser.8 +87 -0
  1095. data/man/man8/puppet-plugin.8 +50 -0
  1096. data/man/man8/puppet-report.8 +84 -0
  1097. data/man/man8/puppet-resource.8 +63 -0
  1098. data/man/man8/puppet-script.8 +48 -0
  1099. data/man/man8/puppet-ssl.8 +43 -0
  1100. data/man/man8/puppet.8 +98 -0
  1101. data/tasks/build.rake +26 -0
  1102. data/tasks/cleanup.rake +19 -0
  1103. data/tasks/upload.rake +50 -0
  1104. data/tasks/vox.rake +17 -0
  1105. metadata +1391 -0
@@ -0,0 +1,1608 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../puppet'
4
+ require 'getoptlong'
5
+ require_relative '../puppet/util/watched_file'
6
+ require_relative '../puppet/util/command_line/puppet_option_parser'
7
+ require 'forwardable'
8
+ require 'fileutils'
9
+ require 'concurrent'
10
+ require_relative 'concurrent/lock'
11
+
12
+ # The class for handling configuration files.
13
+ class Puppet::Settings
14
+ extend Forwardable
15
+ include Enumerable
16
+
17
+ require_relative 'settings/errors'
18
+ require_relative 'settings/base_setting'
19
+ require_relative 'settings/string_setting'
20
+ require_relative 'settings/enum_setting'
21
+ require_relative 'settings/symbolic_enum_setting'
22
+ require_relative 'settings/array_setting'
23
+ require_relative 'settings/file_setting'
24
+ require_relative 'settings/directory_setting'
25
+ require_relative 'settings/file_or_directory_setting'
26
+ require_relative 'settings/path_setting'
27
+ require_relative 'settings/boolean_setting'
28
+ require_relative 'settings/integer_setting'
29
+ require_relative 'settings/port_setting'
30
+ require_relative 'settings/terminus_setting'
31
+ require_relative 'settings/duration_setting'
32
+ require_relative 'settings/ttl_setting'
33
+ require_relative 'settings/priority_setting'
34
+ require_relative 'settings/autosign_setting'
35
+ require_relative 'settings/config_file'
36
+ require_relative 'settings/value_translator'
37
+ require_relative 'settings/environment_conf'
38
+ require_relative 'settings/server_list_setting'
39
+ require_relative 'settings/http_extra_headers_setting'
40
+ require_relative 'settings/certificate_revocation_setting'
41
+ require_relative 'settings/alias_setting'
42
+
43
+ # local reference for convenience
44
+ PuppetOptionParser = Puppet::Util::CommandLine::PuppetOptionParser
45
+
46
+ attr_reader :timer
47
+
48
+ # These are the settings that every app is required to specify; there are
49
+ # reasonable defaults defined in application.rb.
50
+ REQUIRED_APP_SETTINGS = [:logdir, :confdir, :vardir, :codedir]
51
+
52
+ # The acceptable sections of the puppet.conf configuration file.
53
+ ALLOWED_SECTION_NAMES = %w[main server master agent user].freeze
54
+
55
+ NONE = 'none'
56
+
57
+ # This method is intended for OpenVox internal use only; it is a convenience method that
58
+ # returns reasonable application default settings values for a given run_mode.
59
+ def self.app_defaults_for_run_mode(run_mode)
60
+ {
61
+ :name => run_mode.to_s,
62
+ :run_mode => run_mode.name,
63
+ :confdir => run_mode.conf_dir,
64
+ :codedir => run_mode.code_dir,
65
+ :vardir => run_mode.var_dir,
66
+ :publicdir => run_mode.public_dir,
67
+ :rundir => run_mode.run_dir,
68
+ :logdir => run_mode.log_dir,
69
+ }
70
+ end
71
+
72
+ def self.default_certname
73
+ hostname = hostname_fact
74
+ domain = domain_fact
75
+ if domain and domain != ""
76
+ fqdn = [hostname, domain].join(".")
77
+ else
78
+ fqdn = hostname
79
+ end
80
+ fqdn.to_s.gsub(/\.$/, '')
81
+ end
82
+
83
+ def self.hostname_fact
84
+ Puppet.runtime[:facter].value('networking.hostname')
85
+ end
86
+
87
+ def self.domain_fact
88
+ Puppet.runtime[:facter].value('networking.domain')
89
+ end
90
+
91
+ def self.default_config_file_name
92
+ "puppet.conf"
93
+ end
94
+
95
+ def stringify_settings(section, settings = :all)
96
+ values_from_the_selected_section =
97
+ values(nil, section.to_sym)
98
+
99
+ loader_settings = {
100
+ :environmentpath => values_from_the_selected_section.interpolate(:environmentpath),
101
+ :basemodulepath => values_from_the_selected_section.interpolate(:basemodulepath),
102
+ }
103
+
104
+ Puppet.override(Puppet.base_context(loader_settings),
105
+ _("New environment loaders generated from the requested section.")) do
106
+ # And now we can lookup values that include those from environments configured from
107
+ # the requested section
108
+ values = values(Puppet[:environment].to_sym, section.to_sym)
109
+
110
+ to_be_rendered = {}
111
+ settings = Puppet.settings.to_a.collect(&:first) if settings == :all
112
+ settings.sort.each do |setting_name|
113
+ to_be_rendered[setting_name] = values.print(setting_name.to_sym)
114
+ end
115
+
116
+ stringifyhash(to_be_rendered)
117
+ end
118
+ end
119
+
120
+ def stringifyhash(hash)
121
+ newhash = {}
122
+ hash.each do |key, val|
123
+ key = key.to_s
124
+ case val
125
+ when Hash
126
+ newhash[key] = stringifyhash(val)
127
+ when Symbol
128
+ newhash[key] = val.to_s
129
+ else
130
+ newhash[key] = val
131
+ end
132
+ end
133
+ newhash
134
+ end
135
+
136
+ # Create a new collection of config settings.
137
+ def initialize
138
+ @config = {}
139
+ @shortnames = {}
140
+
141
+ @created = []
142
+
143
+ # Keep track of set values.
144
+ @value_sets = {
145
+ :cli => Values.new(:cli, @config),
146
+ :memory => Values.new(:memory, @config),
147
+ :application_defaults => Values.new(:application_defaults, @config),
148
+ :overridden_defaults => Values.new(:overridden_defaults, @config),
149
+ }
150
+ @configuration_file = nil
151
+
152
+ # And keep a per-environment cache
153
+ # We can't use Concurrent::Map because we want to preserve insertion order
154
+ @cache_lock = Puppet::Concurrent::Lock.new
155
+ @cache = Concurrent::Hash.new do |hash, key|
156
+ @cache_lock.synchronize do
157
+ break hash[key] if hash.key?(key)
158
+
159
+ hash[key] = Concurrent::Hash.new
160
+ end
161
+ end
162
+ @values_lock = Puppet::Concurrent::Lock.new
163
+ @values = Concurrent::Hash.new do |hash, key|
164
+ @values_lock.synchronize do
165
+ break hash[key] if hash.key?(key)
166
+
167
+ hash[key] = Concurrent::Hash.new
168
+ end
169
+ end
170
+
171
+ # The list of sections we've used.
172
+ @used = []
173
+
174
+ @hooks_to_call_on_application_initialization = []
175
+ @deprecated_setting_names = []
176
+ @deprecated_settings_that_have_been_configured = []
177
+
178
+ @translate = Puppet::Settings::ValueTranslator.new
179
+ @config_file_parser = Puppet::Settings::ConfigFile.new(@translate)
180
+ end
181
+
182
+ # Retrieve a config value
183
+ # @param param [Symbol] the name of the setting
184
+ # @return [Object] the value of the setting
185
+ # @api private
186
+ def [](param)
187
+ if @deprecated_setting_names.include?(param)
188
+ issue_deprecation_warning(setting(param), "Accessing '#{param}' as a setting is deprecated.")
189
+ end
190
+ value(param)
191
+ end
192
+
193
+ # Set a config value. This doesn't set the defaults, it sets the value itself.
194
+ # @param param [Symbol] the name of the setting
195
+ # @param value [Object] the new value of the setting
196
+ # @api private
197
+ def []=(param, value)
198
+ if @deprecated_setting_names.include?(param)
199
+ issue_deprecation_warning(setting(param), "Modifying '#{param}' as a setting is deprecated.")
200
+ end
201
+ @value_sets[:memory].set(param, value)
202
+ unsafe_flush_cache
203
+ end
204
+
205
+ # Create a new default value for the given setting. The default overrides are
206
+ # higher precedence than the defaults given in defaults.rb, but lower
207
+ # precedence than any other values for the setting. This allows one setting
208
+ # `a` to change the default of setting `b`, but still allow a user to provide
209
+ # a value for setting `b`.
210
+ #
211
+ # @param param [Symbol] the name of the setting
212
+ # @param value [Object] the new default value for the setting
213
+ # @api private
214
+ def override_default(param, value)
215
+ @value_sets[:overridden_defaults].set(param, value)
216
+ unsafe_flush_cache
217
+ end
218
+
219
+ # Generate the list of valid arguments, in a format that GetoptLong can
220
+ # understand, and add them to the passed option list.
221
+ def addargs(options)
222
+ # Add all of the settings as valid options.
223
+ each { |_name, setting|
224
+ setting.getopt_args.each { |args| options << args }
225
+ }
226
+
227
+ options
228
+ end
229
+
230
+ # Generate the list of valid arguments, in a format that OptionParser can
231
+ # understand, and add them to the passed option list.
232
+ def optparse_addargs(options)
233
+ # Add all of the settings as valid options.
234
+ each { |_name, setting|
235
+ options << setting.optparse_args
236
+ }
237
+
238
+ options
239
+ end
240
+
241
+ # Is our setting a boolean setting?
242
+ def boolean?(param)
243
+ param = param.to_sym
244
+ @config.include?(param) and @config[param].is_a?(BooleanSetting)
245
+ end
246
+
247
+ # Remove all set values, potentially skipping cli values.
248
+ def clear
249
+ unsafe_clear
250
+ end
251
+
252
+ # Remove all set values, potentially skipping cli values.
253
+ def unsafe_clear(clear_cli = true, clear_application_defaults = false)
254
+ if clear_application_defaults
255
+ @value_sets[:application_defaults] = Values.new(:application_defaults, @config)
256
+ @app_defaults_initialized = false
257
+ end
258
+
259
+ if clear_cli
260
+ @value_sets[:cli] = Values.new(:cli, @config)
261
+
262
+ # Only clear the 'used' values if we were explicitly asked to clear out
263
+ # :cli values; otherwise, it may be just a config file reparse,
264
+ # and we want to retain this cli values.
265
+ @used = []
266
+ end
267
+
268
+ @value_sets[:memory] = Values.new(:memory, @config)
269
+ @value_sets[:overridden_defaults] = Values.new(:overridden_defaults, @config)
270
+
271
+ @deprecated_settings_that_have_been_configured.clear
272
+ @values.clear
273
+ @cache.clear
274
+ end
275
+ private :unsafe_clear
276
+
277
+ # Clears all cached settings for a particular environment to ensure
278
+ # that changes to environment.conf are reflected in the settings if
279
+ # the environment timeout has expired.
280
+ #
281
+ # param [String, Symbol] environment the name of environment to clear settings for
282
+ #
283
+ # @api private
284
+ def clear_environment_settings(environment)
285
+ if environment.nil?
286
+ return
287
+ end
288
+
289
+ @cache[environment.to_sym].clear
290
+ @values[environment.to_sym] = {}
291
+ end
292
+
293
+ # Clear @cache, @used and the Environment.
294
+ #
295
+ # Whenever an object is returned by Settings, a copy is stored in @cache.
296
+ # As long as Setting attributes that determine the content of returned
297
+ # objects remain unchanged, Settings can keep returning objects from @cache
298
+ # without re-fetching or re-generating them.
299
+ #
300
+ # Whenever a Settings attribute changes, such as @values or @preferred_run_mode,
301
+ # this method must be called to clear out the caches so that updated
302
+ # objects will be returned.
303
+ def flush_cache
304
+ unsafe_flush_cache
305
+ end
306
+
307
+ def unsafe_flush_cache
308
+ clearused
309
+ end
310
+ private :unsafe_flush_cache
311
+
312
+ def clearused
313
+ @cache.clear
314
+ @used = []
315
+ end
316
+
317
+ def global_defaults_initialized?
318
+ @global_defaults_initialized
319
+ end
320
+
321
+ def initialize_global_settings(args = [], require_config = true)
322
+ raise Puppet::DevError, _("Attempting to initialize global default settings more than once!") if global_defaults_initialized?
323
+
324
+ # The first two phases of the lifecycle of an OpenVox application are:
325
+ # 1) Parse the command line options and handle any of them that are
326
+ # registered, defined "global" OpenVox settings (mostly from defaults.rb).
327
+ # 2) Parse the OpenVox config file(s).
328
+
329
+ parse_global_options(args)
330
+ parse_config_files(require_config)
331
+
332
+ @global_defaults_initialized = true
333
+ end
334
+
335
+ # This method is called during application bootstrapping. It is responsible for parsing all of the
336
+ # command line options and initializing the settings accordingly.
337
+ #
338
+ # It will ignore options that are not defined in the global OpenVox settings list, because they may
339
+ # be valid options for the specific application that we are about to launch... however, at this point
340
+ # in the bootstrapping lifecycle, we don't yet know what that application is.
341
+ def parse_global_options(args)
342
+ # Create an option parser
343
+ option_parser = PuppetOptionParser.new
344
+ option_parser.ignore_invalid_options = true
345
+
346
+ # Add all global options to it.
347
+ optparse_addargs([]).each do |option|
348
+ option_parser.on(*option) do |arg|
349
+ opt, val = Puppet::Settings.clean_opt(option[0], arg)
350
+ handlearg(opt, val)
351
+ end
352
+ end
353
+
354
+ option_parser.on('--run_mode',
355
+ "The effective 'run mode' of the application: server, agent, or user.",
356
+ :REQUIRED) do |arg|
357
+ Puppet.settings.preferred_run_mode = arg
358
+ end
359
+
360
+ option_parser.parse(args)
361
+
362
+ # remove run_mode options from the arguments so that later parses don't think
363
+ # it is an unknown option.
364
+ while option_index = args.index('--run_mode') # rubocop:disable Lint/AssignmentInCondition
365
+ args.delete_at option_index
366
+ args.delete_at option_index
367
+ end
368
+ args.reject! { |arg| arg.start_with? '--run_mode=' }
369
+ end
370
+ private :parse_global_options
371
+
372
+ # A utility method (public, is used by application.rb and perhaps elsewhere) that munges a command-line
373
+ # option string into the format that Puppet.settings expects. (This mostly has to deal with handling the
374
+ # "no-" prefix on flag/boolean options).
375
+ #
376
+ # @param [String] opt the command line option that we are munging
377
+ # @param [String, TrueClass, FalseClass] val the value for the setting (as determined by the OptionParser)
378
+ def self.clean_opt(opt, val)
379
+ # rewrite --[no-]option to --no-option if that's what was given
380
+ if opt =~ /\[no-\]/ and !val
381
+ opt = opt.gsub(/\[no-\]/, 'no-')
382
+ end
383
+ # otherwise remove the [no-] prefix to not confuse everybody
384
+ opt = opt.gsub(/\[no-\]/, '')
385
+ [opt, val]
386
+ end
387
+
388
+ def app_defaults_initialized?
389
+ @app_defaults_initialized
390
+ end
391
+
392
+ def initialize_app_defaults(app_defaults)
393
+ REQUIRED_APP_SETTINGS.each do |key|
394
+ raise SettingsError, "missing required app default setting '#{key}'" unless app_defaults.has_key?(key)
395
+ end
396
+
397
+ app_defaults.each do |key, value|
398
+ if key == :run_mode
399
+ self.preferred_run_mode = value
400
+ else
401
+ @value_sets[:application_defaults].set(key, value)
402
+ unsafe_flush_cache
403
+ end
404
+ end
405
+ apply_metadata
406
+ call_hooks_deferred_to_application_initialization
407
+ issue_deprecations
408
+
409
+ REQUIRED_APP_SETTINGS.each do |key|
410
+ create_ancestors(Puppet[key])
411
+ end
412
+
413
+ @app_defaults_initialized = true
414
+ end
415
+
416
+ # Create ancestor directories.
417
+ #
418
+ # @param dir [String] absolute path for a required application default directory
419
+ # @api private
420
+
421
+ def create_ancestors(dir)
422
+ parent_dir = File.dirname(dir)
423
+
424
+ unless File.exist?(parent_dir)
425
+ FileUtils.mkdir_p(parent_dir)
426
+ end
427
+ end
428
+ private :create_ancestors
429
+
430
+ def call_hooks_deferred_to_application_initialization(options = {})
431
+ @hooks_to_call_on_application_initialization.each do |setting|
432
+ setting.handle(value(setting.name))
433
+ rescue InterpolationError => err
434
+ raise InterpolationError, err.message, err.backtrace unless options[:ignore_interpolation_dependency_errors]
435
+ # swallow. We're not concerned if we can't call hooks because dependencies don't exist yet
436
+ # we'll get another chance after application defaults are initialized
437
+ end
438
+ end
439
+ private :call_hooks_deferred_to_application_initialization
440
+
441
+ # Return a value's description.
442
+ def description(name)
443
+ obj = @config[name.to_sym]
444
+ if obj
445
+ obj.desc
446
+ end
447
+ end
448
+
449
+ def_delegators :@config, :each, :each_pair, :each_key
450
+
451
+ # Iterate over each section name.
452
+ def eachsection
453
+ yielded = []
454
+ @config.each_value do |object|
455
+ section = object.section
456
+ unless yielded.include? section
457
+ yield section
458
+ yielded << section
459
+ end
460
+ end
461
+ end
462
+
463
+ # Returns a given setting by name
464
+ # @param name [Symbol] The name of the setting to fetch
465
+ # @return [Puppet::Settings::BaseSetting] The setting object
466
+ def setting(param)
467
+ param = param.to_sym
468
+ @config[param]
469
+ end
470
+
471
+ # Handle a command-line argument.
472
+ def handlearg(opt, value = nil)
473
+ @cache.clear
474
+
475
+ case value
476
+ when FalseClass
477
+ value = "false"
478
+ when TrueClass
479
+ value = "true"
480
+ end
481
+
482
+ value &&= @translate[value]
483
+ str = opt.sub(/^--/, '')
484
+
485
+ bool = true
486
+ newstr = str.sub(/^no-/, '')
487
+ if newstr != str
488
+ str = newstr
489
+ bool = false
490
+ end
491
+ str = str.intern
492
+
493
+ if @config[str].is_a?(Puppet::Settings::BooleanSetting)
494
+ if value == "" or value.nil?
495
+ value = bool
496
+ end
497
+ end
498
+
499
+ s = @config[str]
500
+ if s
501
+ @deprecated_settings_that_have_been_configured << s if s.completely_deprecated?
502
+ end
503
+
504
+ @value_sets[:cli].set(str, value)
505
+ unsafe_flush_cache
506
+ end
507
+
508
+ def include?(name)
509
+ name = name.intern if name.is_a? String
510
+ @config.include?(name)
511
+ end
512
+
513
+ def generate_config
514
+ puts to_config
515
+ true
516
+ end
517
+
518
+ def generate_manifest
519
+ puts to_manifest
520
+ true
521
+ end
522
+
523
+ def print_configs
524
+ return generate_config if value(:genconfig)
525
+
526
+ generate_manifest if value(:genmanifest)
527
+ end
528
+
529
+ def print_configs?
530
+ (value(:genconfig) || value(:genmanifest)) && true
531
+ end
532
+
533
+ # The currently configured run mode that is preferred for constructing the application configuration.
534
+ def preferred_run_mode
535
+ @preferred_run_mode_name || :user
536
+ end
537
+
538
+ # PRIVATE! This only exists because we need a hook to validate the run mode when it's being set, and
539
+ # it should never, ever, ever, ever be called from outside of this file.
540
+ # This method is also called when --run_mode MODE is used on the command line to set the default
541
+ #
542
+ # @param mode [String|Symbol] the name of the mode to have in effect
543
+ # @api private
544
+ def preferred_run_mode=(mode)
545
+ mode = mode.to_s.downcase.intern
546
+ raise ValidationError, "Invalid run mode '#{mode}'" unless [:server, :master, :agent, :user].include?(mode)
547
+
548
+ @preferred_run_mode_name = mode
549
+ # Changing the run mode has far-reaching consequences. Flush any cached
550
+ # settings so they will be re-generated.
551
+ flush_cache
552
+ end
553
+
554
+ def parse_config(text, file = "text")
555
+ begin
556
+ data = @config_file_parser.parse_file(file, text, ALLOWED_SECTION_NAMES)
557
+ rescue => detail
558
+ Puppet.log_exception(detail, "Could not parse #{file}: #{detail}")
559
+ return
560
+ end
561
+
562
+ # If we get here and don't have any data, we just return and don't muck with the current state of the world.
563
+ return if data.nil?
564
+
565
+ # If we get here then we have some data, so we need to clear out any
566
+ # previous settings that may have come from config files.
567
+ unsafe_clear(false, false)
568
+
569
+ # Screen settings which have been deprecated and removed from puppet.conf
570
+ # but are still valid on the command line and/or in environment.conf
571
+ screen_non_puppet_conf_settings(data)
572
+
573
+ # Make note of deprecated settings we will warn about later in initialization
574
+ record_deprecations_from_puppet_conf(data)
575
+
576
+ # And now we can repopulate with the values from our last parsing of the config files.
577
+ @configuration_file = data
578
+
579
+ # Determine our environment, if we have one.
580
+ if @config[:environment]
581
+ env = value(:environment).to_sym
582
+ else
583
+ env = NONE
584
+ end
585
+
586
+ # Call any hooks we should be calling.
587
+ value_sets = value_sets_for(env, preferred_run_mode)
588
+ @config.values.select(&:has_hook?).each do |setting|
589
+ value_sets.each do |source|
590
+ next unless source.include?(setting.name)
591
+
592
+ # We still have to use value to retrieve the value, since
593
+ # we want the fully interpolated value, not $vardir/lib or whatever.
594
+ # This results in extra work, but so few of the settings
595
+ # will have associated hooks that it ends up being less work this
596
+ # way overall.
597
+ if setting.call_hook_on_initialize?
598
+ @hooks_to_call_on_application_initialization |= [setting]
599
+ else
600
+ setting.handle(ChainedValues.new(
601
+ preferred_run_mode,
602
+ env,
603
+ value_sets,
604
+ @config
605
+ ).interpolate(setting.name))
606
+ end
607
+ break
608
+ end
609
+ end
610
+
611
+ call_hooks_deferred_to_application_initialization :ignore_interpolation_dependency_errors => true
612
+ apply_metadata
613
+ end
614
+
615
+ # Parse the configuration file. Just provides thread safety.
616
+ def parse_config_files(require_config = true)
617
+ file = which_configuration_file
618
+ if Puppet::FileSystem.exist?(file)
619
+ begin
620
+ text = read_file(file)
621
+ rescue => detail
622
+ message = _("Could not load %{file}: %{detail}") % { file: file, detail: detail }
623
+ if require_config
624
+ Puppet.log_and_raise(detail, message)
625
+ else
626
+ Puppet.log_exception(detail, message)
627
+ return
628
+ end
629
+ end
630
+ else
631
+ return
632
+ end
633
+
634
+ parse_config(text, file)
635
+ end
636
+ private :parse_config_files
637
+
638
+ def main_config_file
639
+ if explicit_config_file?
640
+ self[:config]
641
+ else
642
+ File.join(Puppet::Util::RunMode[:server].conf_dir, config_file_name)
643
+ end
644
+ end
645
+ private :main_config_file
646
+
647
+ def user_config_file
648
+ File.join(Puppet::Util::RunMode[:user].conf_dir, config_file_name)
649
+ end
650
+ private :user_config_file
651
+
652
+ # This method is here to get around some life-cycle issues. We need to be
653
+ # able to determine the config file name before the settings / defaults are
654
+ # fully loaded. However, we also need to respect any overrides of this value
655
+ # that the user may have specified on the command line.
656
+ #
657
+ # The easiest way to do this is to attempt to read the setting, and if we
658
+ # catch an error (meaning that it hasn't been set yet), we'll fall back to
659
+ # the default value.
660
+ def config_file_name
661
+ begin
662
+ return self[:config_file_name] if self[:config_file_name]
663
+ rescue SettingsError
664
+ # This just means that the setting wasn't explicitly set on the command line, so we will ignore it and
665
+ # fall through to the default name.
666
+ end
667
+ self.class.default_config_file_name
668
+ end
669
+ private :config_file_name
670
+
671
+ def apply_metadata
672
+ # We have to do it in the reverse of the search path,
673
+ # because multiple sections could set the same value
674
+ # and I'm too lazy to only set the metadata once.
675
+ if @configuration_file
676
+ searchpath(nil, preferred_run_mode).reverse_each do |source|
677
+ section = @configuration_file.sections[source.name] if source.type == :section
678
+ if section
679
+ apply_metadata_from_section(section)
680
+ end
681
+ end
682
+ end
683
+ end
684
+ private :apply_metadata
685
+
686
+ def apply_metadata_from_section(section)
687
+ section.settings.each do |setting|
688
+ type = @config[setting.name] if setting.has_metadata?
689
+ if type
690
+ type.set_meta(setting.meta)
691
+ end
692
+ end
693
+ end
694
+
695
+ SETTING_TYPES = {
696
+ :string => StringSetting,
697
+ :file => FileSetting,
698
+ :directory => DirectorySetting,
699
+ :file_or_directory => FileOrDirectorySetting,
700
+ :path => PathSetting,
701
+ :boolean => BooleanSetting,
702
+ :integer => IntegerSetting,
703
+ :port => PortSetting,
704
+ :terminus => TerminusSetting,
705
+ :duration => DurationSetting,
706
+ :ttl => TTLSetting,
707
+ :array => ArraySetting,
708
+ :enum => EnumSetting,
709
+ :symbolic_enum => SymbolicEnumSetting,
710
+ :priority => PrioritySetting,
711
+ :autosign => AutosignSetting,
712
+ :server_list => ServerListSetting,
713
+ :http_extra_headers => HttpExtraHeadersSetting,
714
+ :certificate_revocation => CertificateRevocationSetting,
715
+ :alias => AliasSetting
716
+ }
717
+
718
+ # Create a new setting. The value is passed in because it's used to determine
719
+ # what kind of setting we're creating, but the value itself might be either
720
+ # a default or a value, so we can't actually assign it.
721
+ #
722
+ # See #define_settings for documentation on the legal values for the ":type" option.
723
+ def newsetting(hash)
724
+ klass = nil
725
+ hash[:section] = hash[:section].to_sym if hash[:section]
726
+
727
+ type = hash[:type]
728
+ if type
729
+ klass = SETTING_TYPES[type]
730
+ unless klass
731
+ raise ArgumentError, _("Invalid setting type '%{type}'") % { type: type }
732
+ end
733
+
734
+ hash.delete(:type)
735
+ else
736
+ # The only implicit typing we still do for settings is to fall back to "String" type if they didn't explicitly
737
+ # specify a type. Personally I'd like to get rid of this too, and make the "type" option mandatory... but
738
+ # there was a little resistance to taking things quite that far for now. --cprice 2012-03-19
739
+ klass = StringSetting
740
+ end
741
+ hash[:settings] = self
742
+ klass.new(hash)
743
+ end
744
+
745
+ # This has to be private, because it doesn't add the settings to @config
746
+ private :newsetting
747
+
748
+ # Iterate across all of the objects in a given section.
749
+ def persection(section)
750
+ section = section.to_sym
751
+ each { |_name, obj|
752
+ if obj.section == section
753
+ yield obj
754
+ end
755
+ }
756
+ end
757
+
758
+ # Reparse our config file, if necessary.
759
+ def reparse_config_files
760
+ if files
761
+ filename = any_files_changed?
762
+ if filename
763
+ Puppet.notice "Config file #{filename} changed; triggering re-parse of all config files."
764
+ parse_config_files
765
+ reuse
766
+ end
767
+ end
768
+ end
769
+
770
+ def files
771
+ return @files if @files
772
+
773
+ @files = []
774
+ [main_config_file, user_config_file].each do |path|
775
+ if Puppet::FileSystem.exist?(path)
776
+ @files << Puppet::Util::WatchedFile.new(path)
777
+ end
778
+ end
779
+ @files
780
+ end
781
+ private :files
782
+
783
+ # Checks to see if any of the config files have been modified
784
+ # @return the filename of the first file that is found to have changed, or
785
+ # nil if no files have changed
786
+ def any_files_changed?
787
+ files.each do |file|
788
+ return file.to_str if file.changed?
789
+ end
790
+ nil
791
+ end
792
+ private :any_files_changed?
793
+
794
+ def reuse
795
+ return unless defined?(@used)
796
+
797
+ new = @used
798
+ @used = []
799
+ use(*new)
800
+ end
801
+
802
+ SearchPathElement = Struct.new(:name, :type)
803
+
804
+ # The order in which to search for values, without defaults.
805
+ #
806
+ # @param environment [String,Symbol] symbolic reference to an environment name
807
+ # @param run_mode [Symbol] symbolic reference to an OpenVox run mode
808
+ # @return [Array<SearchPathElement>]
809
+ # @api private
810
+ def configsearchpath(environment = nil, run_mode = preferred_run_mode)
811
+ searchpath = [
812
+ SearchPathElement.new(:memory, :values),
813
+ SearchPathElement.new(:cli, :values)
814
+ ]
815
+ searchpath << SearchPathElement.new(environment.intern, :environment) if environment
816
+
817
+ if run_mode
818
+ if [:master, :server].include?(run_mode)
819
+ searchpath << SearchPathElement.new(:server, :section)
820
+ searchpath << SearchPathElement.new(:master, :section)
821
+ else
822
+ searchpath << SearchPathElement.new(run_mode, :section)
823
+ end
824
+ end
825
+
826
+ searchpath << SearchPathElement.new(:main, :section)
827
+ end
828
+
829
+ # The order in which to search for values.
830
+ #
831
+ # @param environment [String,Symbol] symbolic reference to an environment name
832
+ # @param run_mode [Symbol] symbolic reference to an OpenVox run mode
833
+ # @return [Array<SearchPathElement>]
834
+ # @api private
835
+ def searchpath(environment = nil, run_mode = preferred_run_mode)
836
+ searchpath = configsearchpath(environment, run_mode)
837
+ searchpath << SearchPathElement.new(:application_defaults, :values)
838
+ searchpath << SearchPathElement.new(:overridden_defaults, :values)
839
+ end
840
+
841
+ def service_user_available?
842
+ return @service_user_available if defined?(@service_user_available)
843
+
844
+ if self[:user]
845
+ user = Puppet::Type.type(:user).new :name => self[:user], :audit => :ensure
846
+
847
+ if user.suitable?
848
+ @service_user_available = user.exists?
849
+ else
850
+ raise Puppet::Error, (_("Cannot manage owner permissions, because the provider for '%{name}' is not functional") % { name: user })
851
+ end
852
+ else
853
+ @service_user_available = false
854
+ end
855
+ end
856
+
857
+ def service_group_available?
858
+ return @service_group_available if defined?(@service_group_available)
859
+
860
+ if self[:group]
861
+ group = Puppet::Type.type(:group).new :name => self[:group], :audit => :ensure
862
+
863
+ if group.suitable?
864
+ @service_group_available = group.exists?
865
+ else
866
+ raise Puppet::Error, (_("Cannot manage group permissions, because the provider for '%{name}' is not functional") % { name: group })
867
+ end
868
+ else
869
+ @service_group_available = false
870
+ end
871
+ end
872
+
873
+ # Allow later inspection to determine if the setting was set on the
874
+ # command line, or through some other code path. Used for the
875
+ # `dns_alt_names` option during cert generate. --daniel 2011-10-18
876
+ #
877
+ # @param param [String, Symbol] the setting to look up
878
+ # @return [Object, nil] the value of the setting or nil if unset
879
+ def set_by_cli(param)
880
+ param = param.to_sym
881
+ @value_sets[:cli].lookup(param)
882
+ end
883
+
884
+ def set_by_cli?(param)
885
+ !!set_by_cli(param)
886
+ end
887
+
888
+ # Get values from a search path entry.
889
+ # @api private
890
+ def searchpath_values(source)
891
+ case source.type
892
+ when :values
893
+ @value_sets[source.name]
894
+ when :section
895
+ section = @configuration_file.sections[source.name] if @configuration_file
896
+ if section
897
+ ValuesFromSection.new(source.name, section)
898
+ end
899
+ when :environment
900
+ ValuesFromEnvironmentConf.new(source.name)
901
+ else
902
+ raise Puppet::DevError, _("Unknown searchpath case: %{source_type} for the %{source} settings path element.") % { source_type: source.type, source: source }
903
+ end
904
+ end
905
+
906
+ # Allow later inspection to determine if the setting was set by user
907
+ # config, rather than a default setting.
908
+ def set_by_config?(param, environment = nil, run_mode = preferred_run_mode)
909
+ param = param.to_sym
910
+ configsearchpath(environment, run_mode).any? do |source|
911
+ vals = searchpath_values(source)
912
+ if vals
913
+ vals.lookup(param)
914
+ end
915
+ end
916
+ end
917
+
918
+ # Allow later inspection to determine if the setting was set in a specific
919
+ # section
920
+ #
921
+ # @param param [String, Symbol] the setting to look up
922
+ # @param section [Symbol] the section in which to look up the setting
923
+ # @return [Object, nil] the value of the setting or nil if unset
924
+ def set_in_section(param, section)
925
+ param = param.to_sym
926
+ vals = searchpath_values(SearchPathElement.new(section, :section))
927
+ if vals
928
+ vals.lookup(param)
929
+ end
930
+ end
931
+
932
+ def set_in_section?(param, section)
933
+ !!set_in_section(param, section)
934
+ end
935
+
936
+ # Patches the value for a param in a section.
937
+ # This method is required to support the use case of unifying --dns-alt-names and
938
+ # --dns_alt_names in the certificate face. Ideally this should be cleaned up.
939
+ # See PUP-3684 for more information.
940
+ # For regular use of setting a value, the method `[]=` should be used.
941
+ # @api private
942
+ #
943
+ def patch_value(param, value, type)
944
+ if @value_sets[type]
945
+ @value_sets[type].set(param, value)
946
+ unsafe_flush_cache
947
+ end
948
+ end
949
+
950
+ # Define a group of settings.
951
+ #
952
+ # @param [Symbol] section a symbol to use for grouping multiple settings together into a conceptual unit. This value
953
+ # (and the conceptual separation) is not used very often; the main place where it will have a potential impact
954
+ # is when code calls Settings#use method. See docs on that method for further details, but basically that method
955
+ # just attempts to do any preparation that may be necessary before code attempts to leverage the value of a particular
956
+ # setting. This has the most impact for file/directory settings, where #use will attempt to "ensure" those
957
+ # files / directories.
958
+ # @param [Hash[Hash]] defs the settings to be defined. This argument is a hash of hashes; each key should be a symbol,
959
+ # which is basically the name of the setting that you are defining. The value should be another hash that specifies
960
+ # the parameters for the particular setting. Legal values include:
961
+ # [:default] => not required; this is the value for the setting if no other value is specified (via cli, config file, etc.)
962
+ # For string settings this may include "variables", demarcated with $ or ${} which will be interpolated with values of other settings.
963
+ # The default value may also be a Proc that will be called only once to evaluate the default when the setting's value is retrieved.
964
+ # [:desc] => required; a description of the setting, used in documentation / help generation
965
+ # [:type] => not required, but highly encouraged! This specifies the data type that the setting represents. If
966
+ # you do not specify it, it will default to "string". Legal values include:
967
+ # :string - A generic string setting
968
+ # :boolean - A boolean setting; values are expected to be "true" or "false"
969
+ # :file - A (single) file path; OpenVox may attempt to create this file depending on how the settings are used. This type
970
+ # also supports additional options such as "mode", "owner", "group"
971
+ # :directory - A (single) directory path; OpenVox may attempt to create this file depending on how the settings are used. This type
972
+ # also supports additional options such as "mode", "owner", "group"
973
+ # :path - This is intended to be used for settings whose value can contain multiple directory paths, represented
974
+ # as strings separated by the system path separator (e.g. system path, module path, etc.).
975
+ # [:mode] => an (optional) octal value to be used as the permissions/mode for :file and :directory settings
976
+ # [:owner] => optional owner username/uid for :file and :directory settings
977
+ # [:group] => optional group name/gid for :file and :directory settings
978
+ #
979
+ def define_settings(section, defs)
980
+ section = section.to_sym
981
+ call = []
982
+ defs.each do |name, hash|
983
+ raise ArgumentError, _("setting definition for '%{name}' is not a hash!") % { name: name } unless hash.is_a? Hash
984
+
985
+ name = name.to_sym
986
+ hash[:name] = name
987
+ hash[:section] = section
988
+ raise ArgumentError, _("Setting %{name} is already defined") % { name: name } if @config.include?(name)
989
+
990
+ tryconfig = newsetting(hash)
991
+ short = tryconfig.short
992
+ if short
993
+ other = @shortnames[short]
994
+ if other
995
+ raise ArgumentError, _("Setting %{name} is already using short name '%{short}'") % { name: other.name, short: short }
996
+ end
997
+
998
+ @shortnames[short] = tryconfig
999
+ end
1000
+ @config[name] = tryconfig
1001
+
1002
+ # Collect the settings that need to have their hooks called immediately.
1003
+ # We have to collect them so that we can be sure we're fully initialized before
1004
+ # the hook is called.
1005
+ if tryconfig.has_hook?
1006
+ if tryconfig.call_hook_on_define?
1007
+ call << tryconfig
1008
+ elsif tryconfig.call_hook_on_initialize?
1009
+ @hooks_to_call_on_application_initialization |= [tryconfig]
1010
+ end
1011
+ end
1012
+
1013
+ @deprecated_setting_names << name if tryconfig.deprecated?
1014
+ end
1015
+
1016
+ call.each do |setting|
1017
+ setting.handle(value(setting.name))
1018
+ end
1019
+ end
1020
+
1021
+ # Convert the settings we manage into a catalog full of resources that model those settings.
1022
+ def to_catalog(*sections)
1023
+ sections = nil if sections.empty?
1024
+
1025
+ catalog = Puppet::Resource::Catalog.new("Settings", Puppet::Node::Environment::NONE)
1026
+ @config.keys.find_all { |key| @config[key].is_a?(FileSetting) }.each do |key|
1027
+ file = @config[key]
1028
+ next if file.value.nil?
1029
+ next unless sections.nil? or sections.include?(file.section)
1030
+
1031
+ resource = file.to_resource
1032
+ next unless resource
1033
+ next if catalog.resource(resource.ref)
1034
+
1035
+ Puppet.debug { "Using settings: adding file resource '#{key}': '#{resource.inspect}'" }
1036
+
1037
+ catalog.add_resource(resource)
1038
+ end
1039
+
1040
+ add_user_resources(catalog, sections)
1041
+ add_environment_resources(catalog, sections)
1042
+
1043
+ catalog
1044
+ end
1045
+
1046
+ # Convert our list of config settings into a configuration file.
1047
+ def to_config
1048
+ str = %(The configuration file for #{Puppet.run_mode.name}. Note that this file
1049
+ is likely to have unused settings in it; any setting that's
1050
+ valid anywhere in OpenVox can be in any config file, even if it's not used.
1051
+
1052
+ Every section can specify three special parameters: owner, group, and mode.
1053
+ These parameters affect the required permissions of any files specified after
1054
+ their specification. OpenVox will sometimes use these parameters to check its
1055
+ own configured state, so they can be used to make OpenVox a bit more self-managing.
1056
+
1057
+ The file format supports octothorpe-commented lines, but not partial-line comments.
1058
+
1059
+ Generated on #{Time.now}.
1060
+ ).gsub(/^/, "# ")
1061
+
1062
+ # Add a section heading that matches our name.
1063
+ str += "[#{preferred_run_mode}]\n"
1064
+ eachsection do |section|
1065
+ persection(section) do |obj|
1066
+ str += obj.to_config + "\n" unless obj.name == :genconfig
1067
+ end
1068
+ end
1069
+
1070
+ str
1071
+ end
1072
+
1073
+ # Convert to a parseable manifest
1074
+ def to_manifest
1075
+ catalog = to_catalog
1076
+ catalog.resource_refs.collect do |ref|
1077
+ catalog.resource(ref).to_manifest
1078
+ end.join("\n\n")
1079
+ end
1080
+
1081
+ # Create the necessary objects to use a section. This is idempotent;
1082
+ # you can 'use' a section as many times as you want.
1083
+ def use(*sections)
1084
+ if Puppet[:settings_catalog]
1085
+ sections = sections.collect(&:to_sym)
1086
+ sections = sections.reject { |s| @used.include?(s) }
1087
+
1088
+ Puppet.warning(":master section deprecated in favor of :server section") if sections.include?(:master)
1089
+
1090
+ # add :server if sections include :master or :master if sections include :server
1091
+ sections |= [:master, :server] if (sections & [:master, :server]).any?
1092
+
1093
+ sections = sections.collect(&:to_sym)
1094
+ sections = sections.reject { |s| @used.include?(s) }
1095
+
1096
+ return if sections.empty?
1097
+
1098
+ Puppet.debug { "Applying settings catalog for sections #{sections.join(', ')}" }
1099
+
1100
+ begin
1101
+ catalog = to_catalog(*sections).to_ral
1102
+ rescue => detail
1103
+ Puppet.log_and_raise(detail, "Could not create resources for managing OpenVox's files and directories in sections #{sections.inspect}: #{detail}")
1104
+ end
1105
+
1106
+ catalog.host_config = false
1107
+ catalog.apply do |transaction|
1108
+ if transaction.any_failed?
1109
+ report = transaction.report
1110
+ status_failures = report.resource_statuses.values.select(&:failed?)
1111
+ status_fail_msg = status_failures
1112
+ .collect(&:events)
1113
+ .flatten
1114
+ .select { |event| event.status == 'failure' }
1115
+ .collect { |event| "#{event.resource}: #{event.message}" }.join("; ")
1116
+
1117
+ raise "Got #{status_failures.length} failure(s) while initializing: #{status_fail_msg}"
1118
+ end
1119
+ end
1120
+
1121
+ sections.each { |s| @used << s }
1122
+ @used.uniq!
1123
+ else
1124
+ Puppet.debug("Skipping settings catalog for sections #{sections.join(', ')}")
1125
+ end
1126
+ end
1127
+
1128
+ def valid?(param)
1129
+ param = param.to_sym
1130
+ @config.has_key?(param)
1131
+ end
1132
+
1133
+ # Retrieve an object that can be used for looking up values of configuration
1134
+ # settings.
1135
+ #
1136
+ # @param environment [Symbol] The name of the environment in which to lookup
1137
+ # @param section [Symbol] The name of the configuration section in which to lookup
1138
+ # @return [Puppet::Settings::ChainedValues] An object to perform lookups
1139
+ # @api public
1140
+ def values(environment, section)
1141
+ @values[environment][section] ||= ChainedValues.new(
1142
+ section,
1143
+ environment,
1144
+ value_sets_for(environment, section),
1145
+ @config
1146
+ )
1147
+ end
1148
+
1149
+ # Find the correct value using our search path.
1150
+ #
1151
+ # @param param [String, Symbol] The value to look up
1152
+ # @param environment [String, Symbol] The environment to check for the value
1153
+ # @param bypass_interpolation [true, false] Whether to skip interpolation
1154
+ #
1155
+ # @return [Object] The looked up value
1156
+ #
1157
+ # @raise [InterpolationError]
1158
+ def value(param, environment = nil, bypass_interpolation = false)
1159
+ environment &&= environment.to_sym
1160
+ value_sym(param.to_sym, environment, bypass_interpolation)
1161
+ end
1162
+
1163
+ # Find the correct value using symbols and our search path.
1164
+ #
1165
+ # @param param [Symbol] The value to look up
1166
+ # @param environment [Symbol] The environment to check for the value
1167
+ # @param bypass_interpolation [true, false] Whether to skip interpolation
1168
+ #
1169
+ # @return [Object] The looked up value
1170
+ #
1171
+ # @raise [InterpolationError]
1172
+ def value_sym(param, environment = nil, bypass_interpolation = false)
1173
+ # Check the cache first. It needs to be a per-environment
1174
+ # cache so that we don't spread values from one env
1175
+ # to another.
1176
+ cached_env = @cache[environment || NONE]
1177
+
1178
+ # Avoid two lookups in cache_env unless val is nil. When it is, it's important
1179
+ # to check if the key is included so that further processing (that will result
1180
+ # in nil again) is avoided.
1181
+ val = cached_env[param]
1182
+ return val if !val.nil? || cached_env.include?(param)
1183
+
1184
+ # Short circuit to nil for undefined settings.
1185
+ return nil unless @config.include?(param)
1186
+
1187
+ vals = values(environment, preferred_run_mode)
1188
+ val = bypass_interpolation ? vals.lookup(param) : vals.interpolate(param)
1189
+ cached_env[param] = val
1190
+ val
1191
+ end
1192
+
1193
+ ##
1194
+ # (#15337) All of the logic to determine the configuration file to use
1195
+ # should be centralized into this method. The simplified approach is:
1196
+ #
1197
+ # 1. If there is an explicit configuration file, use that. (--confdir or
1198
+ # --config)
1199
+ # 2. If we're running as a root process, use the system puppet.conf
1200
+ # (usually /etc/puppetlabs/puppet/puppet.conf)
1201
+ # 3. Otherwise, use the user puppet.conf (usually ~/.puppetlabs/etc/puppet/puppet.conf)
1202
+ #
1203
+ # @api private
1204
+ # @todo this code duplicates {Puppet::Util::RunMode#which_dir} as described
1205
+ # in {https://projects.puppetlabs.com/issues/16637 #16637}
1206
+ def which_configuration_file
1207
+ if explicit_config_file? or Puppet.features.root? then
1208
+ main_config_file
1209
+ else
1210
+ user_config_file
1211
+ end
1212
+ end
1213
+
1214
+ # This method just turns a file into a new ConfigFile::Conf instance
1215
+ # @param file [String] absolute path to the configuration file
1216
+ # @return [Puppet::Settings::ConfigFile::Conf]
1217
+ # @api private
1218
+ def parse_file(file, allowed_sections = [])
1219
+ @config_file_parser.parse_file(file, read_file(file), allowed_sections)
1220
+ end
1221
+
1222
+ private
1223
+
1224
+ DEPRECATION_REFS = {
1225
+ # intentionally empty. This could be repopulated if we deprecate more settings
1226
+ # and have reference links to associate with them
1227
+ }.freeze
1228
+
1229
+ def screen_non_puppet_conf_settings(puppet_conf)
1230
+ puppet_conf.sections.values.each do |section|
1231
+ forbidden = section.settings.select { |setting| Puppet::Settings::EnvironmentConf::ENVIRONMENT_CONF_ONLY_SETTINGS.include?(setting.name) }
1232
+ raise(SettingsError, "Cannot set #{forbidden.map(&:name).join(', ')} settings in puppet.conf") unless forbidden.empty?
1233
+ end
1234
+ end
1235
+
1236
+ # Record that we want to issue a deprecation warning later in the application
1237
+ # initialization cycle when we have settings bootstrapped to the point where
1238
+ # we can read the Puppet[:disable_warnings] setting.
1239
+ #
1240
+ # We are only recording warnings applicable to settings set in puppet.conf
1241
+ # itself.
1242
+ def record_deprecations_from_puppet_conf(puppet_conf)
1243
+ puppet_conf.sections.values.each do |section|
1244
+ section.settings.each do |conf_setting|
1245
+ setting = self.setting(conf_setting.name)
1246
+ if setting
1247
+ @deprecated_settings_that_have_been_configured << setting if setting.deprecated?
1248
+ end
1249
+ end
1250
+ end
1251
+ end
1252
+
1253
+ def issue_deprecations
1254
+ @deprecated_settings_that_have_been_configured.each do |setting|
1255
+ issue_deprecation_warning(setting)
1256
+ end
1257
+ end
1258
+
1259
+ def issue_deprecation_warning(setting, msg = nil)
1260
+ name = setting.name
1261
+ ref = DEPRECATION_REFS.find { |params, _reference| params.include?(name) }
1262
+ ref = ref[1] if ref
1263
+ if msg
1264
+ msg << " #{ref}" if ref
1265
+ Puppet.deprecation_warning(msg)
1266
+ elsif setting.completely_deprecated?
1267
+ message = _("Setting %{name} is deprecated.") % { name: name }
1268
+ message += " #{ref}"
1269
+ Puppet.deprecation_warning(message, "setting-#{name}")
1270
+ elsif setting.allowed_on_commandline?
1271
+ # TRANSLATORS 'puppet.conf' is a file name and should not be translated
1272
+ message = _("Setting %{name} is deprecated in puppet.conf.") % { name: name }
1273
+ message += " #{ref}"
1274
+ Puppet.deprecation_warning(message, "puppet-conf-setting-#{name}")
1275
+ end
1276
+ end
1277
+
1278
+ def add_environment_resources(catalog, sections)
1279
+ configured_environment = self[:environment]
1280
+
1281
+ if configured_environment == "production" && !production_environment_exists?
1282
+ environment_path = self[:environmentpath]
1283
+ first_environment_path = environment_path.split(File::PATH_SEPARATOR).first
1284
+
1285
+ if Puppet::FileSystem.exist?(first_environment_path)
1286
+ production_environment_path = File.join(first_environment_path, configured_environment)
1287
+ parameters = { :ensure => 'directory' }
1288
+ parameters[:mode] = '0750'
1289
+ if Puppet.features.root?
1290
+ parameters[:owner] = Puppet[:user] if service_user_available?
1291
+ parameters[:group] = Puppet[:group] if service_group_available?
1292
+ end
1293
+ catalog.add_resource(Puppet::Resource.new(:file, production_environment_path, :parameters => parameters))
1294
+ end
1295
+ end
1296
+ end
1297
+
1298
+ def production_environment_exists?
1299
+ environment_path = self[:environmentpath]
1300
+ paths = environment_path.split(File::PATH_SEPARATOR)
1301
+
1302
+ paths.any? do |path|
1303
+ # If expected_path is a symlink, assume the source path is being managed
1304
+ # elsewhere, so accept it also as a valid production environment path
1305
+ expected_path = File.join(path, 'production')
1306
+ Puppet::FileSystem.directory?(expected_path) || Puppet::FileSystem.symlink?(expected_path)
1307
+ end
1308
+ end
1309
+
1310
+ def add_user_resources(catalog, sections)
1311
+ return unless Puppet.features.root?
1312
+ return if Puppet::Util::Platform.windows?
1313
+ return unless self[:mkusers]
1314
+
1315
+ @config.each do |_name, setting|
1316
+ next unless setting.respond_to?(:owner)
1317
+ next unless sections.nil? or sections.include?(setting.section)
1318
+
1319
+ user = setting.owner
1320
+ if user && user != "root" && catalog.resource(:user, user).nil?
1321
+ resource = Puppet::Resource.new(:user, user, :parameters => { :ensure => :present })
1322
+ resource[:gid] = self[:group] if self[:group]
1323
+ catalog.add_resource resource
1324
+ end
1325
+ group = setting.group
1326
+ if group && !%w[root wheel].include?(group) && catalog.resource(:group, group).nil?
1327
+ catalog.add_resource Puppet::Resource.new(:group, group, :parameters => { :ensure => :present })
1328
+ end
1329
+ end
1330
+ end
1331
+
1332
+ # Yield each search source in turn.
1333
+ def value_sets_for(environment, mode)
1334
+ searchpath(environment, mode).filter_map { |source| searchpath_values(source) }
1335
+ end
1336
+
1337
+ # Read the file in.
1338
+ # @api private
1339
+ def read_file(file)
1340
+ Puppet::FileSystem.read(file, :encoding => 'utf-8')
1341
+ end
1342
+
1343
+ # Private method for internal test use only; allows to do a comprehensive clear of all settings between tests.
1344
+ #
1345
+ # @return nil
1346
+ def clear_everything_for_tests
1347
+ unsafe_clear(true, true)
1348
+ @configuration_file = nil
1349
+ @global_defaults_initialized = false
1350
+ @app_defaults_initialized = false
1351
+ end
1352
+ private :clear_everything_for_tests
1353
+
1354
+ def explicit_config_file?
1355
+ # Figure out if the user has provided an explicit configuration file. If
1356
+ # so, return the path to the file, if not return nil.
1357
+ #
1358
+ # The easiest way to determine whether an explicit one has been specified
1359
+ # is to simply attempt to evaluate the value of ":config". This will
1360
+ # obviously be successful if they've passed an explicit value for :config,
1361
+ # but it will also result in successful interpolation if they've only
1362
+ # passed an explicit value for :confdir.
1363
+ #
1364
+ # If they've specified neither, then the interpolation will fail and we'll
1365
+ # get an exception.
1366
+ #
1367
+
1368
+ true if self[:config]
1369
+ rescue InterpolationError
1370
+ # This means we failed to interpolate, which means that they didn't
1371
+ # explicitly specify either :config or :confdir... so we'll fall out to
1372
+ # the default value.
1373
+ false
1374
+ end
1375
+ private :explicit_config_file?
1376
+
1377
+ # Lookup configuration setting value through a chain of different value sources.
1378
+ #
1379
+ # @api public
1380
+ class ChainedValues
1381
+ ENVIRONMENT_SETTING = "environment"
1382
+ ENVIRONMENT_INTERPOLATION_ALLOWED = ['config_version'].freeze
1383
+
1384
+ # @see Puppet::Settings.values
1385
+ # @api private
1386
+ def initialize(mode, environment, value_sets, defaults)
1387
+ @mode = mode
1388
+ @environment = environment
1389
+ @value_sets = value_sets
1390
+ @defaults = defaults
1391
+ end
1392
+
1393
+ # Lookup the uninterpolated value.
1394
+ #
1395
+ # @param name [Symbol] The configuration setting name to look up
1396
+ # @return [Object] The configuration setting value or nil if the setting is not known
1397
+ # @api public
1398
+ def lookup(name)
1399
+ set = @value_sets.find do |value_set|
1400
+ value_set.include?(name)
1401
+ end
1402
+ if set
1403
+ value = set.lookup(name)
1404
+ unless value.nil?
1405
+ return value
1406
+ end
1407
+ end
1408
+
1409
+ setting = @defaults[name]
1410
+ if setting.respond_to?(:alias_name)
1411
+ val = lookup(setting.alias_name)
1412
+ return val if val
1413
+ end
1414
+
1415
+ @defaults[name].default
1416
+ end
1417
+
1418
+ # Lookup the interpolated value. All instances of `$name` in the value will
1419
+ # be replaced by performing a lookup of `name` and substituting the text
1420
+ # for `$name` in the original value. This interpolation is only performed
1421
+ # if the looked up value is a String.
1422
+ #
1423
+ # @param name [Symbol] The configuration setting name to look up
1424
+ # @return [Object] The configuration setting value or nil if the setting is not known
1425
+ # @api public
1426
+ def interpolate(name)
1427
+ setting = @defaults[name]
1428
+ return nil unless setting
1429
+
1430
+ lookup_and_convert(name) do |val|
1431
+ setting.munge(val)
1432
+ end
1433
+ end
1434
+
1435
+ def print(name)
1436
+ setting = @defaults[name]
1437
+ return nil unless setting
1438
+
1439
+ lookup_and_convert(name) do |val|
1440
+ setting.print(val)
1441
+ end
1442
+ end
1443
+
1444
+ private
1445
+
1446
+ def lookup_and_convert(name, &block)
1447
+ val = lookup(name)
1448
+ # if we interpolate code, all hell breaks loose.
1449
+ if name == :code
1450
+ val
1451
+ else
1452
+ # Convert it if necessary
1453
+ begin
1454
+ val = convert(val, name)
1455
+ rescue InterpolationError => err
1456
+ # This happens because we don't have access to the param name when the
1457
+ # exception is originally raised, but we want it in the message
1458
+ raise InterpolationError, _("Error converting value for param '%{name}': %{detail}") % { name: name, detail: err }, err.backtrace
1459
+ end
1460
+
1461
+ yield val
1462
+ end
1463
+ end
1464
+
1465
+ def convert(value, setting_name)
1466
+ case value
1467
+ when nil
1468
+ nil
1469
+ when String
1470
+ failed_environment_interpolation = false
1471
+ interpolated_value = value.gsub(/\$(\w+)|\$\{(\w+)\}/) do |expression|
1472
+ varname = ::Regexp.last_match(2) || ::Regexp.last_match(1)
1473
+ interpolated_expression =
1474
+ if varname != ENVIRONMENT_SETTING || ok_to_interpolate_environment(setting_name)
1475
+ if varname == ENVIRONMENT_SETTING && @environment
1476
+ @environment
1477
+ elsif varname == "run_mode"
1478
+ @mode
1479
+ elsif !(pval = interpolate(varname.to_sym)).nil?
1480
+ pval
1481
+ else
1482
+ raise InterpolationError, _("Could not find value for %{expression}") % { expression: expression }
1483
+ end
1484
+ else
1485
+ failed_environment_interpolation = true
1486
+ expression
1487
+ end
1488
+ interpolated_expression
1489
+ end
1490
+ if failed_environment_interpolation
1491
+ # TRANSLATORS '$environment' is an OpenVox specific variable and should not be translated
1492
+ Puppet.warning(_("You cannot interpolate $environment within '%{setting_name}' when using directory environments.") % { setting_name: setting_name } +
1493
+ ' ' + _("Its value will remain %{value}.") % { value: interpolated_value })
1494
+ end
1495
+ interpolated_value
1496
+ else
1497
+ value
1498
+ end
1499
+ end
1500
+
1501
+ def ok_to_interpolate_environment(setting_name)
1502
+ ENVIRONMENT_INTERPOLATION_ALLOWED.include?(setting_name.to_s)
1503
+ end
1504
+ end
1505
+
1506
+ class Values
1507
+ extend Forwardable
1508
+
1509
+ attr_reader :name
1510
+
1511
+ def initialize(name, defaults)
1512
+ @name = name
1513
+ @values = {}
1514
+ @defaults = defaults
1515
+ end
1516
+
1517
+ def_delegator :@values, :include?
1518
+ def_delegator :@values, :[], :lookup
1519
+
1520
+ def set(name, value)
1521
+ default = @defaults[name]
1522
+
1523
+ unless default
1524
+ raise ArgumentError, _("Attempt to assign a value to unknown setting %{name}") % { name: name.inspect }
1525
+ end
1526
+
1527
+ # This little exception-handling dance ensures that a hook is
1528
+ # able to check whether a value for itself has been explicitly
1529
+ # set, while still preserving the existing value if the hook
1530
+ # throws (as was existing behavior)
1531
+ old_value = @values[name]
1532
+ @values[name] = value
1533
+ begin
1534
+ if default.has_hook?
1535
+ default.handle(value)
1536
+ end
1537
+ rescue Exception => e
1538
+ @values[name] = old_value
1539
+ raise e
1540
+ end
1541
+ end
1542
+
1543
+ def inspect
1544
+ %Q(<#{self.class}:#{object_id} @name="#{@name}" @values="#{@values}">)
1545
+ end
1546
+ end
1547
+
1548
+ class ValuesFromSection
1549
+ attr_reader :name
1550
+
1551
+ def initialize(name, section)
1552
+ @name = name
1553
+ @section = section
1554
+ end
1555
+
1556
+ def include?(name)
1557
+ !@section.setting(name).nil?
1558
+ end
1559
+
1560
+ def lookup(name)
1561
+ setting = @section.setting(name)
1562
+ if setting
1563
+ setting.value
1564
+ end
1565
+ end
1566
+
1567
+ def inspect
1568
+ %Q(<#{self.class}:#{object_id} @name="#{@name}" @section="#{@section}">)
1569
+ end
1570
+ end
1571
+
1572
+ # @api private
1573
+ class ValuesFromEnvironmentConf
1574
+ def initialize(environment_name)
1575
+ @environment_name = environment_name
1576
+ end
1577
+
1578
+ def name
1579
+ @environment_name
1580
+ end
1581
+
1582
+ def include?(name)
1583
+ if Puppet::Settings::EnvironmentConf::VALID_SETTINGS.include?(name) && conf
1584
+ return true
1585
+ end
1586
+
1587
+ false
1588
+ end
1589
+
1590
+ def lookup(name)
1591
+ return nil unless Puppet::Settings::EnvironmentConf::VALID_SETTINGS.include?(name)
1592
+
1593
+ conf.send(name) if conf
1594
+ end
1595
+
1596
+ def conf
1597
+ unless @conf
1598
+ environments = Puppet.lookup(:environments) { nil }
1599
+ @conf = environments.get_conf(@environment_name) if environments
1600
+ end
1601
+ @conf
1602
+ end
1603
+
1604
+ def inspect
1605
+ %Q(<#{self.class}:#{object_id} @environment_name="#{@environment_name}" @conf="#{@conf}">)
1606
+ end
1607
+ end
1608
+ end