openvox 7.37.1

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 (1120) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +15 -0
  3. data/CODEOWNERS +11 -0
  4. data/CODE_OF_CONDUCT.md +70 -0
  5. data/CONTRIBUTING.md +161 -0
  6. data/Gemfile +82 -0
  7. data/Guardfile.example +76 -0
  8. data/LICENSE +202 -0
  9. data/README.md +68 -0
  10. data/Rakefile +160 -0
  11. data/bin/puppet +9 -0
  12. data/conf/environment.conf +18 -0
  13. data/conf/fileserver.conf +32 -0
  14. data/conf/hiera.yaml +11 -0
  15. data/conf/puppet.conf +6 -0
  16. data/examples/enc/regexp_nodes/classes/databases +2 -0
  17. data/examples/enc/regexp_nodes/classes/webservers +2 -0
  18. data/examples/enc/regexp_nodes/environment/development +2 -0
  19. data/examples/enc/regexp_nodes/parameters/service/prod +1 -0
  20. data/examples/enc/regexp_nodes/parameters/service/qa +3 -0
  21. data/examples/enc/regexp_nodes/parameters/service/sandbox +1 -0
  22. data/examples/enc/regexp_nodes/regexp_nodes.rb +270 -0
  23. data/examples/hiera/README.md +91 -0
  24. data/examples/hiera/etc/hiera.yaml +15 -0
  25. data/examples/hiera/etc/hieradb/common.yaml +3 -0
  26. data/examples/hiera/etc/hieradb/dc1.yaml +6 -0
  27. data/examples/hiera/etc/hieradb/development.yaml +2 -0
  28. data/examples/hiera/etc/puppet.conf +3 -0
  29. data/examples/hiera/modules/data/manifests/common.pp +4 -0
  30. data/examples/hiera/modules/ntp/manifests/config.pp +6 -0
  31. data/examples/hiera/modules/ntp/manifests/data.pp +4 -0
  32. data/examples/hiera/modules/ntp/templates/ntp.conf.erb +3 -0
  33. data/examples/hiera/modules/users/manifests/common.pp +4 -0
  34. data/examples/hiera/modules/users/manifests/dc1.pp +4 -0
  35. data/examples/hiera/modules/users/manifests/development.pp +4 -0
  36. data/examples/hiera/site.pp +3 -0
  37. data/examples/nagios/check_puppet.rb +123 -0
  38. data/ext/README.md +13 -0
  39. data/ext/build_defaults.yaml +18 -0
  40. data/ext/debian/puppet.default +4 -0
  41. data/ext/debian/puppet.init +113 -0
  42. data/ext/hiera/hiera.yaml +15 -0
  43. data/ext/osx/puppet.plist +32 -0
  44. data/ext/project_data.yaml +20 -0
  45. data/ext/redhat/client.init +169 -0
  46. data/ext/redhat/client.sysconfig +2 -0
  47. data/ext/solaris/smf/puppet +44 -0
  48. data/ext/solaris/smf/puppet.xml +46 -0
  49. data/ext/suse/client.init +141 -0
  50. data/ext/systemd/puppet.service +26 -0
  51. data/ext/windows/puppet_interactive.bat +6 -0
  52. data/ext/windows/puppet_shell.bat +9 -0
  53. data/ext/windows/run_puppet_interactive.bat +9 -0
  54. data/ext/windows/service/daemon.bat +6 -0
  55. data/ext/windows/service/daemon.rb +225 -0
  56. data/install.rb +499 -0
  57. data/lib/hiera/puppet_function.rb +84 -0
  58. data/lib/hiera/scope.rb +90 -0
  59. data/lib/hiera_puppet.rb +80 -0
  60. data/lib/puppet/agent/disabler.rb +53 -0
  61. data/lib/puppet/agent/locker.rb +46 -0
  62. data/lib/puppet/agent.rb +176 -0
  63. data/lib/puppet/application/agent.rb +523 -0
  64. data/lib/puppet/application/apply.rb +428 -0
  65. data/lib/puppet/application/catalog.rb +4 -0
  66. data/lib/puppet/application/config.rb +5 -0
  67. data/lib/puppet/application/describe.rb +253 -0
  68. data/lib/puppet/application/device.rb +439 -0
  69. data/lib/puppet/application/doc.rb +233 -0
  70. data/lib/puppet/application/epp.rb +5 -0
  71. data/lib/puppet/application/face_base.rb +276 -0
  72. data/lib/puppet/application/facts.rb +9 -0
  73. data/lib/puppet/application/filebucket.rb +318 -0
  74. data/lib/puppet/application/generate.rb +5 -0
  75. data/lib/puppet/application/help.rb +5 -0
  76. data/lib/puppet/application/indirection_base.rb +4 -0
  77. data/lib/puppet/application/lookup.rb +433 -0
  78. data/lib/puppet/application/module.rb +4 -0
  79. data/lib/puppet/application/node.rb +4 -0
  80. data/lib/puppet/application/parser.rb +5 -0
  81. data/lib/puppet/application/plugin.rb +4 -0
  82. data/lib/puppet/application/report.rb +4 -0
  83. data/lib/puppet/application/resource.rb +254 -0
  84. data/lib/puppet/application/script.rb +264 -0
  85. data/lib/puppet/application/ssl.rb +323 -0
  86. data/lib/puppet/application.rb +596 -0
  87. data/lib/puppet/application_support.rb +68 -0
  88. data/lib/puppet/coercion.rb +40 -0
  89. data/lib/puppet/compilable_resource_type.rb +15 -0
  90. data/lib/puppet/concurrent/lock.rb +16 -0
  91. data/lib/puppet/concurrent/synchronized.rb +15 -0
  92. data/lib/puppet/concurrent/thread_local_singleton.rb +17 -0
  93. data/lib/puppet/concurrent.rb +2 -0
  94. data/lib/puppet/configurer/downloader.rb +85 -0
  95. data/lib/puppet/configurer/fact_handler.rb +50 -0
  96. data/lib/puppet/configurer/plugin_handler.rb +59 -0
  97. data/lib/puppet/configurer.rb +755 -0
  98. data/lib/puppet/confine/any.rb +26 -0
  99. data/lib/puppet/confine/boolean.rb +45 -0
  100. data/lib/puppet/confine/exists.rb +19 -0
  101. data/lib/puppet/confine/false.rb +25 -0
  102. data/lib/puppet/confine/feature.rb +17 -0
  103. data/lib/puppet/confine/true.rb +26 -0
  104. data/lib/puppet/confine/variable.rb +59 -0
  105. data/lib/puppet/confine.rb +83 -0
  106. data/lib/puppet/confine_collection.rb +51 -0
  107. data/lib/puppet/confiner.rb +46 -0
  108. data/lib/puppet/context/trusted_information.rb +120 -0
  109. data/lib/puppet/context.rb +188 -0
  110. data/lib/puppet/daemon.rb +182 -0
  111. data/lib/puppet/data_binding.rb +14 -0
  112. data/lib/puppet/datatypes/error.rb +21 -0
  113. data/lib/puppet/datatypes/impl/error.rb +40 -0
  114. data/lib/puppet/datatypes.rb +213 -0
  115. data/lib/puppet/defaults.rb +2277 -0
  116. data/lib/puppet/environments.rb +601 -0
  117. data/lib/puppet/error.rb +138 -0
  118. data/lib/puppet/etc.rb +180 -0
  119. data/lib/puppet/external/dot.rb +325 -0
  120. data/lib/puppet/external/pson/common.rb +374 -0
  121. data/lib/puppet/external/pson/pure/generator.rb +395 -0
  122. data/lib/puppet/external/pson/pure/parser.rb +308 -0
  123. data/lib/puppet/external/pson/pure.rb +15 -0
  124. data/lib/puppet/external/pson/version.rb +8 -0
  125. data/lib/puppet/face/catalog/select.rb +49 -0
  126. data/lib/puppet/face/catalog.rb +165 -0
  127. data/lib/puppet/face/config.rb +267 -0
  128. data/lib/puppet/face/epp.rb +566 -0
  129. data/lib/puppet/face/facts.rb +174 -0
  130. data/lib/puppet/face/generate.rb +66 -0
  131. data/lib/puppet/face/help/action.erb +90 -0
  132. data/lib/puppet/face/help/face.erb +115 -0
  133. data/lib/puppet/face/help/global.erb +16 -0
  134. data/lib/puppet/face/help/man.erb +152 -0
  135. data/lib/puppet/face/help.rb +242 -0
  136. data/lib/puppet/face/module/changes.rb +43 -0
  137. data/lib/puppet/face/module/install.rb +146 -0
  138. data/lib/puppet/face/module/list.rb +272 -0
  139. data/lib/puppet/face/module/uninstall.rb +89 -0
  140. data/lib/puppet/face/module/upgrade.rb +87 -0
  141. data/lib/puppet/face/module.rb +19 -0
  142. data/lib/puppet/face/node/clean.rb +107 -0
  143. data/lib/puppet/face/node.rb +43 -0
  144. data/lib/puppet/face/parser.rb +227 -0
  145. data/lib/puppet/face/plugin.rb +60 -0
  146. data/lib/puppet/face/report.rb +54 -0
  147. data/lib/puppet/face/resource.rb +53 -0
  148. data/lib/puppet/face.rb +12 -0
  149. data/lib/puppet/facter_impl.rb +96 -0
  150. data/lib/puppet/feature/base.rb +76 -0
  151. data/lib/puppet/feature/bolt.rb +3 -0
  152. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  153. data/lib/puppet/feature/eventlog.rb +5 -0
  154. data/lib/puppet/feature/hiera_eyaml.rb +3 -0
  155. data/lib/puppet/feature/hocon.rb +3 -0
  156. data/lib/puppet/feature/libuser.rb +8 -0
  157. data/lib/puppet/feature/msgpack.rb +3 -0
  158. data/lib/puppet/feature/pe_license.rb +4 -0
  159. data/lib/puppet/feature/selinux.rb +3 -0
  160. data/lib/puppet/feature/ssh.rb +3 -0
  161. data/lib/puppet/feature/telnet.rb +9 -0
  162. data/lib/puppet/feature/zlib.rb +5 -0
  163. data/lib/puppet/ffi/posix/constants.rb +14 -0
  164. data/lib/puppet/ffi/posix/functions.rb +24 -0
  165. data/lib/puppet/ffi/posix.rb +10 -0
  166. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  167. data/lib/puppet/ffi/windows/constants.rb +404 -0
  168. data/lib/puppet/ffi/windows/functions.rb +628 -0
  169. data/lib/puppet/ffi/windows/structs.rb +338 -0
  170. data/lib/puppet/ffi/windows.rb +12 -0
  171. data/lib/puppet/file_bucket/dipper.rb +174 -0
  172. data/lib/puppet/file_bucket/file.rb +129 -0
  173. data/lib/puppet/file_bucket.rb +4 -0
  174. data/lib/puppet/file_serving/base.rb +86 -0
  175. data/lib/puppet/file_serving/configuration/parser.rb +113 -0
  176. data/lib/puppet/file_serving/configuration.rb +113 -0
  177. data/lib/puppet/file_serving/content.rb +43 -0
  178. data/lib/puppet/file_serving/fileset.rb +186 -0
  179. data/lib/puppet/file_serving/http_metadata.rb +62 -0
  180. data/lib/puppet/file_serving/metadata.rb +171 -0
  181. data/lib/puppet/file_serving/mount/file.rb +122 -0
  182. data/lib/puppet/file_serving/mount/locales.rb +35 -0
  183. data/lib/puppet/file_serving/mount/modules.rb +26 -0
  184. data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
  185. data/lib/puppet/file_serving/mount/plugins.rb +35 -0
  186. data/lib/puppet/file_serving/mount/scripts.rb +24 -0
  187. data/lib/puppet/file_serving/mount/tasks.rb +23 -0
  188. data/lib/puppet/file_serving/mount.rb +38 -0
  189. data/lib/puppet/file_serving/terminus_helper.rb +31 -0
  190. data/lib/puppet/file_serving/terminus_selector.rb +31 -0
  191. data/lib/puppet/file_serving.rb +3 -0
  192. data/lib/puppet/file_system/file_impl.rb +188 -0
  193. data/lib/puppet/file_system/jruby.rb +23 -0
  194. data/lib/puppet/file_system/memory_file.rb +79 -0
  195. data/lib/puppet/file_system/memory_impl.rb +99 -0
  196. data/lib/puppet/file_system/path_pattern.rb +93 -0
  197. data/lib/puppet/file_system/posix.rb +47 -0
  198. data/lib/puppet/file_system/uniquefile.rb +188 -0
  199. data/lib/puppet/file_system/windows.rb +213 -0
  200. data/lib/puppet/file_system.rb +419 -0
  201. data/lib/puppet/forge/cache.rb +60 -0
  202. data/lib/puppet/forge/errors.rb +114 -0
  203. data/lib/puppet/forge/repository.rb +95 -0
  204. data/lib/puppet/forge.rb +259 -0
  205. data/lib/puppet/functions/abs.rb +61 -0
  206. data/lib/puppet/functions/alert.rb +14 -0
  207. data/lib/puppet/functions/all.rb +104 -0
  208. data/lib/puppet/functions/annotate.rb +108 -0
  209. data/lib/puppet/functions/any.rb +109 -0
  210. data/lib/puppet/functions/assert_type.rb +93 -0
  211. data/lib/puppet/functions/binary_file.rb +32 -0
  212. data/lib/puppet/functions/break.rb +47 -0
  213. data/lib/puppet/functions/call.rb +80 -0
  214. data/lib/puppet/functions/camelcase.rb +62 -0
  215. data/lib/puppet/functions/capitalize.rb +61 -0
  216. data/lib/puppet/functions/ceiling.rb +37 -0
  217. data/lib/puppet/functions/chomp.rb +57 -0
  218. data/lib/puppet/functions/chop.rb +67 -0
  219. data/lib/puppet/functions/compare.rb +125 -0
  220. data/lib/puppet/functions/contain.rb +55 -0
  221. data/lib/puppet/functions/convert_to.rb +34 -0
  222. data/lib/puppet/functions/crit.rb +14 -0
  223. data/lib/puppet/functions/debug.rb +14 -0
  224. data/lib/puppet/functions/defined.rb +159 -0
  225. data/lib/puppet/functions/dig.rb +67 -0
  226. data/lib/puppet/functions/downcase.rb +89 -0
  227. data/lib/puppet/functions/each.rb +167 -0
  228. data/lib/puppet/functions/emerg.rb +14 -0
  229. data/lib/puppet/functions/empty.rb +85 -0
  230. data/lib/puppet/functions/epp.rb +49 -0
  231. data/lib/puppet/functions/err.rb +14 -0
  232. data/lib/puppet/functions/eyaml_lookup_key.rb +102 -0
  233. data/lib/puppet/functions/filter.rb +137 -0
  234. data/lib/puppet/functions/find_file.rb +44 -0
  235. data/lib/puppet/functions/find_template.rb +63 -0
  236. data/lib/puppet/functions/flatten.rb +64 -0
  237. data/lib/puppet/functions/floor.rb +37 -0
  238. data/lib/puppet/functions/get.rb +150 -0
  239. data/lib/puppet/functions/getvar.rb +87 -0
  240. data/lib/puppet/functions/group_by.rb +62 -0
  241. data/lib/puppet/functions/hiera.rb +89 -0
  242. data/lib/puppet/functions/hiera_array.rb +81 -0
  243. data/lib/puppet/functions/hiera_hash.rb +92 -0
  244. data/lib/puppet/functions/hiera_include.rb +104 -0
  245. data/lib/puppet/functions/hocon_data.rb +41 -0
  246. data/lib/puppet/functions/import.rb +7 -0
  247. data/lib/puppet/functions/include.rb +53 -0
  248. data/lib/puppet/functions/index.rb +167 -0
  249. data/lib/puppet/functions/info.rb +14 -0
  250. data/lib/puppet/functions/inline_epp.rb +60 -0
  251. data/lib/puppet/functions/join.rb +56 -0
  252. data/lib/puppet/functions/json_data.rb +33 -0
  253. data/lib/puppet/functions/keys.rb +25 -0
  254. data/lib/puppet/functions/length.rb +44 -0
  255. data/lib/puppet/functions/lest.rb +55 -0
  256. data/lib/puppet/functions/lookup.rb +224 -0
  257. data/lib/puppet/functions/lstrip.rb +58 -0
  258. data/lib/puppet/functions/map.rb +135 -0
  259. data/lib/puppet/functions/match.rb +130 -0
  260. data/lib/puppet/functions/max.rb +183 -0
  261. data/lib/puppet/functions/min.rb +182 -0
  262. data/lib/puppet/functions/module_directory.rb +41 -0
  263. data/lib/puppet/functions/new.rb +1011 -0
  264. data/lib/puppet/functions/next.rb +33 -0
  265. data/lib/puppet/functions/notice.rb +14 -0
  266. data/lib/puppet/functions/partition.rb +62 -0
  267. data/lib/puppet/functions/reduce.rb +162 -0
  268. data/lib/puppet/functions/regsubst.rb +101 -0
  269. data/lib/puppet/functions/require.rb +77 -0
  270. data/lib/puppet/functions/return.rb +15 -0
  271. data/lib/puppet/functions/reverse_each.rb +94 -0
  272. data/lib/puppet/functions/round.rb +24 -0
  273. data/lib/puppet/functions/rstrip.rb +58 -0
  274. data/lib/puppet/functions/scanf.rb +44 -0
  275. data/lib/puppet/functions/size.rb +15 -0
  276. data/lib/puppet/functions/slice.rb +124 -0
  277. data/lib/puppet/functions/sort.rb +74 -0
  278. data/lib/puppet/functions/split.rb +76 -0
  279. data/lib/puppet/functions/step.rb +98 -0
  280. data/lib/puppet/functions/strftime.rb +212 -0
  281. data/lib/puppet/functions/strip.rb +58 -0
  282. data/lib/puppet/functions/then.rb +77 -0
  283. data/lib/puppet/functions/tree_each.rb +197 -0
  284. data/lib/puppet/functions/type.rb +72 -0
  285. data/lib/puppet/functions/unique.rb +132 -0
  286. data/lib/puppet/functions/unwrap.rb +59 -0
  287. data/lib/puppet/functions/upcase.rb +89 -0
  288. data/lib/puppet/functions/values.rb +25 -0
  289. data/lib/puppet/functions/versioncmp.rb +40 -0
  290. data/lib/puppet/functions/warning.rb +14 -0
  291. data/lib/puppet/functions/with.rb +32 -0
  292. data/lib/puppet/functions/yaml_data.rb +45 -0
  293. data/lib/puppet/functions.rb +862 -0
  294. data/lib/puppet/generate/models/type/property.rb +70 -0
  295. data/lib/puppet/generate/models/type/type.rb +65 -0
  296. data/lib/puppet/generate/templates/type/pcore.erb +42 -0
  297. data/lib/puppet/generate/type.rb +249 -0
  298. data/lib/puppet/gettext/config.rb +275 -0
  299. data/lib/puppet/gettext/module_translations.rb +42 -0
  300. data/lib/puppet/gettext/stubs.rb +11 -0
  301. data/lib/puppet/graph/key.rb +26 -0
  302. data/lib/puppet/graph/prioritizer.rb +29 -0
  303. data/lib/puppet/graph/rb_tree_map.rb +388 -0
  304. data/lib/puppet/graph/relationship_graph.rb +284 -0
  305. data/lib/puppet/graph/sequential_prioritizer.rb +31 -0
  306. data/lib/puppet/graph/simple_graph.rb +546 -0
  307. data/lib/puppet/graph.rb +9 -0
  308. data/lib/puppet/http/client.rb +525 -0
  309. data/lib/puppet/http/dns.rb +159 -0
  310. data/lib/puppet/http/errors.rb +48 -0
  311. data/lib/puppet/http/external_client.rb +88 -0
  312. data/lib/puppet/http/factory.rb +51 -0
  313. data/lib/puppet/http/pool.rb +172 -0
  314. data/lib/puppet/http/pool_entry.rb +17 -0
  315. data/lib/puppet/http/proxy.rb +137 -0
  316. data/lib/puppet/http/redirector.rb +85 -0
  317. data/lib/puppet/http/resolver/server_list.rb +87 -0
  318. data/lib/puppet/http/resolver/settings.rb +23 -0
  319. data/lib/puppet/http/resolver/srv.rb +41 -0
  320. data/lib/puppet/http/resolver.rb +48 -0
  321. data/lib/puppet/http/response.rb +102 -0
  322. data/lib/puppet/http/response_converter.rb +24 -0
  323. data/lib/puppet/http/response_net_http.rb +42 -0
  324. data/lib/puppet/http/retry_after_handler.rb +77 -0
  325. data/lib/puppet/http/service/ca.rb +101 -0
  326. data/lib/puppet/http/service/compiler.rb +353 -0
  327. data/lib/puppet/http/service/file_server.rb +198 -0
  328. data/lib/puppet/http/service/puppetserver.rb +53 -0
  329. data/lib/puppet/http/service/report.rb +64 -0
  330. data/lib/puppet/http/service.rb +182 -0
  331. data/lib/puppet/http/session.rb +122 -0
  332. data/lib/puppet/http/site.rb +42 -0
  333. data/lib/puppet/http.rb +46 -0
  334. data/lib/puppet/indirector/catalog/compiler.rb +431 -0
  335. data/lib/puppet/indirector/catalog/json.rb +40 -0
  336. data/lib/puppet/indirector/catalog/msgpack.rb +6 -0
  337. data/lib/puppet/indirector/catalog/rest.rb +49 -0
  338. data/lib/puppet/indirector/catalog/store_configs.rb +8 -0
  339. data/lib/puppet/indirector/catalog/yaml.rb +6 -0
  340. data/lib/puppet/indirector/code.rb +6 -0
  341. data/lib/puppet/indirector/data_binding/hiera.rb +7 -0
  342. data/lib/puppet/indirector/data_binding/none.rb +8 -0
  343. data/lib/puppet/indirector/direct_file_server.rb +17 -0
  344. data/lib/puppet/indirector/envelope.rb +11 -0
  345. data/lib/puppet/indirector/errors.rb +5 -0
  346. data/lib/puppet/indirector/exec.rb +38 -0
  347. data/lib/puppet/indirector/face.rb +153 -0
  348. data/lib/puppet/indirector/fact_search.rb +60 -0
  349. data/lib/puppet/indirector/facts/facter.rb +117 -0
  350. data/lib/puppet/indirector/facts/json.rb +27 -0
  351. data/lib/puppet/indirector/facts/memory.rb +9 -0
  352. data/lib/puppet/indirector/facts/network_device.rb +27 -0
  353. data/lib/puppet/indirector/facts/rest.rb +44 -0
  354. data/lib/puppet/indirector/facts/store_configs.rb +11 -0
  355. data/lib/puppet/indirector/facts/yaml.rb +29 -0
  356. data/lib/puppet/indirector/file_bucket_file/file.rb +262 -0
  357. data/lib/puppet/indirector/file_bucket_file/rest.rb +50 -0
  358. data/lib/puppet/indirector/file_bucket_file/selector.rb +53 -0
  359. data/lib/puppet/indirector/file_content/file.rb +7 -0
  360. data/lib/puppet/indirector/file_content/file_server.rb +7 -0
  361. data/lib/puppet/indirector/file_content/rest.rb +35 -0
  362. data/lib/puppet/indirector/file_content/selector.rb +30 -0
  363. data/lib/puppet/indirector/file_content.rb +5 -0
  364. data/lib/puppet/indirector/file_metadata/file.rb +7 -0
  365. data/lib/puppet/indirector/file_metadata/file_server.rb +7 -0
  366. data/lib/puppet/indirector/file_metadata/http.rb +47 -0
  367. data/lib/puppet/indirector/file_metadata/rest.rb +56 -0
  368. data/lib/puppet/indirector/file_metadata/selector.rb +30 -0
  369. data/lib/puppet/indirector/file_metadata.rb +5 -0
  370. data/lib/puppet/indirector/file_server.rb +54 -0
  371. data/lib/puppet/indirector/generic_http.rb +5 -0
  372. data/lib/puppet/indirector/hiera.rb +100 -0
  373. data/lib/puppet/indirector/indirection.rb +372 -0
  374. data/lib/puppet/indirector/json.rb +79 -0
  375. data/lib/puppet/indirector/memory.rb +34 -0
  376. data/lib/puppet/indirector/msgpack.rb +83 -0
  377. data/lib/puppet/indirector/node/exec.rb +70 -0
  378. data/lib/puppet/indirector/node/json.rb +8 -0
  379. data/lib/puppet/indirector/node/memory.rb +10 -0
  380. data/lib/puppet/indirector/node/msgpack.rb +7 -0
  381. data/lib/puppet/indirector/node/plain.rb +21 -0
  382. data/lib/puppet/indirector/node/rest.rb +29 -0
  383. data/lib/puppet/indirector/node/store_configs.rb +8 -0
  384. data/lib/puppet/indirector/node/yaml.rb +7 -0
  385. data/lib/puppet/indirector/none.rb +9 -0
  386. data/lib/puppet/indirector/plain.rb +9 -0
  387. data/lib/puppet/indirector/report/json.rb +34 -0
  388. data/lib/puppet/indirector/report/msgpack.rb +11 -0
  389. data/lib/puppet/indirector/report/processor.rb +60 -0
  390. data/lib/puppet/indirector/report/rest.rb +42 -0
  391. data/lib/puppet/indirector/report/yaml.rb +34 -0
  392. data/lib/puppet/indirector/request.rb +194 -0
  393. data/lib/puppet/indirector/resource/ral.rb +66 -0
  394. data/lib/puppet/indirector/resource/store_configs.rb +12 -0
  395. data/lib/puppet/indirector/resource/validator.rb +8 -0
  396. data/lib/puppet/indirector/rest.rb +64 -0
  397. data/lib/puppet/indirector/store_configs.rb +30 -0
  398. data/lib/puppet/indirector/terminus.rb +176 -0
  399. data/lib/puppet/indirector/yaml.rb +63 -0
  400. data/lib/puppet/indirector.rb +61 -0
  401. data/lib/puppet/info_service/class_information_service.rb +109 -0
  402. data/lib/puppet/info_service/plan_information_service.rb +36 -0
  403. data/lib/puppet/info_service/task_information_service.rb +44 -0
  404. data/lib/puppet/info_service.rb +26 -0
  405. data/lib/puppet/interface/action.rb +406 -0
  406. data/lib/puppet/interface/action_builder.rb +161 -0
  407. data/lib/puppet/interface/action_manager.rb +98 -0
  408. data/lib/puppet/interface/documentation.rb +357 -0
  409. data/lib/puppet/interface/face_collection.rb +137 -0
  410. data/lib/puppet/interface/option.rb +172 -0
  411. data/lib/puppet/interface/option_builder.rb +105 -0
  412. data/lib/puppet/interface/option_manager.rb +106 -0
  413. data/lib/puppet/interface.rb +239 -0
  414. data/lib/puppet/loaders.rb +30 -0
  415. data/lib/puppet/metatype/manager.rb +197 -0
  416. data/lib/puppet/module/plan.rb +159 -0
  417. data/lib/puppet/module/task.rb +283 -0
  418. data/lib/puppet/module.rb +475 -0
  419. data/lib/puppet/module_tool/applications/application.rb +91 -0
  420. data/lib/puppet/module_tool/applications/checksummer.rb +62 -0
  421. data/lib/puppet/module_tool/applications/installer.rb +411 -0
  422. data/lib/puppet/module_tool/applications/uninstaller.rb +119 -0
  423. data/lib/puppet/module_tool/applications/unpacker.rb +100 -0
  424. data/lib/puppet/module_tool/applications/upgrader.rb +282 -0
  425. data/lib/puppet/module_tool/applications.rb +12 -0
  426. data/lib/puppet/module_tool/checksums.rb +49 -0
  427. data/lib/puppet/module_tool/contents_description.rb +89 -0
  428. data/lib/puppet/module_tool/dependency.rb +41 -0
  429. data/lib/puppet/module_tool/errors/base.rb +15 -0
  430. data/lib/puppet/module_tool/errors/installer.rb +93 -0
  431. data/lib/puppet/module_tool/errors/shared.rb +227 -0
  432. data/lib/puppet/module_tool/errors/uninstaller.rb +50 -0
  433. data/lib/puppet/module_tool/errors/upgrader.rb +63 -0
  434. data/lib/puppet/module_tool/errors.rb +11 -0
  435. data/lib/puppet/module_tool/install_directory.rb +45 -0
  436. data/lib/puppet/module_tool/installed_modules.rb +96 -0
  437. data/lib/puppet/module_tool/local_tarball.rb +90 -0
  438. data/lib/puppet/module_tool/metadata.rb +221 -0
  439. data/lib/puppet/module_tool/shared_behaviors.rb +181 -0
  440. data/lib/puppet/module_tool/tar/gnu.rb +19 -0
  441. data/lib/puppet/module_tool/tar/mini.rb +116 -0
  442. data/lib/puppet/module_tool/tar.rb +18 -0
  443. data/lib/puppet/module_tool.rb +194 -0
  444. data/lib/puppet/network/authconfig.rb +7 -0
  445. data/lib/puppet/network/authorization.rb +19 -0
  446. data/lib/puppet/network/client_request.rb +29 -0
  447. data/lib/puppet/network/format.rb +110 -0
  448. data/lib/puppet/network/format_handler.rb +108 -0
  449. data/lib/puppet/network/format_support.rb +139 -0
  450. data/lib/puppet/network/formats.rb +329 -0
  451. data/lib/puppet/network/http/api/indirected_routes.rb +277 -0
  452. data/lib/puppet/network/http/api/indirection_type.rb +32 -0
  453. data/lib/puppet/network/http/api/master/v3/environments.rb +3 -0
  454. data/lib/puppet/network/http/api/master/v3.rb +3 -0
  455. data/lib/puppet/network/http/api/master.rb +3 -0
  456. data/lib/puppet/network/http/api/server/v3/environments.rb +48 -0
  457. data/lib/puppet/network/http/api/server/v3.rb +39 -0
  458. data/lib/puppet/network/http/api/server.rb +10 -0
  459. data/lib/puppet/network/http/api.rb +39 -0
  460. data/lib/puppet/network/http/connection.rb +286 -0
  461. data/lib/puppet/network/http/error.rb +73 -0
  462. data/lib/puppet/network/http/handler.rb +215 -0
  463. data/lib/puppet/network/http/issues.rb +12 -0
  464. data/lib/puppet/network/http/memory_response.rb +13 -0
  465. data/lib/puppet/network/http/request.rb +71 -0
  466. data/lib/puppet/network/http/response.rb +23 -0
  467. data/lib/puppet/network/http/route.rb +101 -0
  468. data/lib/puppet/network/http.rb +28 -0
  469. data/lib/puppet/network/http_pool.rb +77 -0
  470. data/lib/puppet/network/uri.rb +18 -0
  471. data/lib/puppet/network.rb +3 -0
  472. data/lib/puppet/node/environment.rb +635 -0
  473. data/lib/puppet/node/facts.rb +165 -0
  474. data/lib/puppet/node/server_facts.rb +46 -0
  475. data/lib/puppet/node.rb +256 -0
  476. data/lib/puppet/pal/catalog_compiler.rb +108 -0
  477. data/lib/puppet/pal/compiler.rb +222 -0
  478. data/lib/puppet/pal/function_signature.rb +52 -0
  479. data/lib/puppet/pal/json_catalog_encoder.rb +71 -0
  480. data/lib/puppet/pal/pal_api.rb +15 -0
  481. data/lib/puppet/pal/pal_impl.rb +590 -0
  482. data/lib/puppet/pal/plan_signature.rb +71 -0
  483. data/lib/puppet/pal/script_compiler.rb +73 -0
  484. data/lib/puppet/pal/task_signature.rb +58 -0
  485. data/lib/puppet/parameter/boolean.rb +15 -0
  486. data/lib/puppet/parameter/package_options.rb +31 -0
  487. data/lib/puppet/parameter/path.rb +57 -0
  488. data/lib/puppet/parameter/value.rb +91 -0
  489. data/lib/puppet/parameter/value_collection.rb +212 -0
  490. data/lib/puppet/parameter.rb +589 -0
  491. data/lib/puppet/parser/abstract_compiler.rb +36 -0
  492. data/lib/puppet/parser/ast/block_expression.rb +15 -0
  493. data/lib/puppet/parser/ast/branch.rb +19 -0
  494. data/lib/puppet/parser/ast/hostclass.rb +27 -0
  495. data/lib/puppet/parser/ast/leaf.rb +81 -0
  496. data/lib/puppet/parser/ast/node.rb +17 -0
  497. data/lib/puppet/parser/ast/pops_bridge.rb +245 -0
  498. data/lib/puppet/parser/ast/resource.rb +66 -0
  499. data/lib/puppet/parser/ast/resource_instance.rb +10 -0
  500. data/lib/puppet/parser/ast/resourceparam.rb +31 -0
  501. data/lib/puppet/parser/ast/top_level_construct.rb +4 -0
  502. data/lib/puppet/parser/ast.rb +61 -0
  503. data/lib/puppet/parser/catalog_compiler.rb +56 -0
  504. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +39 -0
  505. data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
  506. data/lib/puppet/parser/compiler.rb +615 -0
  507. data/lib/puppet/parser/e4_parser_adapter.rb +60 -0
  508. data/lib/puppet/parser/files.rb +93 -0
  509. data/lib/puppet/parser/functions/assert_type.rb +60 -0
  510. data/lib/puppet/parser/functions/binary_file.rb +24 -0
  511. data/lib/puppet/parser/functions/break.rb +39 -0
  512. data/lib/puppet/parser/functions/contain.rb +30 -0
  513. data/lib/puppet/parser/functions/create_resources.rb +110 -0
  514. data/lib/puppet/parser/functions/defined.rb +107 -0
  515. data/lib/puppet/parser/functions/dig.rb +38 -0
  516. data/lib/puppet/parser/functions/digest.rb +5 -0
  517. data/lib/puppet/parser/functions/each.rb +104 -0
  518. data/lib/puppet/parser/functions/epp.rb +39 -0
  519. data/lib/puppet/parser/functions/fail.rb +11 -0
  520. data/lib/puppet/parser/functions/file.rb +33 -0
  521. data/lib/puppet/parser/functions/filter.rb +79 -0
  522. data/lib/puppet/parser/functions/find_file.rb +28 -0
  523. data/lib/puppet/parser/functions/fqdn_rand.rb +44 -0
  524. data/lib/puppet/parser/functions/generate.rb +37 -0
  525. data/lib/puppet/parser/functions/hiera.rb +103 -0
  526. data/lib/puppet/parser/functions/hiera_array.rb +92 -0
  527. data/lib/puppet/parser/functions/hiera_hash.rb +102 -0
  528. data/lib/puppet/parser/functions/hiera_include.rb +101 -0
  529. data/lib/puppet/parser/functions/include.rb +34 -0
  530. data/lib/puppet/parser/functions/inline_epp.rb +51 -0
  531. data/lib/puppet/parser/functions/inline_template.rb +26 -0
  532. data/lib/puppet/parser/functions/lest.rb +49 -0
  533. data/lib/puppet/parser/functions/lookup.rb +132 -0
  534. data/lib/puppet/parser/functions/map.rb +76 -0
  535. data/lib/puppet/parser/functions/match.rb +43 -0
  536. data/lib/puppet/parser/functions/md5.rb +5 -0
  537. data/lib/puppet/parser/functions/new.rb +991 -0
  538. data/lib/puppet/parser/functions/next.rb +38 -0
  539. data/lib/puppet/parser/functions/realize.rb +20 -0
  540. data/lib/puppet/parser/functions/reduce.rb +137 -0
  541. data/lib/puppet/parser/functions/regsubst.rb +62 -0
  542. data/lib/puppet/parser/functions/require.rb +40 -0
  543. data/lib/puppet/parser/functions/return.rb +92 -0
  544. data/lib/puppet/parser/functions/reverse_each.rb +83 -0
  545. data/lib/puppet/parser/functions/scanf.rb +38 -0
  546. data/lib/puppet/parser/functions/sha1.rb +5 -0
  547. data/lib/puppet/parser/functions/sha256.rb +5 -0
  548. data/lib/puppet/parser/functions/shellquote.rb +61 -0
  549. data/lib/puppet/parser/functions/slice.rb +39 -0
  550. data/lib/puppet/parser/functions/split.rb +28 -0
  551. data/lib/puppet/parser/functions/sprintf.rb +61 -0
  552. data/lib/puppet/parser/functions/step.rb +84 -0
  553. data/lib/puppet/parser/functions/strftime.rb +185 -0
  554. data/lib/puppet/parser/functions/tag.rb +12 -0
  555. data/lib/puppet/parser/functions/tagged.rb +21 -0
  556. data/lib/puppet/parser/functions/template.rb +39 -0
  557. data/lib/puppet/parser/functions/then.rb +73 -0
  558. data/lib/puppet/parser/functions/type.rb +53 -0
  559. data/lib/puppet/parser/functions/versioncmp.rb +30 -0
  560. data/lib/puppet/parser/functions/with.rb +28 -0
  561. data/lib/puppet/parser/functions.rb +321 -0
  562. data/lib/puppet/parser/parser_factory.rb +30 -0
  563. data/lib/puppet/parser/relationship.rb +84 -0
  564. data/lib/puppet/parser/resource/param.rb +35 -0
  565. data/lib/puppet/parser/resource.rb +351 -0
  566. data/lib/puppet/parser/scope.rb +1127 -0
  567. data/lib/puppet/parser/script_compiler.rb +123 -0
  568. data/lib/puppet/parser/templatewrapper.rb +104 -0
  569. data/lib/puppet/parser/type_loader.rb +150 -0
  570. data/lib/puppet/parser.rb +20 -0
  571. data/lib/puppet/plugins/configuration.rb +29 -0
  572. data/lib/puppet/plugins/syntax_checkers.rb +98 -0
  573. data/lib/puppet/plugins.rb +9 -0
  574. data/lib/puppet/pops/adaptable.rb +197 -0
  575. data/lib/puppet/pops/adapters.rb +156 -0
  576. data/lib/puppet/pops/evaluator/access_operator.rb +719 -0
  577. data/lib/puppet/pops/evaluator/callable_signature.rb +107 -0
  578. data/lib/puppet/pops/evaluator/closure.rb +375 -0
  579. data/lib/puppet/pops/evaluator/collector_transformer.rb +234 -0
  580. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +86 -0
  581. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +29 -0
  582. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +70 -0
  583. data/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +38 -0
  584. data/lib/puppet/pops/evaluator/compare_operator.rb +254 -0
  585. data/lib/puppet/pops/evaluator/deferred_resolver.rb +225 -0
  586. data/lib/puppet/pops/evaluator/epp_evaluator.rb +120 -0
  587. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1317 -0
  588. data/lib/puppet/pops/evaluator/external_syntax_support.rb +46 -0
  589. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +82 -0
  590. data/lib/puppet/pops/evaluator/literal_evaluator.rb +100 -0
  591. data/lib/puppet/pops/evaluator/puppet_proc.rb +69 -0
  592. data/lib/puppet/pops/evaluator/relationship_operator.rb +185 -0
  593. data/lib/puppet/pops/evaluator/runtime3_converter.rb +221 -0
  594. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
  595. data/lib/puppet/pops/evaluator/runtime3_support.rb +535 -0
  596. data/lib/puppet/pops/functions/dispatch.rb +107 -0
  597. data/lib/puppet/pops/functions/dispatcher.rb +75 -0
  598. data/lib/puppet/pops/functions/function.rb +139 -0
  599. data/lib/puppet/pops/issue_reporter.rb +137 -0
  600. data/lib/puppet/pops/issues.rb +928 -0
  601. data/lib/puppet/pops/label_provider.rb +90 -0
  602. data/lib/puppet/pops/loader/base_loader.rb +178 -0
  603. data/lib/puppet/pops/loader/dependency_loader.rb +91 -0
  604. data/lib/puppet/pops/loader/gem_support.rb +51 -0
  605. data/lib/puppet/pops/loader/generic_plan_instantiator.rb +28 -0
  606. data/lib/puppet/pops/loader/loader.rb +221 -0
  607. data/lib/puppet/pops/loader/loader_paths.rb +412 -0
  608. data/lib/puppet/pops/loader/module_loaders.rb +556 -0
  609. data/lib/puppet/pops/loader/predefined_loader.rb +28 -0
  610. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +84 -0
  611. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +93 -0
  612. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +79 -0
  613. data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +39 -0
  614. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +45 -0
  615. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +120 -0
  616. data/lib/puppet/pops/loader/runtime3_type_loader.rb +103 -0
  617. data/lib/puppet/pops/loader/simple_environment_loader.rb +20 -0
  618. data/lib/puppet/pops/loader/static_loader.rb +131 -0
  619. data/lib/puppet/pops/loader/task_instantiator.rb +44 -0
  620. data/lib/puppet/pops/loader/type_definition_instantiator.rb +100 -0
  621. data/lib/puppet/pops/loader/typed_name.rb +54 -0
  622. data/lib/puppet/pops/loader/uri_helper.rb +22 -0
  623. data/lib/puppet/pops/loaders.rb +546 -0
  624. data/lib/puppet/pops/lookup/configured_data_provider.rb +93 -0
  625. data/lib/puppet/pops/lookup/context.rb +199 -0
  626. data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
  627. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +145 -0
  628. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +126 -0
  629. data/lib/puppet/pops/lookup/data_provider.rb +92 -0
  630. data/lib/puppet/pops/lookup/environment_data_provider.rb +35 -0
  631. data/lib/puppet/pops/lookup/explainer.rb +595 -0
  632. data/lib/puppet/pops/lookup/function_provider.rb +110 -0
  633. data/lib/puppet/pops/lookup/global_data_provider.rb +75 -0
  634. data/lib/puppet/pops/lookup/hiera_config.rb +775 -0
  635. data/lib/puppet/pops/lookup/interpolation.rb +155 -0
  636. data/lib/puppet/pops/lookup/invocation.rb +268 -0
  637. data/lib/puppet/pops/lookup/key_recorder.rb +18 -0
  638. data/lib/puppet/pops/lookup/location_resolver.rb +99 -0
  639. data/lib/puppet/pops/lookup/lookup_adapter.rb +528 -0
  640. data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
  641. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +92 -0
  642. data/lib/puppet/pops/lookup/module_data_provider.rb +89 -0
  643. data/lib/puppet/pops/lookup/sub_lookup.rb +92 -0
  644. data/lib/puppet/pops/lookup.rb +97 -0
  645. data/lib/puppet/pops/merge_strategy.rb +441 -0
  646. data/lib/puppet/pops/migration/migration_checker.rb +58 -0
  647. data/lib/puppet/pops/model/ast.pp +669 -0
  648. data/lib/puppet/pops/model/ast.rb +4675 -0
  649. data/lib/puppet/pops/model/ast_transformer.rb +131 -0
  650. data/lib/puppet/pops/model/factory.rb +1155 -0
  651. data/lib/puppet/pops/model/model_label_provider.rb +134 -0
  652. data/lib/puppet/pops/model/model_tree_dumper.rb +445 -0
  653. data/lib/puppet/pops/model/pn_transformer.rb +385 -0
  654. data/lib/puppet/pops/model/tree_dumper.rb +59 -0
  655. data/lib/puppet/pops/parser/code_merger.rb +29 -0
  656. data/lib/puppet/pops/parser/egrammar.ra +889 -0
  657. data/lib/puppet/pops/parser/eparser.rb +3184 -0
  658. data/lib/puppet/pops/parser/epp_parser.rb +51 -0
  659. data/lib/puppet/pops/parser/epp_support.rb +265 -0
  660. data/lib/puppet/pops/parser/evaluating_parser.rb +162 -0
  661. data/lib/puppet/pops/parser/heredoc_support.rb +153 -0
  662. data/lib/puppet/pops/parser/interpolation_support.rb +249 -0
  663. data/lib/puppet/pops/parser/lexer2.rb +777 -0
  664. data/lib/puppet/pops/parser/lexer_support.rb +221 -0
  665. data/lib/puppet/pops/parser/locatable.rb +23 -0
  666. data/lib/puppet/pops/parser/locator.rb +357 -0
  667. data/lib/puppet/pops/parser/parser_support.rb +251 -0
  668. data/lib/puppet/pops/parser/pn_parser.rb +317 -0
  669. data/lib/puppet/pops/parser/slurp_support.rb +118 -0
  670. data/lib/puppet/pops/patterns.rb +60 -0
  671. data/lib/puppet/pops/pcore.rb +135 -0
  672. data/lib/puppet/pops/pn.rb +236 -0
  673. data/lib/puppet/pops/puppet_stack.rb +61 -0
  674. data/lib/puppet/pops/resource/param.rb +55 -0
  675. data/lib/puppet/pops/resource/resource_type_impl.rb +294 -0
  676. data/lib/puppet/pops/resource/resource_type_set.pcore +22 -0
  677. data/lib/puppet/pops/semantic_error.rb +29 -0
  678. data/lib/puppet/pops/serialization/abstract_reader.rb +180 -0
  679. data/lib/puppet/pops/serialization/abstract_writer.rb +222 -0
  680. data/lib/puppet/pops/serialization/deserializer.rb +80 -0
  681. data/lib/puppet/pops/serialization/extension.rb +158 -0
  682. data/lib/puppet/pops/serialization/from_data_converter.rb +224 -0
  683. data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
  684. data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
  685. data/lib/puppet/pops/serialization/json.rb +297 -0
  686. data/lib/puppet/pops/serialization/json_path.rb +127 -0
  687. data/lib/puppet/pops/serialization/object.rb +70 -0
  688. data/lib/puppet/pops/serialization/serializer.rb +140 -0
  689. data/lib/puppet/pops/serialization/time_factory.rb +67 -0
  690. data/lib/puppet/pops/serialization/to_data_converter.rb +313 -0
  691. data/lib/puppet/pops/serialization/to_stringified_converter.rb +226 -0
  692. data/lib/puppet/pops/serialization.rb +43 -0
  693. data/lib/puppet/pops/time/timespan.rb +716 -0
  694. data/lib/puppet/pops/time/timestamp.rb +160 -0
  695. data/lib/puppet/pops/types/annotatable.rb +36 -0
  696. data/lib/puppet/pops/types/annotation.rb +71 -0
  697. data/lib/puppet/pops/types/class_loader.rb +132 -0
  698. data/lib/puppet/pops/types/implementation_registry.rb +134 -0
  699. data/lib/puppet/pops/types/iterable.rb +365 -0
  700. data/lib/puppet/pops/types/p_binary_type.rb +232 -0
  701. data/lib/puppet/pops/types/p_init_type.rb +238 -0
  702. data/lib/puppet/pops/types/p_meta_type.rb +94 -0
  703. data/lib/puppet/pops/types/p_object_type.rb +1117 -0
  704. data/lib/puppet/pops/types/p_object_type_extension.rb +228 -0
  705. data/lib/puppet/pops/types/p_runtime_type.rb +115 -0
  706. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +190 -0
  707. data/lib/puppet/pops/types/p_sem_ver_type.rb +155 -0
  708. data/lib/puppet/pops/types/p_sensitive_type.rb +83 -0
  709. data/lib/puppet/pops/types/p_timespan_type.rb +192 -0
  710. data/lib/puppet/pops/types/p_timestamp_type.rb +73 -0
  711. data/lib/puppet/pops/types/p_type_set_type.rb +387 -0
  712. data/lib/puppet/pops/types/p_uri_type.rb +190 -0
  713. data/lib/puppet/pops/types/puppet_object.rb +40 -0
  714. data/lib/puppet/pops/types/recursion_guard.rb +136 -0
  715. data/lib/puppet/pops/types/ruby_generator.rb +472 -0
  716. data/lib/puppet/pops/types/ruby_method.rb +31 -0
  717. data/lib/puppet/pops/types/string_converter.rb +1134 -0
  718. data/lib/puppet/pops/types/tree_iterators.rb +254 -0
  719. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  720. data/lib/puppet/pops/types/type_asserter.rb +47 -0
  721. data/lib/puppet/pops/types/type_assertion_error.rb +27 -0
  722. data/lib/puppet/pops/types/type_calculator.rb +822 -0
  723. data/lib/puppet/pops/types/type_conversion_error.rb +15 -0
  724. data/lib/puppet/pops/types/type_factory.rb +631 -0
  725. data/lib/puppet/pops/types/type_formatter.rb +801 -0
  726. data/lib/puppet/pops/types/type_mismatch_describer.rb +1096 -0
  727. data/lib/puppet/pops/types/type_parser.rb +683 -0
  728. data/lib/puppet/pops/types/type_set_reference.rb +59 -0
  729. data/lib/puppet/pops/types/type_with_members.rb +43 -0
  730. data/lib/puppet/pops/types/types.rb +3633 -0
  731. data/lib/puppet/pops/utils.rb +119 -0
  732. data/lib/puppet/pops/validation/checker4_0.rb +1148 -0
  733. data/lib/puppet/pops/validation/tasks_checker.rb +93 -0
  734. data/lib/puppet/pops/validation/validator_factory_4_0.rb +45 -0
  735. data/lib/puppet/pops/validation.rb +459 -0
  736. data/lib/puppet/pops/visitable.rb +6 -0
  737. data/lib/puppet/pops/visitor.rb +122 -0
  738. data/lib/puppet/pops.rb +121 -0
  739. data/lib/puppet/property/boolean.rb +7 -0
  740. data/lib/puppet/property/ensure.rb +106 -0
  741. data/lib/puppet/property/keyvalue.rb +158 -0
  742. data/lib/puppet/property/list.rb +70 -0
  743. data/lib/puppet/property/ordered_list.rb +29 -0
  744. data/lib/puppet/property.rb +611 -0
  745. data/lib/puppet/provider/aix_object.rb +485 -0
  746. data/lib/puppet/provider/command.rb +25 -0
  747. data/lib/puppet/provider/confine.rb +6 -0
  748. data/lib/puppet/provider/exec/posix.rb +60 -0
  749. data/lib/puppet/provider/exec/shell.rb +25 -0
  750. data/lib/puppet/provider/exec/windows.rb +55 -0
  751. data/lib/puppet/provider/exec.rb +105 -0
  752. data/lib/puppet/provider/file/posix.rb +144 -0
  753. data/lib/puppet/provider/file/windows.rb +152 -0
  754. data/lib/puppet/provider/group/aix.rb +99 -0
  755. data/lib/puppet/provider/group/directoryservice.rb +22 -0
  756. data/lib/puppet/provider/group/groupadd.rb +174 -0
  757. data/lib/puppet/provider/group/ldap.rb +48 -0
  758. data/lib/puppet/provider/group/pw.rb +51 -0
  759. data/lib/puppet/provider/group/windows_adsi.rb +113 -0
  760. data/lib/puppet/provider/ldap.rb +141 -0
  761. data/lib/puppet/provider/nameservice/directoryservice.rb +512 -0
  762. data/lib/puppet/provider/nameservice/objectadd.rb +22 -0
  763. data/lib/puppet/provider/nameservice/pw.rb +21 -0
  764. data/lib/puppet/provider/nameservice.rb +293 -0
  765. data/lib/puppet/provider/network_device.rb +74 -0
  766. data/lib/puppet/provider/package/aix.rb +169 -0
  767. data/lib/puppet/provider/package/appdmg.rb +111 -0
  768. data/lib/puppet/provider/package/apple.rb +47 -0
  769. data/lib/puppet/provider/package/apt.rb +262 -0
  770. data/lib/puppet/provider/package/aptitude.rb +35 -0
  771. data/lib/puppet/provider/package/aptrpm.rb +83 -0
  772. data/lib/puppet/provider/package/blastwave.rb +112 -0
  773. data/lib/puppet/provider/package/dnf.rb +50 -0
  774. data/lib/puppet/provider/package/dnfmodule.rb +141 -0
  775. data/lib/puppet/provider/package/dpkg.rb +192 -0
  776. data/lib/puppet/provider/package/fink.rb +97 -0
  777. data/lib/puppet/provider/package/freebsd.rb +47 -0
  778. data/lib/puppet/provider/package/gem.rb +293 -0
  779. data/lib/puppet/provider/package/hpux.rb +44 -0
  780. data/lib/puppet/provider/package/macports.rb +110 -0
  781. data/lib/puppet/provider/package/nim.rb +291 -0
  782. data/lib/puppet/provider/package/openbsd.rb +260 -0
  783. data/lib/puppet/provider/package/opkg.rb +82 -0
  784. data/lib/puppet/provider/package/pacman.rb +273 -0
  785. data/lib/puppet/provider/package/pip.rb +346 -0
  786. data/lib/puppet/provider/package/pip2.rb +17 -0
  787. data/lib/puppet/provider/package/pip3.rb +17 -0
  788. data/lib/puppet/provider/package/pkg.rb +295 -0
  789. data/lib/puppet/provider/package/pkgdmg.rb +153 -0
  790. data/lib/puppet/provider/package/pkgin.rb +87 -0
  791. data/lib/puppet/provider/package/pkgng.rb +173 -0
  792. data/lib/puppet/provider/package/pkgutil.rb +187 -0
  793. data/lib/puppet/provider/package/portage.rb +310 -0
  794. data/lib/puppet/provider/package/ports.rb +91 -0
  795. data/lib/puppet/provider/package/portupgrade.rb +240 -0
  796. data/lib/puppet/provider/package/puppet_gem.rb +34 -0
  797. data/lib/puppet/provider/package/puppetserver_gem.rb +171 -0
  798. data/lib/puppet/provider/package/rpm.rb +250 -0
  799. data/lib/puppet/provider/package/rug.rb +51 -0
  800. data/lib/puppet/provider/package/sun.rb +133 -0
  801. data/lib/puppet/provider/package/sunfreeware.rb +9 -0
  802. data/lib/puppet/provider/package/tdnf.rb +28 -0
  803. data/lib/puppet/provider/package/up2date.rb +40 -0
  804. data/lib/puppet/provider/package/urpmi.rb +55 -0
  805. data/lib/puppet/provider/package/windows/exe_package.rb +106 -0
  806. data/lib/puppet/provider/package/windows/msi_package.rb +70 -0
  807. data/lib/puppet/provider/package/windows/package.rb +110 -0
  808. data/lib/puppet/provider/package/windows.rb +130 -0
  809. data/lib/puppet/provider/package/yum.rb +387 -0
  810. data/lib/puppet/provider/package/zypper.rb +206 -0
  811. data/lib/puppet/provider/package.rb +59 -0
  812. data/lib/puppet/provider/package_targetable.rb +69 -0
  813. data/lib/puppet/provider/parsedfile.rb +490 -0
  814. data/lib/puppet/provider/service/base.rb +139 -0
  815. data/lib/puppet/provider/service/bsd.rb +51 -0
  816. data/lib/puppet/provider/service/daemontools.rb +193 -0
  817. data/lib/puppet/provider/service/debian.rb +75 -0
  818. data/lib/puppet/provider/service/freebsd.rb +143 -0
  819. data/lib/puppet/provider/service/gentoo.rb +45 -0
  820. data/lib/puppet/provider/service/init.rb +192 -0
  821. data/lib/puppet/provider/service/launchd.rb +384 -0
  822. data/lib/puppet/provider/service/openbsd.rb +100 -0
  823. data/lib/puppet/provider/service/openrc.rb +71 -0
  824. data/lib/puppet/provider/service/openwrt.rb +36 -0
  825. data/lib/puppet/provider/service/rcng.rb +51 -0
  826. data/lib/puppet/provider/service/redhat.rb +72 -0
  827. data/lib/puppet/provider/service/runit.rb +106 -0
  828. data/lib/puppet/provider/service/service.rb +68 -0
  829. data/lib/puppet/provider/service/smf.rb +317 -0
  830. data/lib/puppet/provider/service/src.rb +147 -0
  831. data/lib/puppet/provider/service/systemd.rb +232 -0
  832. data/lib/puppet/provider/service/upstart.rb +385 -0
  833. data/lib/puppet/provider/service/windows.rb +182 -0
  834. data/lib/puppet/provider/user/aix.rb +361 -0
  835. data/lib/puppet/provider/user/directoryservice.rb +680 -0
  836. data/lib/puppet/provider/user/hpux.rb +95 -0
  837. data/lib/puppet/provider/user/ldap.rb +132 -0
  838. data/lib/puppet/provider/user/openbsd.rb +77 -0
  839. data/lib/puppet/provider/user/pw.rb +108 -0
  840. data/lib/puppet/provider/user/user_role_add.rb +239 -0
  841. data/lib/puppet/provider/user/useradd.rb +406 -0
  842. data/lib/puppet/provider/user/windows_adsi.rb +172 -0
  843. data/lib/puppet/provider.rb +612 -0
  844. data/lib/puppet/reference/configuration.rb +97 -0
  845. data/lib/puppet/reference/function.rb +17 -0
  846. data/lib/puppet/reference/indirection.rb +71 -0
  847. data/lib/puppet/reference/metaparameter.rb +33 -0
  848. data/lib/puppet/reference/providers.rb +117 -0
  849. data/lib/puppet/reference/report.rb +20 -0
  850. data/lib/puppet/reference/type.rb +109 -0
  851. data/lib/puppet/relationship.rb +84 -0
  852. data/lib/puppet/reports/http.rb +44 -0
  853. data/lib/puppet/reports/log.rb +14 -0
  854. data/lib/puppet/reports/store.rb +68 -0
  855. data/lib/puppet/reports.rb +93 -0
  856. data/lib/puppet/resource/catalog.rb +654 -0
  857. data/lib/puppet/resource/status.rb +229 -0
  858. data/lib/puppet/resource/type.rb +425 -0
  859. data/lib/puppet/resource/type_collection.rb +231 -0
  860. data/lib/puppet/resource.rb +663 -0
  861. data/lib/puppet/runtime.rb +65 -0
  862. data/lib/puppet/scheduler/job.rb +53 -0
  863. data/lib/puppet/scheduler/scheduler.rb +44 -0
  864. data/lib/puppet/scheduler/splay_job.rb +32 -0
  865. data/lib/puppet/scheduler/timer.rb +13 -0
  866. data/lib/puppet/scheduler.rb +16 -0
  867. data/lib/puppet/settings/alias_setting.rb +37 -0
  868. data/lib/puppet/settings/array_setting.rb +17 -0
  869. data/lib/puppet/settings/autosign_setting.rb +22 -0
  870. data/lib/puppet/settings/base_setting.rb +223 -0
  871. data/lib/puppet/settings/boolean_setting.rb +32 -0
  872. data/lib/puppet/settings/certificate_revocation_setting.rb +21 -0
  873. data/lib/puppet/settings/config_file.rb +146 -0
  874. data/lib/puppet/settings/directory_setting.rb +18 -0
  875. data/lib/puppet/settings/duration_setting.rb +32 -0
  876. data/lib/puppet/settings/enum_setting.rb +16 -0
  877. data/lib/puppet/settings/environment_conf.rb +224 -0
  878. data/lib/puppet/settings/errors.rb +11 -0
  879. data/lib/puppet/settings/file_or_directory_setting.rb +40 -0
  880. data/lib/puppet/settings/file_setting.rb +241 -0
  881. data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
  882. data/lib/puppet/settings/ini_file.rb +226 -0
  883. data/lib/puppet/settings/integer_setting.rb +17 -0
  884. data/lib/puppet/settings/path_setting.rb +8 -0
  885. data/lib/puppet/settings/port_setting.rb +15 -0
  886. data/lib/puppet/settings/priority_setting.rb +43 -0
  887. data/lib/puppet/settings/server_list_setting.rb +29 -0
  888. data/lib/puppet/settings/string_setting.rb +9 -0
  889. data/lib/puppet/settings/symbolic_enum_setting.rb +17 -0
  890. data/lib/puppet/settings/terminus_setting.rb +14 -0
  891. data/lib/puppet/settings/ttl_setting.rb +51 -0
  892. data/lib/puppet/settings/value_translator.rb +14 -0
  893. data/lib/puppet/settings.rb +1642 -0
  894. data/lib/puppet/ssl/base.rb +149 -0
  895. data/lib/puppet/ssl/certificate.rb +96 -0
  896. data/lib/puppet/ssl/certificate_request.rb +324 -0
  897. data/lib/puppet/ssl/certificate_request_attributes.rb +37 -0
  898. data/lib/puppet/ssl/certificate_signer.rb +39 -0
  899. data/lib/puppet/ssl/digest.rb +20 -0
  900. data/lib/puppet/ssl/error.rb +26 -0
  901. data/lib/puppet/ssl/oids.rb +197 -0
  902. data/lib/puppet/ssl/openssl_loader.rb +24 -0
  903. data/lib/puppet/ssl/ssl_context.rb +25 -0
  904. data/lib/puppet/ssl/ssl_provider.rb +350 -0
  905. data/lib/puppet/ssl/state_machine.rb +474 -0
  906. data/lib/puppet/ssl/verifier.rb +142 -0
  907. data/lib/puppet/ssl.rb +23 -0
  908. data/lib/puppet/syntax_checkers/base64.rb +40 -0
  909. data/lib/puppet/syntax_checkers/epp.rb +34 -0
  910. data/lib/puppet/syntax_checkers/json.rb +35 -0
  911. data/lib/puppet/syntax_checkers/pp.rb +34 -0
  912. data/lib/puppet/syntax_checkers.rb +3 -0
  913. data/lib/puppet/test/test_helper.rb +265 -0
  914. data/lib/puppet/thread_local.rb +4 -0
  915. data/lib/puppet/transaction/additional_resource_generator.rb +220 -0
  916. data/lib/puppet/transaction/event.rb +168 -0
  917. data/lib/puppet/transaction/event_manager.rb +179 -0
  918. data/lib/puppet/transaction/persistence.rb +119 -0
  919. data/lib/puppet/transaction/report.rb +504 -0
  920. data/lib/puppet/transaction/resource_harness.rb +323 -0
  921. data/lib/puppet/transaction.rb +491 -0
  922. data/lib/puppet/trusted_external.rb +41 -0
  923. data/lib/puppet/type/component.rb +89 -0
  924. data/lib/puppet/type/exec.rb +720 -0
  925. data/lib/puppet/type/file/checksum.rb +50 -0
  926. data/lib/puppet/type/file/checksum_value.rb +54 -0
  927. data/lib/puppet/type/file/content.rb +176 -0
  928. data/lib/puppet/type/file/ctime.rb +21 -0
  929. data/lib/puppet/type/file/data_sync.rb +98 -0
  930. data/lib/puppet/type/file/ensure.rb +195 -0
  931. data/lib/puppet/type/file/group.rb +48 -0
  932. data/lib/puppet/type/file/mode.rb +189 -0
  933. data/lib/puppet/type/file/mtime.rb +19 -0
  934. data/lib/puppet/type/file/owner.rb +51 -0
  935. data/lib/puppet/type/file/selcontext.rb +142 -0
  936. data/lib/puppet/type/file/source.rb +379 -0
  937. data/lib/puppet/type/file/target.rb +88 -0
  938. data/lib/puppet/type/file/type.rb +20 -0
  939. data/lib/puppet/type/file.rb +1133 -0
  940. data/lib/puppet/type/filebucket.rb +121 -0
  941. data/lib/puppet/type/group.rb +237 -0
  942. data/lib/puppet/type/notify.rb +47 -0
  943. data/lib/puppet/type/package.rb +713 -0
  944. data/lib/puppet/type/resources.rb +187 -0
  945. data/lib/puppet/type/schedule.rb +441 -0
  946. data/lib/puppet/type/service.rb +309 -0
  947. data/lib/puppet/type/stage.rb +27 -0
  948. data/lib/puppet/type/tidy.rb +376 -0
  949. data/lib/puppet/type/user.rb +859 -0
  950. data/lib/puppet/type/whit.rb +34 -0
  951. data/lib/puppet/type.rb +2676 -0
  952. data/lib/puppet/util/at_fork/noop.rb +18 -0
  953. data/lib/puppet/util/at_fork/solaris.rb +160 -0
  954. data/lib/puppet/util/at_fork.rb +35 -0
  955. data/lib/puppet/util/autoload.rb +215 -0
  956. data/lib/puppet/util/backups.rb +86 -0
  957. data/lib/puppet/util/character_encoding.rb +80 -0
  958. data/lib/puppet/util/checksums.rb +376 -0
  959. data/lib/puppet/util/classgen.rb +228 -0
  960. data/lib/puppet/util/colors.rb +100 -0
  961. data/lib/puppet/util/command_line/puppet_option_parser.rb +87 -0
  962. data/lib/puppet/util/command_line/trollop.rb +825 -0
  963. data/lib/puppet/util/command_line.rb +196 -0
  964. data/lib/puppet/util/constant_inflector.rb +24 -0
  965. data/lib/puppet/util/diff.rb +81 -0
  966. data/lib/puppet/util/docs.rb +128 -0
  967. data/lib/puppet/util/errors.rb +159 -0
  968. data/lib/puppet/util/execution.rb +424 -0
  969. data/lib/puppet/util/execution_stub.rb +26 -0
  970. data/lib/puppet/util/feature.rb +129 -0
  971. data/lib/puppet/util/file_watcher.rb +28 -0
  972. data/lib/puppet/util/fileparsing.rb +408 -0
  973. data/lib/puppet/util/filetype.rb +358 -0
  974. data/lib/puppet/util/http_proxy.rb +4 -0
  975. data/lib/puppet/util/inifile.rb +340 -0
  976. data/lib/puppet/util/instance_loader.rb +66 -0
  977. data/lib/puppet/util/json.rb +92 -0
  978. data/lib/puppet/util/json_lockfile.rb +44 -0
  979. data/lib/puppet/util/ldap/connection.rb +73 -0
  980. data/lib/puppet/util/ldap/generator.rb +42 -0
  981. data/lib/puppet/util/ldap/manager.rb +284 -0
  982. data/lib/puppet/util/ldap.rb +2 -0
  983. data/lib/puppet/util/libuser.conf +15 -0
  984. data/lib/puppet/util/libuser.rb +12 -0
  985. data/lib/puppet/util/limits.rb +12 -0
  986. data/lib/puppet/util/lockfile.rb +66 -0
  987. data/lib/puppet/util/log/destination.rb +49 -0
  988. data/lib/puppet/util/log/destinations.rb +253 -0
  989. data/lib/puppet/util/log.rb +427 -0
  990. data/lib/puppet/util/logging.rb +300 -0
  991. data/lib/puppet/util/metaid.rb +21 -0
  992. data/lib/puppet/util/metric.rb +65 -0
  993. data/lib/puppet/util/monkey_patches.rb +122 -0
  994. data/lib/puppet/util/multi_match.rb +51 -0
  995. data/lib/puppet/util/network_device/base.rb +23 -0
  996. data/lib/puppet/util/network_device/config.rb +105 -0
  997. data/lib/puppet/util/network_device/transport/base.rb +26 -0
  998. data/lib/puppet/util/network_device/transport.rb +5 -0
  999. data/lib/puppet/util/network_device.rb +17 -0
  1000. data/lib/puppet/util/package/version/debian.rb +175 -0
  1001. data/lib/puppet/util/package/version/gem.rb +15 -0
  1002. data/lib/puppet/util/package/version/pip.rb +167 -0
  1003. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  1004. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  1005. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  1006. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  1007. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  1008. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  1009. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  1010. data/lib/puppet/util/package/version/range.rb +53 -0
  1011. data/lib/puppet/util/package/version/rpm.rb +73 -0
  1012. data/lib/puppet/util/package.rb +40 -0
  1013. data/lib/puppet/util/pidlock.rb +102 -0
  1014. data/lib/puppet/util/platform.rb +70 -0
  1015. data/lib/puppet/util/plist.rb +161 -0
  1016. data/lib/puppet/util/posix.rb +203 -0
  1017. data/lib/puppet/util/profiler/aggregate.rb +85 -0
  1018. data/lib/puppet/util/profiler/around_profiler.rb +67 -0
  1019. data/lib/puppet/util/profiler/logging.rb +48 -0
  1020. data/lib/puppet/util/profiler/object_counts.rb +17 -0
  1021. data/lib/puppet/util/profiler/wall_clock.rb +35 -0
  1022. data/lib/puppet/util/profiler.rb +53 -0
  1023. data/lib/puppet/util/provider_features.rb +179 -0
  1024. data/lib/puppet/util/psych_support.rb +30 -0
  1025. data/lib/puppet/util/rdoc/code_objects.rb +295 -0
  1026. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +912 -0
  1027. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1085 -0
  1028. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +259 -0
  1029. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +14 -0
  1030. data/lib/puppet/util/rdoc/parser.rb +12 -0
  1031. data/lib/puppet/util/rdoc.rb +53 -0
  1032. data/lib/puppet/util/reference.rb +119 -0
  1033. data/lib/puppet/util/resource_template.rb +61 -0
  1034. data/lib/puppet/util/retry_action.rb +46 -0
  1035. data/lib/puppet/util/rpm_compare.rb +193 -0
  1036. data/lib/puppet/util/rubygems.rb +67 -0
  1037. data/lib/puppet/util/run_mode.rb +122 -0
  1038. data/lib/puppet/util/selinux.rb +297 -0
  1039. data/lib/puppet/util/skip_tags.rb +13 -0
  1040. data/lib/puppet/util/splayer.rb +18 -0
  1041. data/lib/puppet/util/storage.rb +100 -0
  1042. data/lib/puppet/util/suidmanager.rb +166 -0
  1043. data/lib/puppet/util/symbolic_file_mode.rb +156 -0
  1044. data/lib/puppet/util/tag_set.rb +27 -0
  1045. data/lib/puppet/util/tagging.rb +132 -0
  1046. data/lib/puppet/util/terminal.rb +16 -0
  1047. data/lib/puppet/util/user_attr.rb +21 -0
  1048. data/lib/puppet/util/warnings.rb +31 -0
  1049. data/lib/puppet/util/watched_file.rb +37 -0
  1050. data/lib/puppet/util/watcher/change_watcher.rb +33 -0
  1051. data/lib/puppet/util/watcher/periodic_watcher.rb +37 -0
  1052. data/lib/puppet/util/watcher/timer.rb +19 -0
  1053. data/lib/puppet/util/watcher.rb +17 -0
  1054. data/lib/puppet/util/windows/access_control_entry.rb +84 -0
  1055. data/lib/puppet/util/windows/access_control_list.rb +113 -0
  1056. data/lib/puppet/util/windows/adsi.rb +654 -0
  1057. data/lib/puppet/util/windows/com.rb +225 -0
  1058. data/lib/puppet/util/windows/daemon.rb +343 -0
  1059. data/lib/puppet/util/windows/error.rb +84 -0
  1060. data/lib/puppet/util/windows/eventlog.rb +187 -0
  1061. data/lib/puppet/util/windows/file.rb +355 -0
  1062. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  1063. data/lib/puppet/util/windows/principal.rb +201 -0
  1064. data/lib/puppet/util/windows/process.rb +364 -0
  1065. data/lib/puppet/util/windows/registry.rb +441 -0
  1066. data/lib/puppet/util/windows/root_certs.rb +108 -0
  1067. data/lib/puppet/util/windows/security.rb +907 -0
  1068. data/lib/puppet/util/windows/security_descriptor.rb +62 -0
  1069. data/lib/puppet/util/windows/service.rb +696 -0
  1070. data/lib/puppet/util/windows/sid.rb +289 -0
  1071. data/lib/puppet/util/windows/string.rb +15 -0
  1072. data/lib/puppet/util/windows/user.rb +550 -0
  1073. data/lib/puppet/util/windows.rb +51 -0
  1074. data/lib/puppet/util/yaml.rb +65 -0
  1075. data/lib/puppet/util.rb +808 -0
  1076. data/lib/puppet/vendor/require_vendored.rb +4 -0
  1077. data/lib/puppet/vendor.rb +57 -0
  1078. data/lib/puppet/version.rb +95 -0
  1079. data/lib/puppet/x509/cert_provider.rb +369 -0
  1080. data/lib/puppet/x509/pem_store.rb +55 -0
  1081. data/lib/puppet/x509.rb +11 -0
  1082. data/lib/puppet.rb +345 -0
  1083. data/lib/puppet_pal.rb +8 -0
  1084. data/lib/puppet_x.rb +14 -0
  1085. data/locales/config.yaml +29 -0
  1086. data/locales/en/puppet.po +19 -0
  1087. data/locales/puppet.pot +20 -0
  1088. data/man/man5/puppet.conf.5 +2198 -0
  1089. data/man/man8/puppet-agent.8 +203 -0
  1090. data/man/man8/puppet-apply.8 +100 -0
  1091. data/man/man8/puppet-catalog.8 +291 -0
  1092. data/man/man8/puppet-config.8 +151 -0
  1093. data/man/man8/puppet-describe.8 +51 -0
  1094. data/man/man8/puppet-device.8 +119 -0
  1095. data/man/man8/puppet-doc.8 +46 -0
  1096. data/man/man8/puppet-epp.8 +377 -0
  1097. data/man/man8/puppet-facts.8 +234 -0
  1098. data/man/man8/puppet-filebucket.8 +166 -0
  1099. data/man/man8/puppet-generate.8 +84 -0
  1100. data/man/man8/puppet-help.8 +67 -0
  1101. data/man/man8/puppet-lookup.8 +107 -0
  1102. data/man/man8/puppet-module.8 +325 -0
  1103. data/man/man8/puppet-node.8 +163 -0
  1104. data/man/man8/puppet-parser.8 +130 -0
  1105. data/man/man8/puppet-plugin.8 +73 -0
  1106. data/man/man8/puppet-report.8 +127 -0
  1107. data/man/man8/puppet-resource.8 +88 -0
  1108. data/man/man8/puppet-script.8 +70 -0
  1109. data/man/man8/puppet-ssl.8 +63 -0
  1110. data/man/man8/puppet.8 +28 -0
  1111. data/tasks/benchmark.rake +180 -0
  1112. data/tasks/ci.rake +24 -0
  1113. data/tasks/generate_ast_model.rake +90 -0
  1114. data/tasks/generate_cert_fixtures.rake +194 -0
  1115. data/tasks/manpages.rake +67 -0
  1116. data/tasks/memwalk.rake +195 -0
  1117. data/tasks/parallel.rake +410 -0
  1118. data/tasks/parser.rake +22 -0
  1119. data/tasks/yard.rake +59 -0
  1120. metadata +1324 -0
@@ -0,0 +1,1134 @@
1
+ require_relative '../../../puppet/concurrent/thread_local_singleton'
2
+
3
+ module Puppet::Pops
4
+ module Types
5
+
6
+ # Converts Puppet runtime objects to String under the control of a Format.
7
+ # Use from Puppet Language is via the function `new`.
8
+ #
9
+ # @api private
10
+ #
11
+ class StringConverter
12
+
13
+ # @api private
14
+ class FormatError < ArgumentError
15
+ def initialize(type_string, actual, expected)
16
+ super "Illegal format '#{actual}' specified for value of #{type_string} type - expected one of the characters '#{expected}'"
17
+ end
18
+ end
19
+
20
+ class Indentation
21
+ attr_reader :level
22
+ attr_reader :first
23
+ attr_reader :is_indenting
24
+ alias :first? :first
25
+ alias :is_indenting? :is_indenting
26
+
27
+ def initialize(level, first, is_indenting)
28
+ @level = level
29
+ @first = first
30
+ @is_indenting = is_indenting
31
+ end
32
+
33
+ def subsequent
34
+ first? ? self.class.new(level, false, @is_indenting) : self
35
+ end
36
+
37
+ def indenting(indenting_flag)
38
+ self.class.new(level, first?, indenting_flag)
39
+ end
40
+
41
+ def increase(indenting_flag = false)
42
+ self.class.new(level + 1, true, indenting_flag)
43
+ end
44
+
45
+ def breaks?
46
+ is_indenting? && level > 0 && ! first?
47
+ end
48
+
49
+ def padding
50
+ return ' ' * 2 * level
51
+ end
52
+ end
53
+
54
+ # Format represents one format specification that is textually represented by %<flags><width>.<precision><format>
55
+ # Format parses and makes the individual parts available when an instance is created.
56
+ #
57
+ # @api private
58
+ #
59
+ class Format
60
+ # Boolean, alternate form (varies in meaning)
61
+ attr_reader :alt
62
+ alias :alt? :alt
63
+
64
+ # Nil or Integer with width of field > 0
65
+ attr_reader :width
66
+ # Nil or Integer precisions
67
+ attr_reader :prec
68
+ # One char symbol denoting the format
69
+ attr_reader :format
70
+ # Symbol, :space, :plus, :ignore
71
+ attr_reader :plus
72
+ # Boolean, left adjust in given width or not
73
+ attr_reader :left
74
+ # Boolean left_pad with zero instead of space
75
+ attr_reader :zero_pad
76
+ # Delimiters for containers, a "left" char representing the pair <[{(
77
+ attr_reader :delimiters
78
+
79
+ # Map of type to format for elements contained in an object this format applies to
80
+ attr_accessor :container_string_formats
81
+
82
+ # Separator string inserted between elements in a container
83
+ attr_accessor :separator
84
+
85
+ # Separator string inserted between sub elements in a container
86
+ attr_accessor :separator2
87
+
88
+ attr_reader :orig_fmt
89
+
90
+ FMT_PATTERN_STR = '^%([\s\[+#0{<(|-]*)([1-9][0-9]*)?(?:\.([0-9]+))?([a-zA-Z])$'
91
+ FMT_PATTERN = Regexp.compile(FMT_PATTERN_STR)
92
+ DELIMITERS = [ '[', '{', '(', '<', '|',]
93
+ DELIMITER_MAP = {
94
+ '[' => ['[', ']'],
95
+ '{' => ['{', '}'],
96
+ '(' => ['(', ')'],
97
+ '<' => ['<', '>'],
98
+ '|' => ['|', '|'],
99
+ :space => ['', '']
100
+ }.freeze
101
+
102
+ def initialize(fmt)
103
+ @orig_fmt = fmt
104
+ match = FMT_PATTERN.match(fmt)
105
+ unless match
106
+ raise ArgumentError, "The format '#{fmt}' is not a valid format on the form '%<flags><width>.<prec><format>'"
107
+ end
108
+
109
+ @format = match[4]
110
+ unless @format.is_a?(String) && @format.length == 1
111
+ raise ArgumentError, "The format must be a one letter format specifier, got '#{@format}'"
112
+ end
113
+ @format = @format.to_sym
114
+ flags = match[1].split('') || []
115
+ unless flags.uniq.size == flags.size
116
+ raise ArgumentError, "The same flag can only be used once, got '#{fmt}'"
117
+ end
118
+ @left = flags.include?('-')
119
+ @alt = flags.include?('#')
120
+ @plus = (flags.include?(' ') ? :space : (flags.include?('+') ? :plus : :ignore))
121
+ @zero_pad = flags.include?('0')
122
+
123
+ @delimiters = nil
124
+ DELIMITERS.each do |d|
125
+ next unless flags.include?(d)
126
+ if !@delimiters.nil?
127
+ raise ArgumentError, "Only one of the delimiters [ { ( < | can be given in the format flags, got '#{fmt}'"
128
+ end
129
+ @delimiters = d
130
+ end
131
+
132
+ @width = match[2] ? match[2].to_i : nil
133
+ @prec = match[3] ? match[3].to_i : nil
134
+ end
135
+
136
+ # Merges one format into this and returns a new `Format`. The `other` format overrides this.
137
+ # @param [Format] other
138
+ # @returns [Format] a merged format
139
+ #
140
+ def merge(other)
141
+ result = Format.new(other.orig_fmt)
142
+ result.separator = other.separator || separator
143
+ result.separator2 = other.separator2 || separator2
144
+ result.container_string_formats = Format.merge_string_formats(container_string_formats, other.container_string_formats)
145
+ result
146
+ end
147
+
148
+ # Merges two formats where the `higher` format overrides the `lower`. Produces a new `Format`
149
+ # @param [Format] lower
150
+ # @param [Format] higher
151
+ # @returns [Format] the merged result
152
+ #
153
+ def self.merge(lower, higher)
154
+ unless lower && higher
155
+ return lower || higher
156
+ end
157
+ lower.merge(higher)
158
+ end
159
+
160
+ # Merges a type => format association and returns a new merged and sorted association.
161
+ # @param [Format] lower
162
+ # @param [Format] higher
163
+ # @returns [Hash] the merged type => format result
164
+ #
165
+ def self.merge_string_formats(lower, higher)
166
+ unless lower && higher
167
+ return lower || higher
168
+ end
169
+
170
+ # drop all formats in lower than is more generic in higher. Lower must never
171
+ # override higher
172
+ lower = lower.reject { |lk, _| higher.keys.any? { |hk| hk != lk && hk.assignable?(lk) }}
173
+
174
+ merged = (lower.keys + higher.keys).uniq.map do |k|
175
+ [k, merge(lower[k], higher[k])]
176
+ end
177
+ sort_formats(merged)
178
+ end
179
+
180
+ # Sorts format based on generality of types - most specific types before general
181
+ #
182
+ def self.sort_formats(format_map)
183
+ format_map = format_map.sort do |(a,_),(b,_)|
184
+ ab = b.assignable?(a)
185
+ ba = a.assignable?(b)
186
+ if a == b
187
+ 0
188
+ elsif ab && !ba
189
+ -1
190
+ elsif !ab && ba
191
+ 1
192
+ else
193
+ # arbitrary order if disjunct (based on name of type)
194
+ rank_a = type_rank(a)
195
+ rank_b = type_rank(b)
196
+ if rank_a == 0 || rank_b == 0
197
+ a.to_s <=> b.to_s
198
+ else
199
+ rank_a <=> rank_b
200
+ end
201
+ end
202
+ end
203
+ Hash[format_map]
204
+ end
205
+
206
+ # Ranks type on specificity where it matters
207
+ # lower number means more specific
208
+ def self.type_rank(t)
209
+ case t
210
+ when PStructType
211
+ 1
212
+ when PHashType
213
+ 2
214
+ when PTupleType
215
+ 3
216
+ when PArrayType
217
+ 4
218
+ when PPatternType
219
+ 10
220
+ when PEnumType
221
+ 11
222
+ when PStringType
223
+ 12
224
+ else
225
+ 0
226
+ end
227
+ end
228
+ # Returns an array with a delimiter pair derived from the format.
229
+ # If format does not contain a delimiter specification the given default is returned
230
+ #
231
+ # @param [Array<String>] the default delimiters
232
+ # @returns [Array<String>] a tuple with left, right delimiters
233
+ #
234
+ def delimiter_pair(default = StringConverter::DEFAULT_ARRAY_DELIMITERS)
235
+ DELIMITER_MAP[ @delimiters || @plus ] || default
236
+ end
237
+
238
+ def to_s
239
+ "%#{@flags}#{@width}.#{@prec}#{@format}"
240
+ end
241
+ end
242
+
243
+ extend Puppet::Concurrent::ThreadLocalSingleton
244
+
245
+ # @api public
246
+ def self.convert(value, string_formats = :default)
247
+ singleton.convert(value, string_formats)
248
+ end
249
+
250
+ # @api private
251
+ #
252
+ def initialize
253
+ @string_visitor = Visitor.new(self, "string", 3, 3)
254
+ end
255
+
256
+ DEFAULT_INDENTATION = Indentation.new(0, true, false).freeze
257
+
258
+ # format used by default for values in a container
259
+ # (basically strings are quoted since they may contain a ','))
260
+ #
261
+ DEFAULT_CONTAINER_FORMATS = {
262
+ PAnyType::DEFAULT => Format.new('%p').freeze, # quoted string (Ruby inspect)
263
+ }.freeze
264
+
265
+ DEFAULT_ARRAY_FORMAT = Format.new('%a')
266
+ DEFAULT_ARRAY_FORMAT.separator = ', '.freeze
267
+ DEFAULT_ARRAY_FORMAT.separator2 = ', '.freeze
268
+ DEFAULT_ARRAY_FORMAT.container_string_formats = DEFAULT_CONTAINER_FORMATS
269
+ DEFAULT_ARRAY_FORMAT.freeze
270
+
271
+ DEFAULT_HASH_FORMAT = Format.new('%h')
272
+ DEFAULT_HASH_FORMAT.separator = ', '.freeze
273
+ DEFAULT_HASH_FORMAT.separator2 = ' => '.freeze
274
+ DEFAULT_HASH_FORMAT.container_string_formats = DEFAULT_CONTAINER_FORMATS
275
+ DEFAULT_HASH_FORMAT.freeze
276
+
277
+ DEFAULT_HASH_DELIMITERS = ['{', '}'].freeze
278
+ DEFAULT_ARRAY_DELIMITERS = ['[', ']'].freeze
279
+
280
+ DEFAULT_STRING_FORMATS = {
281
+ PObjectType::DEFAULT => Format.new('%p').freeze, # call with initialization hash
282
+ PFloatType::DEFAULT => Format.new('%f').freeze, # float
283
+ PNumericType::DEFAULT => Format.new('%d').freeze, # decimal number
284
+ PArrayType::DEFAULT => DEFAULT_ARRAY_FORMAT.freeze,
285
+ PHashType::DEFAULT => DEFAULT_HASH_FORMAT.freeze,
286
+ PBinaryType::DEFAULT => Format.new('%B').freeze, # strict base64 string unquoted
287
+ PAnyType::DEFAULT => Format.new('%s').freeze, # unquoted string
288
+ }.freeze
289
+
290
+ DEFAULT_PARAMETER_FORMAT = {
291
+ PCollectionType::DEFAULT => '%#p',
292
+ PObjectType::DEFAULT => '%#p',
293
+ PBinaryType::DEFAULT => '%p',
294
+ PStringType::DEFAULT => '%p',
295
+ PRuntimeType::DEFAULT => '%p'
296
+ }.freeze
297
+
298
+ # Converts the given value to a String, under the direction of formatting rules per type.
299
+ #
300
+ # When converting to string it is possible to use a set of built in conversion rules.
301
+ #
302
+ # A format is specified on the form:
303
+ #
304
+ # ´´´
305
+ # %[Flags][Width][.Precision]Format
306
+ # ´´´
307
+ #
308
+ # `Width` is the number of characters into which the value should be fitted. This allocated space is
309
+ # padded if value is shorter. By default it is space padded, and the flag 0 will cause padding with 0
310
+ # for numerical formats.
311
+ #
312
+ # `Precision` is the number of fractional digits to show for floating point, and the maximum characters
313
+ # included in a string format.
314
+ #
315
+ # Note that all data type supports the formats `s` and `p` with the meaning "default to-string" and
316
+ # "default-programmatic to-string".
317
+ #
318
+ # ### Integer
319
+ #
320
+ # | Format | Integer Formats
321
+ # | ------ | ---------------
322
+ # | d | Decimal, negative values produces leading '-'
323
+ # | x X | Hexadecimal in lower or upper case. Uses ..f/..F for negative values unless # is also used
324
+ # | o | Octal. Uses ..0 for negative values unless # is also used
325
+ # | b B | Binary with prefix 'b' or 'B'. Uses ..1/..1 for negative values unless # is also used
326
+ # | c | numeric value representing a Unicode value, result is a one unicode character string, quoted if alternative flag # is used
327
+ # | s | same as d, or d in quotes if alternative flag # is used
328
+ # | p | same as d
329
+ # | eEfgGaA | converts integer to float and formats using the floating point rules
330
+ #
331
+ # Defaults to `d`
332
+ #
333
+ # ### Float
334
+ #
335
+ # | Format | Float formats
336
+ # | ------ | -------------
337
+ # | f | floating point in non exponential notation
338
+ # | e E | exponential notation with 'e' or 'E'
339
+ # | g G | conditional exponential with 'e' or 'E' if exponent < -4 or >= the precision
340
+ # | a A | hexadecimal exponential form, using 'x'/'X' as prefix and 'p'/'P' before exponent
341
+ # | s | converted to string using format p, then applying string formatting rule, alternate form # quotes result
342
+ # | p | f format with minimum significant number of fractional digits, prec has no effect
343
+ # | dxXobBc | converts float to integer and formats using the integer rules
344
+ #
345
+ # Defaults to `p`
346
+ #
347
+ # ### String
348
+ #
349
+ # | Format | String
350
+ # | ------ | ------
351
+ # | s | unquoted string, verbatim output of control chars
352
+ # | p | programmatic representation - strings are quoted, interior quotes and control chars are escaped
353
+ # | C | each :: name segment capitalized, quoted if alternative flag # is used
354
+ # | c | capitalized string, quoted if alternative flag # is used
355
+ # | d | downcased string, quoted if alternative flag # is used
356
+ # | u | upcased string, quoted if alternative flag # is used
357
+ # | t | trims leading and trailing whitespace from the string, quoted if alternative flag # is used
358
+ #
359
+ # Defaults to `s` at top level and `p` inside array or hash.
360
+ #
361
+ # ### Boolean
362
+ #
363
+ # | Format | Boolean Formats
364
+ # | ---- | -------------------
365
+ # | t T | 'true'/'false' or 'True'/'False' , first char if alternate form is used (i.e. 't'/'f' or 'T'/'F').
366
+ # | y Y | 'yes'/'no', 'Yes'/'No', 'y'/'n' or 'Y'/'N' if alternative flag # is used
367
+ # | dxXobB | numeric value 0/1 in accordance with the given format which must be valid integer format
368
+ # | eEfgGaA | numeric value 0.0/1.0 in accordance with the given float format and flags
369
+ # | s | 'true' / 'false'
370
+ # | p | 'true' / 'false'
371
+ #
372
+ # ### Regexp
373
+ #
374
+ # | Format | Regexp Formats (%/)
375
+ # | ---- | ------------------
376
+ # | s | / / delimiters, alternate flag replaces / delimiters with quotes
377
+ # | p | / / delimiters
378
+ #
379
+ # ### Undef
380
+ #
381
+ # | Format | Undef formats
382
+ # | ------ | -------------
383
+ # | s | empty string, or quoted empty string if alternative flag # is used
384
+ # | p | 'undef', or quoted '"undef"' if alternative flag # is used
385
+ # | n | 'nil', or 'null' if alternative flag # is used
386
+ # | dxXobB | 'NaN'
387
+ # | eEfgGaA | 'NaN'
388
+ # | v | 'n/a'
389
+ # | V | 'N/A'
390
+ # | u | 'undef', or 'undefined' if alternative # flag is used
391
+ #
392
+ # ### Default (value)
393
+ #
394
+ # | Format | Default formats
395
+ # | ------ | ---------------
396
+ # | d D | 'default' or 'Default', alternative form # causes value to be quoted
397
+ # | s | same as d
398
+ # | p | same as d
399
+ #
400
+ # ### Binary (value)
401
+ #
402
+ # | Format | Default formats
403
+ # | ------ | ---------------
404
+ # | s | binary as unquoted characters
405
+ # | p | 'Binary("<base64strict>")'
406
+ # | b | '<base64>' - base64 string with newlines inserted
407
+ # | B | '<base64strict>' - base64 strict string (without newlines inserted)
408
+ # | u | '<base64urlsafe>' - base64 urlsafe string
409
+ # | t | 'Binary' - outputs the name of the type only
410
+ # | T | 'BINARY' - output the name of the type in all caps only
411
+ #
412
+ # The alternate form flag `#` will quote the binary or base64 text output
413
+ # The width and precision values are applied to the text part only in `%p` format.
414
+ #
415
+ # ### Array & Tuple
416
+ #
417
+ # | Format | Array/Tuple Formats
418
+ # | ------ | -------------
419
+ # | a | formats with `[ ]` delimiters and `,`, alternate form `#` indents nested arrays/hashes
420
+ # | s | same as a
421
+ # | p | same as a
422
+ #
423
+ # See "Flags" `<[({\|` for formatting of delimiters, and "Additional parameters for containers; Array and Hash" for
424
+ # more information about options.
425
+ #
426
+ # The alternate form flag `#` will cause indentation of nested array or hash containers. If width is also set
427
+ # it is taken as the maximum allowed length of a sequence of elements (not including delimiters). If this max length
428
+ # is exceeded, each element will be indented.
429
+ #
430
+ # ### Hash & Struct
431
+ #
432
+ # | Format | Hash/Struct Formats
433
+ # | ------ | -------------
434
+ # | h | formats with `{ }` delimiters, `,` element separator and ` => ` inner element separator unless overridden by flags
435
+ # | s | same as h
436
+ # | p | same as h
437
+ # | a | converts the hash to an array of [k,v] tuples and formats it using array rule(s)
438
+ #
439
+ # See "Flags" `<[({\|` for formatting of delimiters, and "Additional parameters for containers; Array and Hash" for
440
+ # more information about options.
441
+ #
442
+ # The alternate form flag `#` will format each hash key/value entry indented on a separate line.
443
+ #
444
+ # ### Type
445
+ #
446
+ # | Format | Array/Tuple Formats
447
+ # | ------ | -------------
448
+ # | s | The same as p, quoted if alternative flag # is used
449
+ # | p | Outputs the type in string form as specified by the Puppet Language
450
+ #
451
+ # ### Flags
452
+ #
453
+ # | Flag | Effect
454
+ # | ------ | ------
455
+ # | (space) | space instead of + for numeric output (- is shown), for containers skips delimiters
456
+ # | # | alternate format; prefix 0x/0x, 0 (octal) and 0b/0B for binary, Floats force decimal '.'. For g/G keep trailing 0.
457
+ # | + | show sign +/- depending on value's sign, changes x,X, o,b, B format to not use 2's complement form
458
+ # | - | left justify the value in the given width
459
+ # | 0 | pad with 0 instead of space for widths larger than value
460
+ # | <[({\| | defines an enclosing pair <> [] () {} or \| \| when used with a container type
461
+ #
462
+ #
463
+ # ### Additional parameters for containers; Array and Hash
464
+ #
465
+ # For containers (Array and Hash), the format is specified by a hash where the following keys can be set:
466
+ # * `'format'` - the format specifier for the container itself
467
+ # * `'separator'` - the separator string to use between elements, should not contain padding space at the end
468
+ # * `'separator2'` - the separator string to use between association of hash entries key/value
469
+ # * `'string_formats'´ - a map of type to format for elements contained in the container
470
+ #
471
+ # Note that the top level format applies to Array and Hash objects contained/nested in an Array or a Hash.
472
+ #
473
+ # Given format mappings are merged with (default) formats and a format specified for a narrower type
474
+ # wins over a broader.
475
+ #
476
+ # @param mode [String, Symbol] :strict or :extended (or :default which is the same as :strict)
477
+ # @param string_formats [String, Hash] format tring, or a hash mapping type to a format string, and for Array and Hash types map to hash of details
478
+ #
479
+ def convert(value, string_formats = :default)
480
+ options = DEFAULT_STRING_FORMATS
481
+
482
+ value_type = TypeCalculator.infer_set(value)
483
+ if string_formats.is_a?(String)
484
+ # For Array and Hash, the format is given as a Hash where 'format' key is the format for the collection itself
485
+ if Puppet::Pops::Types::PArrayType::DEFAULT.assignable?(value_type)
486
+ # add the format given for the exact type
487
+ string_formats = { Puppet::Pops::Types::PArrayType::DEFAULT => {'format' => string_formats }}
488
+ elsif Puppet::Pops::Types::PHashType::DEFAULT.assignable?(value_type)
489
+ # add the format given for the exact type
490
+ string_formats = { Puppet::Pops::Types::PHashType::DEFAULT => {'format' => string_formats }}
491
+ else
492
+ # add the format given for the exact type
493
+ string_formats = { value_type => string_formats }
494
+ end
495
+ end
496
+
497
+ case string_formats
498
+ when :default
499
+ # do nothing, use default formats
500
+
501
+ when Hash
502
+ # Convert and validate user input
503
+ string_formats = validate_input(string_formats)
504
+ # Merge user given with defaults such that user options wins, merge is deep and format specific
505
+ options = Format.merge_string_formats(DEFAULT_STRING_FORMATS, string_formats)
506
+ else
507
+ raise ArgumentError, "string conversion expects a Default value or a Hash of type to format mappings, got a '#{string_formats.class}'"
508
+ end
509
+
510
+ _convert(value_type, value, options, DEFAULT_INDENTATION)
511
+ end
512
+
513
+ # # A method only used for manual debugging as the default output of the formatting rules is
514
+ # # very hard to read otherwise.
515
+ # #
516
+ # # @api private
517
+ # def dump_string_formats(f, indent = 1)
518
+ # return f.to_s unless f.is_a?(Hash)
519
+ # "{#{f.map {|k,v| "#{k.to_s} => #{dump_string_formats(v,indent+1)}"}.join(",\n#{' '*indent} ")}}"
520
+ # end
521
+
522
+ def _convert(val_type, value, format_map, indentation)
523
+ @string_visitor.visit_this_3(self, val_type, value, format_map, indentation)
524
+ end
525
+ private :_convert
526
+
527
+ def validate_input(fmt)
528
+ return nil if fmt.nil?
529
+ unless fmt.is_a?(Hash)
530
+ raise ArgumentError, "expected a hash with type to format mappings, got instance of '#{fmt.class}'"
531
+ end
532
+ fmt.reduce({}) do | result, entry|
533
+ key, value = entry
534
+ unless key.is_a?(Types::PAnyType)
535
+ raise ArgumentError, "top level keys in the format hash must be data types, got instance of '#{key.class}'"
536
+ end
537
+ if value.is_a?(Hash)
538
+ result[key] = validate_container_input(value)
539
+ else
540
+ result[key] = Format.new(value)
541
+ end
542
+ result
543
+ end
544
+ end
545
+ private :validate_input
546
+
547
+ FMT_KEYS = %w{separator separator2 format string_formats}.freeze
548
+
549
+ def validate_container_input(fmt)
550
+ if (fmt.keys - FMT_KEYS).size > 0
551
+ raise ArgumentError, "only #{FMT_KEYS.map {|k| "'#{k}'"}.join(', ')} are allowed in a container format, got #{fmt}"
552
+ end
553
+ result = Format.new(fmt['format'])
554
+ result.separator = fmt['separator']
555
+ result.separator2 = fmt['separator2']
556
+ result.container_string_formats = validate_input(fmt['string_formats'])
557
+ result
558
+ end
559
+ private :validate_container_input
560
+
561
+ def string_PObjectType(val_type, val, format_map, indentation)
562
+ f = get_format(val_type, format_map)
563
+ case f.format
564
+ when :p
565
+ fmt = TypeFormatter.singleton
566
+ indentation = indentation.indenting(f.alt? || indentation.is_indenting?)
567
+ fmt = fmt.indented(indentation.level, 2) if indentation.is_indenting?
568
+ fmt.string(val)
569
+ when :s
570
+ val.to_s
571
+ when :q
572
+ val.inspect
573
+ else
574
+ raise FormatError.new('Object', f.format, 'spq')
575
+ end
576
+ end
577
+
578
+ def string_PObjectTypeExtension(val_type, val, format_map, indentation)
579
+ string_PObjectType(val_type.base_type, val, format_map, indentation)
580
+ end
581
+
582
+ def string_PRuntimeType(val_type, val, format_map, indent)
583
+ # Before giving up on this, and use a string representation of the unknown
584
+ # object, a check is made to see if the object can present itself as
585
+ # a hash or an array. If it can, then that representation is used instead.
586
+ if val.is_a?(Hash)
587
+ hash = val.to_hash
588
+ # Ensure that the returned value isn't derived from Hash
589
+ return string_PHashType(val_type, hash, format_map, indent) if hash.instance_of?(Hash)
590
+ elsif val.is_a?(Array)
591
+ array = val.to_a
592
+ # Ensure that the returned value isn't derived from Array
593
+ return string_PArrayType(val_type, array, format_map, indent) if array.instance_of?(Array)
594
+ end
595
+
596
+ f = get_format(val_type, format_map)
597
+ case f.format
598
+ when :s
599
+ val.to_s
600
+ when :p
601
+ puppet_quote(val.to_s)
602
+ when :q
603
+ val.inspect
604
+ else
605
+ raise FormatError.new('Runtime', f.format, 'spq')
606
+ end
607
+ end
608
+
609
+ # Basically string_PAnyType converts the value to a String and then formats it according
610
+ # to the resulting type
611
+ #
612
+ # @api private
613
+ def string_PAnyType(val_type, val, format_map, _)
614
+ f = get_format(val_type, format_map)
615
+ Kernel.format(f.orig_fmt, val)
616
+ end
617
+
618
+ def string_PDefaultType(val_type, val, format_map, _)
619
+ f = get_format(val_type, format_map)
620
+ apply_string_flags(f, case f.format
621
+ when :d, :s, :p
622
+ f.alt? ? '"default"' : 'default'
623
+ when :D
624
+ f.alt? ? '"Default"' : 'Default'
625
+ else
626
+ raise FormatError.new('Default', f.format, 'dDsp')
627
+ end)
628
+ end
629
+
630
+ # @api private
631
+ def string_PUndefType(val_type, val, format_map, _)
632
+ f = get_format(val_type, format_map)
633
+ apply_string_flags(f, case f.format
634
+ when :n
635
+ f.alt? ? 'null' : 'nil'
636
+ when :u
637
+ f.alt? ? 'undefined' : 'undef'
638
+ when :d, :x, :X, :o, :b, :B, :e, :E, :f, :g, :G, :a, :A
639
+ 'NaN'
640
+ when :v
641
+ 'n/a'
642
+ when :V
643
+ 'N/A'
644
+ when :s
645
+ f.alt? ? '""' : ''
646
+ when :p
647
+ f.alt? ? '"undef"' : 'undef'
648
+ else
649
+ raise FormatError.new('Undef', f.format, 'nudxXobBeEfgGaAvVsp')
650
+ end)
651
+ end
652
+
653
+ # @api private
654
+ def string_PBooleanType(val_type, val, format_map, indentation)
655
+ f = get_format(val_type, format_map)
656
+ case f.format
657
+ when :t
658
+ # 'true'/'false' or 't'/'f' if in alt mode
659
+ str_bool = val.to_s
660
+ apply_string_flags(f, f.alt? ? str_bool[0] : str_bool)
661
+
662
+ when :T
663
+ # 'True'/'False' or 'T'/'F' if in alt mode
664
+ str_bool = val.to_s.capitalize
665
+ apply_string_flags(f, f.alt? ? str_bool[0] : str_bool)
666
+
667
+ when :y
668
+ # 'yes'/'no' or 'y'/'n' if in alt mode
669
+ str_bool = val ? 'yes' : 'no'
670
+ apply_string_flags(f, f.alt? ? str_bool[0] : str_bool)
671
+
672
+ when :Y
673
+ # 'Yes'/'No' or 'Y'/'N' if in alt mode
674
+ str_bool = val ? 'Yes' : 'No'
675
+ apply_string_flags(f, f.alt? ? str_bool[0] : str_bool)
676
+
677
+ when :d, :x, :X, :o, :b, :B
678
+ # Boolean in numeric form, formated by integer rule
679
+ numeric_bool = val ? 1 : 0
680
+ string_formats = { Puppet::Pops::Types::PIntegerType::DEFAULT => f}
681
+ _convert(TypeCalculator.infer_set(numeric_bool), numeric_bool, string_formats, indentation)
682
+
683
+ when :e, :E, :f, :g, :G, :a, :A
684
+ # Boolean in numeric form, formated by float rule
685
+ numeric_bool = val ? 1.0 : 0.0
686
+ string_formats = { Puppet::Pops::Types::PFloatType::DEFAULT => f}
687
+ _convert(TypeCalculator.infer_set(numeric_bool), numeric_bool, string_formats, indentation)
688
+
689
+ when :s
690
+ apply_string_flags(f, val.to_s)
691
+
692
+ when :p
693
+ apply_string_flags(f, val.inspect)
694
+
695
+ else
696
+ raise FormatError.new('Boolean', f.format, 'tTyYdxXobBeEfgGaAsp')
697
+ end
698
+ end
699
+
700
+ # Performs post-processing of literals to apply width and precision flags
701
+ def apply_string_flags(f, literal_str)
702
+ if f.left || f.width || f.prec
703
+ fmt = '%'
704
+ fmt << '-' if f.left
705
+ fmt << f.width.to_s if f.width
706
+ fmt << '.' << f.prec.to_s if f.prec
707
+ fmt << 's'
708
+ Kernel.format(fmt, literal_str)
709
+ else
710
+ literal_str
711
+ end
712
+ end
713
+ private :apply_string_flags
714
+
715
+ # @api private
716
+ def string_PIntegerType(val_type, val, format_map, _)
717
+ f = get_format(val_type, format_map)
718
+ case f.format
719
+ when :d, :x, :X, :o, :b, :B, :p
720
+ Kernel.format(f.orig_fmt, val)
721
+
722
+ when :e, :E, :f, :g, :G, :a, :A
723
+ Kernel.format(f.orig_fmt, val.to_f)
724
+
725
+ when :c
726
+ char = [val].pack("U")
727
+ char = f.alt? ? "\"#{char}\"" : char
728
+ Kernel.format(f.orig_fmt.tr('c','s'), char)
729
+
730
+ when :s
731
+ fmt = f.alt? ? 'p' : 's'
732
+ int_str = Kernel.format('%d', val)
733
+ Kernel.format(f.orig_fmt.gsub('s', fmt), int_str)
734
+
735
+ else
736
+ raise FormatError.new('Integer', f.format, 'dxXobBeEfgGaAspc')
737
+ end
738
+ end
739
+
740
+ # @api private
741
+ def string_PFloatType(val_type, val, format_map, _)
742
+ f = get_format(val_type, format_map)
743
+ case f.format
744
+ when :d, :x, :X, :o, :b, :B
745
+ Kernel.format(f.orig_fmt, val.to_i)
746
+
747
+ when :e, :E, :f, :g, :G, :a, :A, :p
748
+ Kernel.format(f.orig_fmt, val)
749
+
750
+ when :s
751
+ float_str = f.alt? ? "\"#{Kernel.format('%p', val)}\"" : Kernel.format('%p', val)
752
+ Kernel.format(f.orig_fmt, float_str)
753
+
754
+ else
755
+ raise FormatError.new('Float', f.format, 'dxXobBeEfgGaAsp')
756
+ end
757
+ end
758
+
759
+ # @api private
760
+ def string_PBinaryType(val_type, val, format_map, _)
761
+ f = get_format(val_type, format_map)
762
+ substitute = f.alt? ? 'p' : 's'
763
+ case f.format
764
+ when :s
765
+ val_to_convert = val.binary_buffer
766
+ if !f.alt?
767
+ # Assume it is valid UTF-8
768
+ val_to_convert = val_to_convert.dup.force_encoding('UTF-8')
769
+ # If it isn't
770
+ unless val_to_convert.valid_encoding?
771
+ # try to convert and fail with details about what is wrong
772
+ val_to_convert = val.binary_buffer.encode('UTF-8')
773
+ end
774
+ else
775
+ val_to_convert = val.binary_buffer
776
+ end
777
+ Kernel.format(f.orig_fmt.gsub('s', substitute), val_to_convert)
778
+
779
+ when :p
780
+ # width & precision applied to string, not the the name of the type
781
+ "Binary(\"#{Kernel.format(f.orig_fmt.tr('p', 's'), val.to_s)}\")"
782
+
783
+ when :b
784
+ Kernel.format(f.orig_fmt.gsub('b', substitute), val.relaxed_to_s)
785
+
786
+ when :B
787
+ Kernel.format(f.orig_fmt.gsub('B', substitute), val.to_s)
788
+
789
+ when :u
790
+ Kernel.format(f.orig_fmt.gsub('u', substitute), val.urlsafe_to_s)
791
+
792
+ when :t
793
+ # Output as the type without any data
794
+ Kernel.format(f.orig_fmt.gsub('t', substitute), 'Binary')
795
+
796
+ when :T
797
+ # Output as the type without any data in all caps
798
+ Kernel.format(f.orig_fmt.gsub('T', substitute), 'BINARY')
799
+
800
+ else
801
+ raise FormatError.new('Binary', f.format, 'bButTsp')
802
+ end
803
+ end
804
+
805
+ # @api private
806
+ def string_PStringType(val_type, val, format_map, _)
807
+ f = get_format(val_type, format_map)
808
+ case f.format
809
+ when :s
810
+ Kernel.format(f.orig_fmt, val)
811
+
812
+ when :p
813
+ apply_string_flags(f, puppet_quote(val, f.alt?))
814
+
815
+ when :c
816
+ c_val = val.capitalize
817
+ f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.tr('c', 's'), c_val)
818
+
819
+ when :C
820
+ c_val = val.split('::').map {|s| s.capitalize }.join('::')
821
+ f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.tr('C', 's'), c_val)
822
+
823
+ when :u
824
+ c_val = val.upcase
825
+ f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.tr('u', 's'), c_val)
826
+
827
+ when :d
828
+ c_val = val.downcase
829
+ f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.tr('d', 's'), c_val)
830
+
831
+ when :t # trim
832
+ c_val = val.strip
833
+ f.alt? ? apply_string_flags(f, puppet_quote(c_val)) : Kernel.format(f.orig_fmt.tr('t', 's'), c_val)
834
+
835
+ else
836
+ raise FormatError.new('String', f.format, 'cCudspt')
837
+ end
838
+ end
839
+
840
+ # Performs a '%p' formatting of the given _str_ such that the output conforms to Puppet syntax. An ascii string
841
+ # without control characters, dollar, single-qoute, or backslash, will be quoted using single quotes. All other
842
+ # strings will be quoted using double quotes.
843
+ #
844
+ # @param [String] str the string that should be formatted
845
+ # @param [Boolean] enforce_double_quotes if true the result will be double quoted (even if single quotes would be possible)
846
+ # @return [String] the formatted string
847
+ #
848
+ # @api public
849
+ def puppet_quote(str, enforce_double_quotes = false)
850
+ if enforce_double_quotes
851
+ return puppet_double_quote(str)
852
+ end
853
+
854
+ # Assume that the string can be single quoted
855
+ bld = '\''
856
+ bld.force_encoding(str.encoding)
857
+ escaped = false
858
+ str.each_codepoint do |codepoint|
859
+ # Control characters and non-ascii characters cannot be present in a single quoted string
860
+ return puppet_double_quote(str) if codepoint < 0x20
861
+
862
+ if escaped
863
+ bld << 0x5c << codepoint
864
+ escaped = false
865
+ else
866
+ if codepoint == 0x27
867
+ bld << 0x5c << codepoint
868
+ elsif codepoint == 0x5c
869
+ escaped = true
870
+ elsif codepoint <= 0x7f
871
+ bld << codepoint
872
+ else
873
+ bld << [codepoint].pack('U')
874
+ end
875
+ end
876
+ end
877
+
878
+ # If string ended with a backslash, then that backslash must be escaped
879
+ bld << 0x5c if escaped
880
+
881
+ bld << '\''
882
+ bld
883
+ end
884
+
885
+ def puppet_double_quote(str)
886
+ bld = '"'
887
+ str.each_codepoint do |codepoint|
888
+ case codepoint
889
+ when 0x09
890
+ bld << '\\t'
891
+ when 0x0a
892
+ bld << '\\n'
893
+ when 0x0d
894
+ bld << '\\r'
895
+ when 0x22
896
+ bld << '\\"'
897
+ when 0x24
898
+ bld << '\\$'
899
+ when 0x5c
900
+ bld << '\\\\'
901
+ else
902
+ if codepoint < 0x20
903
+ bld << sprintf('\\u{%X}', codepoint)
904
+ elsif codepoint <= 0x7f
905
+ bld << codepoint
906
+ else
907
+ bld << [codepoint].pack('U')
908
+ end
909
+ end
910
+ end
911
+ bld << '"'
912
+ bld
913
+ end
914
+
915
+ # @api private
916
+ def string_PRegexpType(val_type, val, format_map, _)
917
+ f = get_format(val_type, format_map)
918
+ case f.format
919
+ when :p
920
+ str_regexp = PRegexpType.regexp_to_s_with_delimiters(val)
921
+ f.orig_fmt == '%p' ? str_regexp : Kernel.format(f.orig_fmt.tr('p', 's'), str_regexp)
922
+ when :s
923
+ str_regexp = PRegexpType.regexp_to_s(val)
924
+ str_regexp = puppet_quote(str_regexp) if f.alt?
925
+ f.orig_fmt == '%s' ? str_regexp : Kernel.format(f.orig_fmt, str_regexp)
926
+ else
927
+ raise FormatError.new('Regexp', f.format, 'sp')
928
+ end
929
+ end
930
+
931
+ def string_PArrayType(val_type, val, format_map, indentation)
932
+ format = get_format(val_type, format_map)
933
+ sep = format.separator || DEFAULT_ARRAY_FORMAT.separator
934
+ string_formats = format.container_string_formats || DEFAULT_CONTAINER_FORMATS
935
+ delims = format.delimiter_pair(DEFAULT_ARRAY_DELIMITERS)
936
+
937
+ # Make indentation active, if array is in alternative format, or if nested in indenting
938
+ indentation = indentation.indenting(format.alt? || indentation.is_indenting?)
939
+
940
+ case format.format
941
+ when :a, :s, :p
942
+ buf = ''
943
+ if indentation.breaks?
944
+ buf << "\n"
945
+ buf << indentation.padding
946
+ end
947
+ buf << delims[0]
948
+
949
+ # Make a first pass to format each element
950
+ children_indentation = indentation.increase(format.alt?) # tell children they are expected to indent
951
+ mapped = val.map do |v|
952
+ if children_indentation.first?
953
+ children_indentation = children_indentation.subsequent
954
+ end
955
+ val_t = TypeCalculator.infer_set(v)
956
+ _convert(val_t, v, is_container?(val_t) ? format_map : string_formats, children_indentation)
957
+ end
958
+
959
+ # compute widest run in the array, skip nested arrays and hashes
960
+ # then if size > width, set flag if a break on each element should be performed
961
+ if format.alt? && format.width
962
+ widest = val.each_with_index.reduce([0]) do | memo, v_i |
963
+ # array or hash breaks
964
+ if is_a_or_h?(v_i[0])
965
+ memo << 0
966
+ else
967
+ memo[-1] += mapped[v_i[1]].length
968
+ end
969
+ memo
970
+ end
971
+ widest = widest.max
972
+ sz_break = widest > (format.width || Float::INFINITY)
973
+ else
974
+ sz_break = false
975
+ end
976
+
977
+ # output each element with breaks and padding
978
+ children_indentation = indentation.increase(format.alt?)
979
+ val.each_with_index do |v, i|
980
+ str_val = mapped[i]
981
+ if children_indentation.first?
982
+ children_indentation = children_indentation.subsequent
983
+ # if breaking, indent first element by one
984
+ if sz_break && !is_a_or_h?(v)
985
+ buf << ' '
986
+ end
987
+ else
988
+ buf << sep
989
+ # if break on each (and breaking will not occur because next is an array or hash)
990
+ # or, if indenting, and previous was an array or hash, then break and continue on next line
991
+ # indented.
992
+ if (sz_break && !is_a_or_h?(v)) || (format.alt? && i > 0 && is_a_or_h?(val[i-1]) && !is_a_or_h?(v))
993
+ buf.rstrip! unless buf[-1] == "\n"
994
+ buf << "\n"
995
+ buf << children_indentation.padding
996
+ end
997
+ end
998
+ # remove trailing space added by separator if followed by break
999
+ buf.rstrip! if buf[-1] == ' ' && str_val[0] == "\n"
1000
+ buf << str_val
1001
+ end
1002
+ buf << delims[1]
1003
+ buf
1004
+ else
1005
+ raise FormatError.new('Array', format.format, 'asp')
1006
+ end
1007
+ end
1008
+
1009
+ def is_a_or_h?(x)
1010
+ x.is_a?(Array) || x.is_a?(Hash)
1011
+ end
1012
+
1013
+ def is_container?(t)
1014
+ case t
1015
+ when PArrayType, PHashType, PStructType, PTupleType, PObjectType
1016
+ true
1017
+ else
1018
+ false
1019
+ end
1020
+ end
1021
+
1022
+ # @api private
1023
+ def string_PTupleType(val_type, val, format_map, indentation)
1024
+ string_PArrayType(val_type, val, format_map, indentation)
1025
+ end
1026
+
1027
+ # @api private
1028
+ def string_PIteratorType(val_type, val, format_map, indentation)
1029
+ v = val.to_a
1030
+ _convert(TypeCalculator.infer_set(v), v, format_map, indentation)
1031
+ end
1032
+
1033
+ # @api private
1034
+ def string_PHashType(val_type, val, format_map, indentation)
1035
+ format = get_format(val_type, format_map)
1036
+ sep = format.separator || DEFAULT_HASH_FORMAT.separator
1037
+ assoc = format.separator2 || DEFAULT_HASH_FORMAT.separator2
1038
+ string_formats = format.container_string_formats || DEFAULT_CONTAINER_FORMATS
1039
+ delims = format.delimiter_pair(DEFAULT_HASH_DELIMITERS)
1040
+
1041
+ if format.alt?
1042
+ sep = sep.rstrip unless sep[-1] == "\n"
1043
+ sep = "#{sep}\n"
1044
+ end
1045
+
1046
+ cond_break = ''
1047
+ padding = ''
1048
+
1049
+ case format.format
1050
+ when :a
1051
+ # Convert to array and use array rules
1052
+ array_hash = val.to_a
1053
+ _convert(TypeCalculator.infer_set(array_hash), array_hash, format_map, indentation)
1054
+
1055
+ when :h, :s, :p
1056
+ indentation = indentation.indenting(format.alt? || indentation.is_indenting?)
1057
+ buf = ''
1058
+ if indentation.breaks?
1059
+ buf << "\n"
1060
+ buf << indentation.padding
1061
+ end
1062
+
1063
+ children_indentation = indentation.increase
1064
+ if format.alt?
1065
+ cond_break = "\n"
1066
+ padding = children_indentation.padding
1067
+ end
1068
+ buf << delims[0]
1069
+ buf << cond_break # break after opening delimiter if pretty printing
1070
+ buf << val.map do |k,v|
1071
+ key_type = TypeCalculator.infer_set(k)
1072
+ val_type = TypeCalculator.infer_set(v)
1073
+ key = _convert(key_type, k, is_container?(key_type) ? format_map : string_formats, children_indentation)
1074
+ val = _convert(val_type, v, is_container?(val_type) ? format_map : string_formats, children_indentation)
1075
+ "#{padding}#{key}#{assoc}#{val}"
1076
+ end.join(sep)
1077
+ if format.alt?
1078
+ buf << cond_break
1079
+ buf << indentation.padding
1080
+ end
1081
+ buf << delims[1]
1082
+ buf
1083
+ else
1084
+ raise FormatError.new('Hash', format.format, 'hasp')
1085
+ end
1086
+ end
1087
+
1088
+ # @api private
1089
+ def string_PStructType(val_type, val, format_map, indentation)
1090
+ string_PHashType(val_type, val, format_map, indentation)
1091
+ end
1092
+
1093
+ # @api private
1094
+ def string_PTypeType(val_type, val, format_map, _)
1095
+ f = get_format(val_type, format_map)
1096
+ case f.format
1097
+ when :s
1098
+ str_val = f.alt? ? "\"#{val}\"" : val.to_s
1099
+ Kernel.format(f.orig_fmt, str_val)
1100
+ when :p
1101
+ Kernel.format(f.orig_fmt.tr('p', 's'), val.to_s)
1102
+ else
1103
+ raise FormatError.new('Type', f.format, 'sp')
1104
+ end
1105
+ end
1106
+
1107
+ # @api private
1108
+ def string_PURIType(val_type, val, format_map, indentation)
1109
+ f = get_format(val_type, format_map)
1110
+ case f.format
1111
+ when :p
1112
+ fmt = TypeFormatter.singleton
1113
+ indentation = indentation.indenting(f.alt? || indentation.is_indenting?)
1114
+ fmt = fmt.indented(indentation.level, 2) if indentation.is_indenting?
1115
+ fmt.string(val)
1116
+ when :s
1117
+ str_val = val.to_s
1118
+ Kernel.format(f.orig_fmt, f.alt? ? puppet_quote(str_val) : str_val)
1119
+ else
1120
+ raise FormatError.new('URI', f.format, 'sp')
1121
+ end
1122
+ end
1123
+
1124
+ # Maps the inferred type of o to a formatting rule
1125
+ def get_format(val_t, format_options)
1126
+ fmt = format_options.find {|k,_| k.assignable?(val_t) }
1127
+ return fmt[1] unless fmt.nil?
1128
+ return Format.new("%s")
1129
+ end
1130
+ private :get_format
1131
+
1132
+ end
1133
+ end
1134
+ end