puppet-parse 0.0.1 → 0.0.2

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 (742) hide show
  1. data/.travis.yml +0 -5
  2. data/README.md +1 -3
  3. data/lib/puppet-parse/version.rb +1 -1
  4. data/lib/puppet-parse.rb +2 -2
  5. data/lib/vendor/puppet/agent/locker.rb +46 -0
  6. data/lib/vendor/puppet/agent.rb +99 -0
  7. data/lib/vendor/puppet/application/agent.rb +489 -0
  8. data/lib/vendor/puppet/application/apply.rb +266 -0
  9. data/lib/vendor/puppet/application/ca.rb +5 -0
  10. data/lib/vendor/puppet/application/catalog.rb +4 -0
  11. data/lib/vendor/puppet/application/cert.rb +240 -0
  12. data/lib/vendor/puppet/application/certificate.rb +13 -0
  13. data/lib/vendor/puppet/application/certificate_request.rb +4 -0
  14. data/lib/vendor/puppet/application/certificate_revocation_list.rb +4 -0
  15. data/lib/vendor/puppet/application/config.rb +4 -0
  16. data/lib/vendor/puppet/application/describe.rb +256 -0
  17. data/lib/vendor/puppet/application/device.rb +242 -0
  18. data/lib/vendor/puppet/application/doc.rb +275 -0
  19. data/lib/vendor/puppet/application/face_base.rb +264 -0
  20. data/lib/vendor/puppet/application/facts.rb +4 -0
  21. data/lib/vendor/puppet/application/file.rb +4 -0
  22. data/lib/vendor/puppet/application/filebucket.rb +191 -0
  23. data/lib/vendor/puppet/application/help.rb +4 -0
  24. data/lib/vendor/puppet/application/indirection_base.rb +4 -0
  25. data/lib/vendor/puppet/application/inspect.rb +191 -0
  26. data/lib/vendor/puppet/application/instrumentation_data.rb +4 -0
  27. data/lib/vendor/puppet/application/instrumentation_listener.rb +4 -0
  28. data/lib/vendor/puppet/application/instrumentation_probe.rb +4 -0
  29. data/lib/vendor/puppet/application/key.rb +4 -0
  30. data/lib/vendor/puppet/application/kick.rb +351 -0
  31. data/lib/vendor/puppet/application/man.rb +4 -0
  32. data/lib/vendor/puppet/application/master.rb +263 -0
  33. data/lib/vendor/puppet/application/module.rb +11 -0
  34. data/lib/vendor/puppet/application/node.rb +4 -0
  35. data/lib/vendor/puppet/application/parser.rb +5 -0
  36. data/lib/vendor/puppet/application/plugin.rb +3 -0
  37. data/lib/vendor/puppet/application/queue.rb +161 -0
  38. data/lib/vendor/puppet/application/report.rb +4 -0
  39. data/lib/vendor/puppet/application/resource.rb +237 -0
  40. data/lib/vendor/puppet/application/resource_type.rb +4 -0
  41. data/lib/vendor/puppet/application/secret_agent.rb +6 -0
  42. data/lib/vendor/puppet/application/status.rb +4 -0
  43. data/lib/vendor/puppet/application.rb +421 -0
  44. data/lib/vendor/puppet/configurer/downloader.rb +86 -0
  45. data/lib/vendor/puppet/configurer/fact_handler.rb +56 -0
  46. data/lib/vendor/puppet/configurer/plugin_handler.rb +37 -0
  47. data/lib/vendor/puppet/configurer.rb +249 -0
  48. data/lib/vendor/puppet/daemon.rb +200 -0
  49. data/lib/vendor/puppet/defaults.rb +970 -0
  50. data/lib/vendor/puppet/dsl/resource_api.rb +120 -0
  51. data/lib/vendor/puppet/dsl/resource_type_api.rb +34 -0
  52. data/lib/vendor/puppet/dsl.rb +7 -0
  53. data/lib/vendor/puppet/error.rb +43 -0
  54. data/lib/vendor/puppet/external/base64.rb +19 -0
  55. data/lib/vendor/puppet/external/dot.rb +326 -0
  56. data/lib/vendor/puppet/external/lock.rb +63 -0
  57. data/lib/vendor/puppet/external/nagios/base.rb +472 -0
  58. data/lib/vendor/puppet/external/nagios/grammar.ry +185 -0
  59. data/lib/vendor/puppet/external/nagios/makefile +9 -0
  60. data/lib/vendor/puppet/external/nagios/parser.rb +775 -0
  61. data/lib/vendor/puppet/external/nagios.rb +48 -0
  62. data/lib/vendor/puppet/external/pson/common.rb +370 -0
  63. data/lib/vendor/puppet/external/pson/pure/generator.rb +401 -0
  64. data/lib/vendor/puppet/external/pson/pure/parser.rb +264 -0
  65. data/lib/vendor/puppet/external/pson/pure.rb +77 -0
  66. data/lib/vendor/puppet/external/pson/version.rb +8 -0
  67. data/lib/vendor/puppet/face/ca.rb +242 -0
  68. data/lib/vendor/puppet/face/catalog/select.rb +49 -0
  69. data/lib/vendor/puppet/face/catalog.rb +131 -0
  70. data/lib/vendor/puppet/face/certificate.rb +148 -0
  71. data/lib/vendor/puppet/face/certificate_request.rb +53 -0
  72. data/lib/vendor/puppet/face/certificate_revocation_list.rb +58 -0
  73. data/lib/vendor/puppet/face/config.rb +45 -0
  74. data/lib/vendor/puppet/face/facts.rb +81 -0
  75. data/lib/vendor/puppet/face/file/download.rb +54 -0
  76. data/lib/vendor/puppet/face/file/store.rb +21 -0
  77. data/lib/vendor/puppet/face/file.rb +47 -0
  78. data/lib/vendor/puppet/face/help/action.erb +53 -0
  79. data/lib/vendor/puppet/face/help/face.erb +79 -0
  80. data/lib/vendor/puppet/face/help/global.erb +19 -0
  81. data/lib/vendor/puppet/face/help/man.erb +136 -0
  82. data/lib/vendor/puppet/face/help.rb +131 -0
  83. data/lib/vendor/puppet/face/instrumentation_data.rb +28 -0
  84. data/lib/vendor/puppet/face/instrumentation_listener.rb +96 -0
  85. data/lib/vendor/puppet/face/instrumentation_probe.rb +77 -0
  86. data/lib/vendor/puppet/face/key.rb +15 -0
  87. data/lib/vendor/puppet/face/man.rb +93 -0
  88. data/lib/vendor/puppet/face/module/build.rb +37 -0
  89. data/lib/vendor/puppet/face/module/changes.rb +38 -0
  90. data/lib/vendor/puppet/face/module/generate.rb +42 -0
  91. data/lib/vendor/puppet/face/module/install.rb +174 -0
  92. data/lib/vendor/puppet/face/module/list.rb +285 -0
  93. data/lib/vendor/puppet/face/module/search.rb +88 -0
  94. data/lib/vendor/puppet/face/module/uninstall.rb +86 -0
  95. data/lib/vendor/puppet/face/module/upgrade.rb +84 -0
  96. data/lib/vendor/puppet/face/module.rb +17 -0
  97. data/lib/vendor/puppet/face/node/clean.rb +156 -0
  98. data/lib/vendor/puppet/face/node.rb +43 -0
  99. data/lib/vendor/puppet/face/parser.rb +51 -0
  100. data/lib/vendor/puppet/face/plugin.rb +55 -0
  101. data/lib/vendor/puppet/face/report.rb +56 -0
  102. data/lib/vendor/puppet/face/resource.rb +53 -0
  103. data/lib/vendor/puppet/face/resource_type.rb +81 -0
  104. data/lib/vendor/puppet/face/secret_agent.rb +54 -0
  105. data/lib/vendor/puppet/face/status.rb +53 -0
  106. data/lib/vendor/puppet/face.rb +12 -0
  107. data/lib/vendor/puppet/feature/base.rb +67 -0
  108. data/lib/vendor/puppet/feature/eventlog.rb +6 -0
  109. data/lib/vendor/puppet/feature/pson.rb +6 -0
  110. data/lib/vendor/puppet/feature/rack.rb +24 -0
  111. data/lib/vendor/puppet/feature/rails.rb +30 -0
  112. data/lib/vendor/puppet/feature/rubygems.rb +3 -0
  113. data/lib/vendor/puppet/feature/selinux.rb +3 -0
  114. data/lib/vendor/puppet/feature/ssh.rb +4 -0
  115. data/lib/vendor/puppet/feature/stomp.rb +6 -0
  116. data/lib/vendor/puppet/feature/zlib.rb +6 -0
  117. data/lib/vendor/puppet/file_bucket/dipper.rb +107 -0
  118. data/lib/vendor/puppet/file_bucket/file.rb +55 -0
  119. data/lib/vendor/puppet/file_bucket.rb +4 -0
  120. data/lib/vendor/puppet/file_collection/lookup.rb +10 -0
  121. data/lib/vendor/puppet/file_collection.rb +19 -0
  122. data/lib/vendor/puppet/file_serving/base.rb +88 -0
  123. data/lib/vendor/puppet/file_serving/configuration/parser.rb +115 -0
  124. data/lib/vendor/puppet/file_serving/configuration.rb +122 -0
  125. data/lib/vendor/puppet/file_serving/content.rb +45 -0
  126. data/lib/vendor/puppet/file_serving/fileset.rb +173 -0
  127. data/lib/vendor/puppet/file_serving/metadata.rb +155 -0
  128. data/lib/vendor/puppet/file_serving/mount/file.rb +121 -0
  129. data/lib/vendor/puppet/file_serving/mount/modules.rb +24 -0
  130. data/lib/vendor/puppet/file_serving/mount/plugins.rb +26 -0
  131. data/lib/vendor/puppet/file_serving/mount.rb +39 -0
  132. data/lib/vendor/puppet/file_serving/terminus_helper.rb +21 -0
  133. data/lib/vendor/puppet/file_serving/terminus_selector.rb +28 -0
  134. data/lib/vendor/puppet/file_serving.rb +3 -0
  135. data/lib/vendor/puppet/forge/cache.rb +55 -0
  136. data/lib/vendor/puppet/forge/repository.rb +102 -0
  137. data/lib/vendor/puppet/forge.rb +98 -0
  138. data/lib/vendor/puppet/indirector/active_record.rb +28 -0
  139. data/lib/vendor/puppet/indirector/catalog/active_record.rb +41 -0
  140. data/lib/vendor/puppet/indirector/catalog/compiler.rb +153 -0
  141. data/lib/vendor/puppet/indirector/catalog/queue.rb +5 -0
  142. data/lib/vendor/puppet/indirector/catalog/rest.rb +6 -0
  143. data/lib/vendor/puppet/indirector/catalog/static_compiler.rb +136 -0
  144. data/lib/vendor/puppet/indirector/catalog/store_configs.rb +5 -0
  145. data/lib/vendor/puppet/indirector/catalog/yaml.rb +22 -0
  146. data/lib/vendor/puppet/indirector/certificate/ca.rb +9 -0
  147. data/lib/vendor/puppet/indirector/certificate/disabled_ca.rb +22 -0
  148. data/lib/vendor/puppet/indirector/certificate/file.rb +9 -0
  149. data/lib/vendor/puppet/indirector/certificate/rest.rb +15 -0
  150. data/lib/vendor/puppet/indirector/certificate_request/ca.rb +22 -0
  151. data/lib/vendor/puppet/indirector/certificate_request/disabled_ca.rb +22 -0
  152. data/lib/vendor/puppet/indirector/certificate_request/file.rb +8 -0
  153. data/lib/vendor/puppet/indirector/certificate_request/rest.rb +9 -0
  154. data/lib/vendor/puppet/indirector/certificate_revocation_list/ca.rb +8 -0
  155. data/lib/vendor/puppet/indirector/certificate_revocation_list/disabled_ca.rb +22 -0
  156. data/lib/vendor/puppet/indirector/certificate_revocation_list/file.rb +8 -0
  157. data/lib/vendor/puppet/indirector/certificate_revocation_list/rest.rb +9 -0
  158. data/lib/vendor/puppet/indirector/certificate_status/file.rb +82 -0
  159. data/lib/vendor/puppet/indirector/certificate_status/rest.rb +10 -0
  160. data/lib/vendor/puppet/indirector/certificate_status.rb +4 -0
  161. data/lib/vendor/puppet/indirector/code.rb +6 -0
  162. data/lib/vendor/puppet/indirector/couch.rb +78 -0
  163. data/lib/vendor/puppet/indirector/direct_file_server.rb +19 -0
  164. data/lib/vendor/puppet/indirector/envelope.rb +11 -0
  165. data/lib/vendor/puppet/indirector/exec.rb +48 -0
  166. data/lib/vendor/puppet/indirector/face.rb +137 -0
  167. data/lib/vendor/puppet/indirector/facts/active_record.rb +36 -0
  168. data/lib/vendor/puppet/indirector/facts/couch.rb +31 -0
  169. data/lib/vendor/puppet/indirector/facts/facter.rb +96 -0
  170. data/lib/vendor/puppet/indirector/facts/inventory_active_record.rb +100 -0
  171. data/lib/vendor/puppet/indirector/facts/inventory_service.rb +20 -0
  172. data/lib/vendor/puppet/indirector/facts/memory.rb +9 -0
  173. data/lib/vendor/puppet/indirector/facts/network_device.rb +25 -0
  174. data/lib/vendor/puppet/indirector/facts/rest.rb +8 -0
  175. data/lib/vendor/puppet/indirector/facts/store_configs.rb +5 -0
  176. data/lib/vendor/puppet/indirector/facts/yaml.rb +82 -0
  177. data/lib/vendor/puppet/indirector/file_bucket_file/file.rb +136 -0
  178. data/lib/vendor/puppet/indirector/file_bucket_file/rest.rb +8 -0
  179. data/lib/vendor/puppet/indirector/file_bucket_file/selector.rb +49 -0
  180. data/lib/vendor/puppet/indirector/file_content/file.rb +7 -0
  181. data/lib/vendor/puppet/indirector/file_content/file_server.rb +7 -0
  182. data/lib/vendor/puppet/indirector/file_content/rest.rb +7 -0
  183. data/lib/vendor/puppet/indirector/file_content/selector.rb +30 -0
  184. data/lib/vendor/puppet/indirector/file_content.rb +5 -0
  185. data/lib/vendor/puppet/indirector/file_metadata/file.rb +22 -0
  186. data/lib/vendor/puppet/indirector/file_metadata/file_server.rb +7 -0
  187. data/lib/vendor/puppet/indirector/file_metadata/rest.rb +7 -0
  188. data/lib/vendor/puppet/indirector/file_metadata/selector.rb +30 -0
  189. data/lib/vendor/puppet/indirector/file_metadata.rb +5 -0
  190. data/lib/vendor/puppet/indirector/file_server.rb +65 -0
  191. data/lib/vendor/puppet/indirector/indirection.rb +323 -0
  192. data/lib/vendor/puppet/indirector/instrumentation_data/local.rb +19 -0
  193. data/lib/vendor/puppet/indirector/instrumentation_data/rest.rb +5 -0
  194. data/lib/vendor/puppet/indirector/instrumentation_data.rb +3 -0
  195. data/lib/vendor/puppet/indirector/instrumentation_listener/local.rb +23 -0
  196. data/lib/vendor/puppet/indirector/instrumentation_listener/rest.rb +5 -0
  197. data/lib/vendor/puppet/indirector/instrumentation_listener.rb +3 -0
  198. data/lib/vendor/puppet/indirector/instrumentation_probe/local.rb +24 -0
  199. data/lib/vendor/puppet/indirector/instrumentation_probe/rest.rb +5 -0
  200. data/lib/vendor/puppet/indirector/instrumentation_probe.rb +3 -0
  201. data/lib/vendor/puppet/indirector/inventory/yaml.rb +81 -0
  202. data/lib/vendor/puppet/indirector/key/ca.rb +12 -0
  203. data/lib/vendor/puppet/indirector/key/disabled_ca.rb +22 -0
  204. data/lib/vendor/puppet/indirector/key/file.rb +42 -0
  205. data/lib/vendor/puppet/indirector/ldap.rb +78 -0
  206. data/lib/vendor/puppet/indirector/memory.rb +21 -0
  207. data/lib/vendor/puppet/indirector/node/active_record.rb +13 -0
  208. data/lib/vendor/puppet/indirector/node/exec.rb +60 -0
  209. data/lib/vendor/puppet/indirector/node/ldap.rb +256 -0
  210. data/lib/vendor/puppet/indirector/node/memory.rb +10 -0
  211. data/lib/vendor/puppet/indirector/node/plain.rb +19 -0
  212. data/lib/vendor/puppet/indirector/node/rest.rb +7 -0
  213. data/lib/vendor/puppet/indirector/node/store_configs.rb +5 -0
  214. data/lib/vendor/puppet/indirector/node/yaml.rb +7 -0
  215. data/lib/vendor/puppet/indirector/plain.rb +9 -0
  216. data/lib/vendor/puppet/indirector/queue.rb +81 -0
  217. data/lib/vendor/puppet/indirector/report/processor.rb +61 -0
  218. data/lib/vendor/puppet/indirector/report/rest.rb +7 -0
  219. data/lib/vendor/puppet/indirector/report/yaml.rb +11 -0
  220. data/lib/vendor/puppet/indirector/request.rb +204 -0
  221. data/lib/vendor/puppet/indirector/resource/active_record.rb +93 -0
  222. data/lib/vendor/puppet/indirector/resource/ral.rb +53 -0
  223. data/lib/vendor/puppet/indirector/resource/rest.rb +5 -0
  224. data/lib/vendor/puppet/indirector/resource/store_configs.rb +3 -0
  225. data/lib/vendor/puppet/indirector/resource_type/parser.rb +43 -0
  226. data/lib/vendor/puppet/indirector/resource_type/rest.rb +7 -0
  227. data/lib/vendor/puppet/indirector/resource_type.rb +5 -0
  228. data/lib/vendor/puppet/indirector/rest.rb +166 -0
  229. data/lib/vendor/puppet/indirector/run/local.rb +8 -0
  230. data/lib/vendor/puppet/indirector/run/rest.rb +6 -0
  231. data/lib/vendor/puppet/indirector/ssl_file.rb +178 -0
  232. data/lib/vendor/puppet/indirector/status/local.rb +7 -0
  233. data/lib/vendor/puppet/indirector/status/rest.rb +5 -0
  234. data/lib/vendor/puppet/indirector/status.rb +3 -0
  235. data/lib/vendor/puppet/indirector/store_configs.rb +30 -0
  236. data/lib/vendor/puppet/indirector/terminus.rb +145 -0
  237. data/lib/vendor/puppet/indirector/yaml.rb +75 -0
  238. data/lib/vendor/puppet/indirector.rb +57 -0
  239. data/lib/vendor/puppet/interface/action.rb +322 -0
  240. data/lib/vendor/puppet/interface/action_builder.rb +74 -0
  241. data/lib/vendor/puppet/interface/action_manager.rb +74 -0
  242. data/lib/vendor/puppet/interface/documentation.rb +230 -0
  243. data/lib/vendor/puppet/interface/face_collection.rb +128 -0
  244. data/lib/vendor/puppet/interface/option.rb +127 -0
  245. data/lib/vendor/puppet/interface/option_builder.rb +67 -0
  246. data/lib/vendor/puppet/interface/option_manager.rb +68 -0
  247. data/lib/vendor/puppet/interface.rb +161 -0
  248. data/lib/vendor/puppet/metatype/manager.rb +141 -0
  249. data/lib/vendor/puppet/module.rb +314 -0
  250. data/lib/vendor/puppet/module_tool/applications/application.rb +82 -0
  251. data/lib/vendor/puppet/module_tool/applications/builder.rb +91 -0
  252. data/lib/vendor/puppet/module_tool/applications/checksummer.rb +56 -0
  253. data/lib/vendor/puppet/module_tool/applications/generator.rb +141 -0
  254. data/lib/vendor/puppet/module_tool/applications/installer.rb +183 -0
  255. data/lib/vendor/puppet/module_tool/applications/searcher.rb +15 -0
  256. data/lib/vendor/puppet/module_tool/applications/uninstaller.rb +107 -0
  257. data/lib/vendor/puppet/module_tool/applications/unpacker.rb +67 -0
  258. data/lib/vendor/puppet/module_tool/applications/upgrader.rb +109 -0
  259. data/lib/vendor/puppet/module_tool/applications.rb +15 -0
  260. data/lib/vendor/puppet/module_tool/checksums.rb +52 -0
  261. data/lib/vendor/puppet/module_tool/contents_description.rb +82 -0
  262. data/lib/vendor/puppet/module_tool/dependency.rb +24 -0
  263. data/lib/vendor/puppet/module_tool/errors/base.rb +15 -0
  264. data/lib/vendor/puppet/module_tool/errors/installer.rb +90 -0
  265. data/lib/vendor/puppet/module_tool/errors/shared.rb +115 -0
  266. data/lib/vendor/puppet/module_tool/errors/uninstaller.rb +45 -0
  267. data/lib/vendor/puppet/module_tool/errors/upgrader.rb +72 -0
  268. data/lib/vendor/puppet/module_tool/errors.rb +9 -0
  269. data/lib/vendor/puppet/module_tool/metadata.rb +141 -0
  270. data/lib/vendor/puppet/module_tool/modulefile.rb +75 -0
  271. data/lib/vendor/puppet/module_tool/shared_behaviors.rb +161 -0
  272. data/lib/vendor/puppet/module_tool/skeleton/templates/generator/Modulefile.erb +11 -0
  273. data/lib/vendor/puppet/module_tool/skeleton/templates/generator/README.erb +16 -0
  274. data/lib/vendor/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +41 -0
  275. data/lib/vendor/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +17 -0
  276. data/lib/vendor/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +11 -0
  277. data/lib/vendor/puppet/module_tool/skeleton.rb +34 -0
  278. data/lib/vendor/puppet/module_tool.rb +99 -0
  279. data/lib/vendor/puppet/network/authconfig.rb +174 -0
  280. data/lib/vendor/puppet/network/authorization.rb +76 -0
  281. data/lib/vendor/puppet/network/authstore.rb +267 -0
  282. data/lib/vendor/puppet/network/client_request.rb +29 -0
  283. data/lib/vendor/puppet/network/format.rb +111 -0
  284. data/lib/vendor/puppet/network/format_handler.rb +181 -0
  285. data/lib/vendor/puppet/network/formats.rb +171 -0
  286. data/lib/vendor/puppet/network/handler/ca.rb +61 -0
  287. data/lib/vendor/puppet/network/handler/filebucket.rb +53 -0
  288. data/lib/vendor/puppet/network/handler/fileserver.rb +732 -0
  289. data/lib/vendor/puppet/network/handler/master.rb +87 -0
  290. data/lib/vendor/puppet/network/handler/report.rb +82 -0
  291. data/lib/vendor/puppet/network/handler/runner.rb +33 -0
  292. data/lib/vendor/puppet/network/handler/status.rb +18 -0
  293. data/lib/vendor/puppet/network/handler.rb +50 -0
  294. data/lib/vendor/puppet/network/http/api/v1.rb +83 -0
  295. data/lib/vendor/puppet/network/http/api.rb +4 -0
  296. data/lib/vendor/puppet/network/http/compression.rb +114 -0
  297. data/lib/vendor/puppet/network/http/handler.rb +247 -0
  298. data/lib/vendor/puppet/network/http/mongrel/rest.rb +99 -0
  299. data/lib/vendor/puppet/network/http/mongrel.rb +55 -0
  300. data/lib/vendor/puppet/network/http/rack/httphandler.rb +16 -0
  301. data/lib/vendor/puppet/network/http/rack/rest.rb +100 -0
  302. data/lib/vendor/puppet/network/http/rack/xmlrpc.rb +65 -0
  303. data/lib/vendor/puppet/network/http/rack.rb +65 -0
  304. data/lib/vendor/puppet/network/http/webrick/rest.rb +81 -0
  305. data/lib/vendor/puppet/network/http/webrick.rb +141 -0
  306. data/lib/vendor/puppet/network/http.rb +15 -0
  307. data/lib/vendor/puppet/network/http_pool.rb +57 -0
  308. data/lib/vendor/puppet/network/http_server/mongrel.rb +129 -0
  309. data/lib/vendor/puppet/network/http_server.rb +3 -0
  310. data/lib/vendor/puppet/network/rest_authconfig.rb +102 -0
  311. data/lib/vendor/puppet/network/rest_authorization.rb +23 -0
  312. data/lib/vendor/puppet/network/rest_controller.rb +2 -0
  313. data/lib/vendor/puppet/network/rights.rb +275 -0
  314. data/lib/vendor/puppet/network/server.rb +164 -0
  315. data/lib/vendor/puppet/network/xmlrpc/processor.rb +86 -0
  316. data/lib/vendor/puppet/network/xmlrpc/server.rb +19 -0
  317. data/lib/vendor/puppet/network/xmlrpc/webrick_servlet.rb +114 -0
  318. data/lib/vendor/puppet/network.rb +3 -0
  319. data/lib/vendor/puppet/node/environment.rb +216 -0
  320. data/lib/vendor/puppet/node/facts.rb +99 -0
  321. data/lib/vendor/puppet/node/inventory.rb +7 -0
  322. data/lib/vendor/puppet/node.rb +120 -0
  323. data/lib/vendor/puppet/parameter/path.rb +34 -0
  324. data/lib/vendor/puppet/parameter/value.rb +69 -0
  325. data/lib/vendor/puppet/parameter/value_collection.rb +143 -0
  326. data/lib/vendor/puppet/parameter.rb +316 -0
  327. data/lib/vendor/puppet/parser/ast/arithmetic_operator.rb +39 -0
  328. data/lib/vendor/puppet/parser/ast/astarray.rb +50 -0
  329. data/lib/vendor/puppet/parser/ast/asthash.rb +37 -0
  330. data/lib/vendor/puppet/parser/ast/boolean_operator.rb +46 -0
  331. data/lib/vendor/puppet/parser/ast/branch.rb +37 -0
  332. data/lib/vendor/puppet/parser/ast/caseopt.rb +52 -0
  333. data/lib/vendor/puppet/parser/ast/casestatement.rb +44 -0
  334. data/lib/vendor/puppet/parser/ast/collection.rb +49 -0
  335. data/lib/vendor/puppet/parser/ast/collexpr.rb +57 -0
  336. data/lib/vendor/puppet/parser/ast/comparison_operator.rb +38 -0
  337. data/lib/vendor/puppet/parser/ast/definition.rb +17 -0
  338. data/lib/vendor/puppet/parser/ast/else.rb +22 -0
  339. data/lib/vendor/puppet/parser/ast/function.rb +50 -0
  340. data/lib/vendor/puppet/parser/ast/hostclass.rb +29 -0
  341. data/lib/vendor/puppet/parser/ast/ifstatement.rb +34 -0
  342. data/lib/vendor/puppet/parser/ast/in_operator.rb +24 -0
  343. data/lib/vendor/puppet/parser/ast/leaf.rb +221 -0
  344. data/lib/vendor/puppet/parser/ast/match_operator.rb +28 -0
  345. data/lib/vendor/puppet/parser/ast/minus.rb +23 -0
  346. data/lib/vendor/puppet/parser/ast/node.rb +20 -0
  347. data/lib/vendor/puppet/parser/ast/nop.rb +11 -0
  348. data/lib/vendor/puppet/parser/ast/not.rb +19 -0
  349. data/lib/vendor/puppet/parser/ast/relationship.rb +47 -0
  350. data/lib/vendor/puppet/parser/ast/resource.rb +74 -0
  351. data/lib/vendor/puppet/parser/ast/resource_defaults.rb +24 -0
  352. data/lib/vendor/puppet/parser/ast/resource_instance.rb +9 -0
  353. data/lib/vendor/puppet/parser/ast/resource_override.rb +67 -0
  354. data/lib/vendor/puppet/parser/ast/resource_reference.rb +28 -0
  355. data/lib/vendor/puppet/parser/ast/resourceparam.rb +29 -0
  356. data/lib/vendor/puppet/parser/ast/selector.rb +44 -0
  357. data/lib/vendor/puppet/parser/ast/tag.rb +24 -0
  358. data/lib/vendor/puppet/parser/ast/top_level_construct.rb +4 -0
  359. data/lib/vendor/puppet/parser/ast/vardef.rb +33 -0
  360. data/lib/vendor/puppet/parser/ast.rb +139 -0
  361. data/lib/vendor/puppet/parser/collector.rb +176 -0
  362. data/lib/vendor/puppet/parser/compiler.rb +476 -0
  363. data/lib/vendor/puppet/parser/files.rb +88 -0
  364. data/lib/vendor/puppet/parser/functions/create_resources.rb +75 -0
  365. data/lib/vendor/puppet/parser/functions/defined.rb +49 -0
  366. data/lib/vendor/puppet/parser/functions/extlookup.rb +152 -0
  367. data/lib/vendor/puppet/parser/functions/fail.rb +4 -0
  368. data/lib/vendor/puppet/parser/functions/file.rb +23 -0
  369. data/lib/vendor/puppet/parser/functions/fqdn_rand.rb +13 -0
  370. data/lib/vendor/puppet/parser/functions/generate.rb +37 -0
  371. data/lib/vendor/puppet/parser/functions/include.rb +24 -0
  372. data/lib/vendor/puppet/parser/functions/inline_template.rb +21 -0
  373. data/lib/vendor/puppet/parser/functions/md5.rb +5 -0
  374. data/lib/vendor/puppet/parser/functions/realize.rb +14 -0
  375. data/lib/vendor/puppet/parser/functions/regsubst.rb +119 -0
  376. data/lib/vendor/puppet/parser/functions/require.rb +57 -0
  377. data/lib/vendor/puppet/parser/functions/search.rb +7 -0
  378. data/lib/vendor/puppet/parser/functions/sha1.rb +5 -0
  379. data/lib/vendor/puppet/parser/functions/shellquote.rb +61 -0
  380. data/lib/vendor/puppet/parser/functions/split.rb +29 -0
  381. data/lib/vendor/puppet/parser/functions/sprintf.rb +39 -0
  382. data/lib/vendor/puppet/parser/functions/tag.rb +6 -0
  383. data/lib/vendor/puppet/parser/functions/tagged.rb +18 -0
  384. data/lib/vendor/puppet/parser/functions/template.rb +23 -0
  385. data/lib/vendor/puppet/parser/functions/versioncmp.rb +37 -0
  386. data/lib/vendor/puppet/parser/functions.rb +165 -0
  387. data/lib/vendor/puppet/parser/grammar.ra +771 -0
  388. data/lib/vendor/puppet/parser/lexer.rb +617 -0
  389. data/lib/vendor/puppet/parser/makefile +8 -0
  390. data/lib/vendor/puppet/parser/parser.rb +2421 -0
  391. data/lib/vendor/puppet/parser/parser_support.rb +211 -0
  392. data/lib/vendor/puppet/parser/relationship.rb +62 -0
  393. data/lib/vendor/puppet/parser/resource/param.rb +25 -0
  394. data/lib/vendor/puppet/parser/resource.rb +341 -0
  395. data/lib/vendor/puppet/parser/scope.rb +497 -0
  396. data/lib/vendor/puppet/parser/templatewrapper.rb +115 -0
  397. data/lib/vendor/puppet/parser/type_loader.rb +172 -0
  398. data/lib/vendor/puppet/parser/yaml_trimmer.rb +9 -0
  399. data/lib/vendor/puppet/parser.rb +4 -0
  400. data/lib/vendor/puppet/property/ensure.rb +92 -0
  401. data/lib/vendor/puppet/property/keyvalue.rb +86 -0
  402. data/lib/vendor/puppet/property/list.rb +75 -0
  403. data/lib/vendor/puppet/property/ordered_list.rb +22 -0
  404. data/lib/vendor/puppet/property.rb +373 -0
  405. data/lib/vendor/puppet/provider/aixobject.rb +393 -0
  406. data/lib/vendor/puppet/provider/augeas/augeas.rb +418 -0
  407. data/lib/vendor/puppet/provider/cisco.rb +9 -0
  408. data/lib/vendor/puppet/provider/computer/computer.rb +20 -0
  409. data/lib/vendor/puppet/provider/confine/exists.rb +19 -0
  410. data/lib/vendor/puppet/provider/confine/false.rb +19 -0
  411. data/lib/vendor/puppet/provider/confine/feature.rb +17 -0
  412. data/lib/vendor/puppet/provider/confine/true.rb +20 -0
  413. data/lib/vendor/puppet/provider/confine/variable.rb +59 -0
  414. data/lib/vendor/puppet/provider/confine.rb +80 -0
  415. data/lib/vendor/puppet/provider/confine_collection.rb +50 -0
  416. data/lib/vendor/puppet/provider/confiner.rb +16 -0
  417. data/lib/vendor/puppet/provider/cron/crontab.rb +200 -0
  418. data/lib/vendor/puppet/provider/exec/posix.rb +39 -0
  419. data/lib/vendor/puppet/provider/exec/shell.rb +25 -0
  420. data/lib/vendor/puppet/provider/exec/windows.rb +56 -0
  421. data/lib/vendor/puppet/provider/exec.rb +84 -0
  422. data/lib/vendor/puppet/provider/file/posix.rb +135 -0
  423. data/lib/vendor/puppet/provider/file/windows.rb +88 -0
  424. data/lib/vendor/puppet/provider/group/aix.rb +141 -0
  425. data/lib/vendor/puppet/provider/group/directoryservice.rb +12 -0
  426. data/lib/vendor/puppet/provider/group/groupadd.rb +29 -0
  427. data/lib/vendor/puppet/provider/group/ldap.rb +45 -0
  428. data/lib/vendor/puppet/provider/group/pw.rb +48 -0
  429. data/lib/vendor/puppet/provider/group/windows_adsi.rb +54 -0
  430. data/lib/vendor/puppet/provider/host/parsed.rb +44 -0
  431. data/lib/vendor/puppet/provider/interface/base.rb +0 -0
  432. data/lib/vendor/puppet/provider/interface/cisco.rb +27 -0
  433. data/lib/vendor/puppet/provider/ldap.rb +137 -0
  434. data/lib/vendor/puppet/provider/macauthorization/macauthorization.rb +313 -0
  435. data/lib/vendor/puppet/provider/mailalias/aliases.rb +44 -0
  436. data/lib/vendor/puppet/provider/maillist/mailman.rb +108 -0
  437. data/lib/vendor/puppet/provider/mcx/mcxcontent.rb +166 -0
  438. data/lib/vendor/puppet/provider/mount/parsed.rb +124 -0
  439. data/lib/vendor/puppet/provider/mount.rb +46 -0
  440. data/lib/vendor/puppet/provider/naginator.rb +63 -0
  441. data/lib/vendor/puppet/provider/nameservice/directoryservice.rb +652 -0
  442. data/lib/vendor/puppet/provider/nameservice/objectadd.rb +33 -0
  443. data/lib/vendor/puppet/provider/nameservice/pw.rb +21 -0
  444. data/lib/vendor/puppet/provider/nameservice.rb +276 -0
  445. data/lib/vendor/puppet/provider/network_device.rb +68 -0
  446. data/lib/vendor/puppet/provider/package/aix.rb +128 -0
  447. data/lib/vendor/puppet/provider/package/appdmg.rb +109 -0
  448. data/lib/vendor/puppet/provider/package/apple.rb +47 -0
  449. data/lib/vendor/puppet/provider/package/apt.rb +111 -0
  450. data/lib/vendor/puppet/provider/package/aptitude.rb +29 -0
  451. data/lib/vendor/puppet/provider/package/aptrpm.rb +83 -0
  452. data/lib/vendor/puppet/provider/package/blastwave.rb +111 -0
  453. data/lib/vendor/puppet/provider/package/dpkg.rb +155 -0
  454. data/lib/vendor/puppet/provider/package/fink.rb +81 -0
  455. data/lib/vendor/puppet/provider/package/freebsd.rb +49 -0
  456. data/lib/vendor/puppet/provider/package/gem.rb +127 -0
  457. data/lib/vendor/puppet/provider/package/hpux.rb +44 -0
  458. data/lib/vendor/puppet/provider/package/macports.rb +105 -0
  459. data/lib/vendor/puppet/provider/package/msi.rb +141 -0
  460. data/lib/vendor/puppet/provider/package/nim.rb +35 -0
  461. data/lib/vendor/puppet/provider/package/openbsd.rb +112 -0
  462. data/lib/vendor/puppet/provider/package/pacman.rb +94 -0
  463. data/lib/vendor/puppet/provider/package/pip.rb +111 -0
  464. data/lib/vendor/puppet/provider/package/pkg.rb +112 -0
  465. data/lib/vendor/puppet/provider/package/pkgdmg.rb +123 -0
  466. data/lib/vendor/puppet/provider/package/pkgutil.rb +174 -0
  467. data/lib/vendor/puppet/provider/package/portage.rb +124 -0
  468. data/lib/vendor/puppet/provider/package/ports.rb +94 -0
  469. data/lib/vendor/puppet/provider/package/portupgrade.rb +241 -0
  470. data/lib/vendor/puppet/provider/package/rpm.rb +132 -0
  471. data/lib/vendor/puppet/provider/package/rug.rb +52 -0
  472. data/lib/vendor/puppet/provider/package/sun.rb +154 -0
  473. data/lib/vendor/puppet/provider/package/sunfreeware.rb +9 -0
  474. data/lib/vendor/puppet/provider/package/up2date.rb +41 -0
  475. data/lib/vendor/puppet/provider/package/urpmi.rb +59 -0
  476. data/lib/vendor/puppet/provider/package/yum.rb +106 -0
  477. data/lib/vendor/puppet/provider/package/yumhelper.py +129 -0
  478. data/lib/vendor/puppet/provider/package/zypper.rb +84 -0
  479. data/lib/vendor/puppet/provider/package.rb +28 -0
  480. data/lib/vendor/puppet/provider/parsedfile.rb +374 -0
  481. data/lib/vendor/puppet/provider/port/parsed.rb +173 -0
  482. data/lib/vendor/puppet/provider/scheduled_task/win32_taskscheduler.rb +565 -0
  483. data/lib/vendor/puppet/provider/selboolean/getsetsebool.rb +47 -0
  484. data/lib/vendor/puppet/provider/selmodule/semodule.rb +134 -0
  485. data/lib/vendor/puppet/provider/service/base.rb +105 -0
  486. data/lib/vendor/puppet/provider/service/bsd.rb +49 -0
  487. data/lib/vendor/puppet/provider/service/daemontools.rb +194 -0
  488. data/lib/vendor/puppet/provider/service/debian.rb +68 -0
  489. data/lib/vendor/puppet/provider/service/freebsd.rb +139 -0
  490. data/lib/vendor/puppet/provider/service/gentoo.rb +54 -0
  491. data/lib/vendor/puppet/provider/service/init.rb +140 -0
  492. data/lib/vendor/puppet/provider/service/launchd.rb +303 -0
  493. data/lib/vendor/puppet/provider/service/openrc.rb +69 -0
  494. data/lib/vendor/puppet/provider/service/redhat.rb +76 -0
  495. data/lib/vendor/puppet/provider/service/runit.rb +103 -0
  496. data/lib/vendor/puppet/provider/service/service.rb +43 -0
  497. data/lib/vendor/puppet/provider/service/smf.rb +104 -0
  498. data/lib/vendor/puppet/provider/service/src.rb +86 -0
  499. data/lib/vendor/puppet/provider/service/systemd.rb +64 -0
  500. data/lib/vendor/puppet/provider/service/upstart.rb +347 -0
  501. data/lib/vendor/puppet/provider/service/windows.rb +106 -0
  502. data/lib/vendor/puppet/provider/ssh_authorized_key/parsed.rb +88 -0
  503. data/lib/vendor/puppet/provider/sshkey/parsed.rb +37 -0
  504. data/lib/vendor/puppet/provider/user/aix.rb +357 -0
  505. data/lib/vendor/puppet/provider/user/directoryservice.rb +86 -0
  506. data/lib/vendor/puppet/provider/user/hpux.rb +31 -0
  507. data/lib/vendor/puppet/provider/user/ldap.rb +129 -0
  508. data/lib/vendor/puppet/provider/user/pw.rb +101 -0
  509. data/lib/vendor/puppet/provider/user/user_role_add.rb +207 -0
  510. data/lib/vendor/puppet/provider/user/useradd.rb +127 -0
  511. data/lib/vendor/puppet/provider/user/windows_adsi.rb +99 -0
  512. data/lib/vendor/puppet/provider/vlan/cisco.rb +28 -0
  513. data/lib/vendor/puppet/provider/zfs/solaris.rb +45 -0
  514. data/lib/vendor/puppet/provider/zone/solaris.rb +260 -0
  515. data/lib/vendor/puppet/provider/zpool/solaris.rb +116 -0
  516. data/lib/vendor/puppet/provider.rb +290 -0
  517. data/lib/vendor/puppet/rails/benchmark.rb +63 -0
  518. data/lib/vendor/puppet/rails/database/001_add_created_at_to_all_tables.rb +13 -0
  519. data/lib/vendor/puppet/rails/database/002_remove_duplicated_index_on_all_tables.rb +13 -0
  520. data/lib/vendor/puppet/rails/database/003_add_environment_to_host.rb +9 -0
  521. data/lib/vendor/puppet/rails/database/004_add_inventory_service_tables.rb +36 -0
  522. data/lib/vendor/puppet/rails/database/schema.rb +131 -0
  523. data/lib/vendor/puppet/rails/fact_name.rb +6 -0
  524. data/lib/vendor/puppet/rails/fact_value.rb +8 -0
  525. data/lib/vendor/puppet/rails/host.rb +258 -0
  526. data/lib/vendor/puppet/rails/inventory_fact.rb +5 -0
  527. data/lib/vendor/puppet/rails/inventory_node.rb +43 -0
  528. data/lib/vendor/puppet/rails/param_name.rb +25 -0
  529. data/lib/vendor/puppet/rails/param_value.rb +74 -0
  530. data/lib/vendor/puppet/rails/puppet_tag.rb +10 -0
  531. data/lib/vendor/puppet/rails/resource.rb +231 -0
  532. data/lib/vendor/puppet/rails/resource_tag.rb +26 -0
  533. data/lib/vendor/puppet/rails/source_file.rb +8 -0
  534. data/lib/vendor/puppet/rails.rb +132 -0
  535. data/lib/vendor/puppet/rb_tree_map.rb +388 -0
  536. data/lib/vendor/puppet/reference/configuration.rb +69 -0
  537. data/lib/vendor/puppet/reference/function.rb +17 -0
  538. data/lib/vendor/puppet/reference/indirection.rb +32 -0
  539. data/lib/vendor/puppet/reference/metaparameter.rb +43 -0
  540. data/lib/vendor/puppet/reference/network.rb +39 -0
  541. data/lib/vendor/puppet/reference/providers.rb +119 -0
  542. data/lib/vendor/puppet/reference/report.rb +23 -0
  543. data/lib/vendor/puppet/reference/type.rb +116 -0
  544. data/lib/vendor/puppet/relationship.rb +95 -0
  545. data/lib/vendor/puppet/reports/http.rb +25 -0
  546. data/lib/vendor/puppet/reports/log.rb +14 -0
  547. data/lib/vendor/puppet/reports/rrdgraph.rb +128 -0
  548. data/lib/vendor/puppet/reports/store.rb +74 -0
  549. data/lib/vendor/puppet/reports/tagmail.rb +179 -0
  550. data/lib/vendor/puppet/reports.rb +49 -0
  551. data/lib/vendor/puppet/resource/catalog.rb +661 -0
  552. data/lib/vendor/puppet/resource/status.rb +79 -0
  553. data/lib/vendor/puppet/resource/type.rb +344 -0
  554. data/lib/vendor/puppet/resource/type_collection.rb +215 -0
  555. data/lib/vendor/puppet/resource/type_collection_helper.rb +7 -0
  556. data/lib/vendor/puppet/resource.rb +467 -0
  557. data/lib/vendor/puppet/run.rb +77 -0
  558. data/lib/vendor/puppet/simple_graph.rb +550 -0
  559. data/lib/vendor/puppet/ssl/base.rb +86 -0
  560. data/lib/vendor/puppet/ssl/certificate.rb +40 -0
  561. data/lib/vendor/puppet/ssl/certificate_authority/interface.rb +182 -0
  562. data/lib/vendor/puppet/ssl/certificate_authority.rb +374 -0
  563. data/lib/vendor/puppet/ssl/certificate_factory.rb +166 -0
  564. data/lib/vendor/puppet/ssl/certificate_request.rb +149 -0
  565. data/lib/vendor/puppet/ssl/certificate_revocation_list.rb +84 -0
  566. data/lib/vendor/puppet/ssl/host.rb +365 -0
  567. data/lib/vendor/puppet/ssl/inventory.rb +54 -0
  568. data/lib/vendor/puppet/ssl/key.rb +56 -0
  569. data/lib/vendor/puppet/ssl.rb +8 -0
  570. data/lib/vendor/puppet/status.rb +28 -0
  571. data/lib/vendor/puppet/test/test_helper.rb +141 -0
  572. data/lib/vendor/puppet/transaction/event.rb +66 -0
  573. data/lib/vendor/puppet/transaction/event_manager.rb +115 -0
  574. data/lib/vendor/puppet/transaction/report.rb +200 -0
  575. data/lib/vendor/puppet/transaction/resource_harness.rb +178 -0
  576. data/lib/vendor/puppet/transaction.rb +493 -0
  577. data/lib/vendor/puppet/transportable.rb +248 -0
  578. data/lib/vendor/puppet/type/augeas.rb +218 -0
  579. data/lib/vendor/puppet/type/component.rb +85 -0
  580. data/lib/vendor/puppet/type/computer.rb +66 -0
  581. data/lib/vendor/puppet/type/cron.rb +421 -0
  582. data/lib/vendor/puppet/type/exec.rb +520 -0
  583. data/lib/vendor/puppet/type/file/checksum.rb +33 -0
  584. data/lib/vendor/puppet/type/file/content.rb +230 -0
  585. data/lib/vendor/puppet/type/file/ctime.rb +18 -0
  586. data/lib/vendor/puppet/type/file/ensure.rb +172 -0
  587. data/lib/vendor/puppet/type/file/group.rb +41 -0
  588. data/lib/vendor/puppet/type/file/mode.rb +148 -0
  589. data/lib/vendor/puppet/type/file/mtime.rb +17 -0
  590. data/lib/vendor/puppet/type/file/owner.rb +44 -0
  591. data/lib/vendor/puppet/type/file/selcontext.rb +123 -0
  592. data/lib/vendor/puppet/type/file/source.rb +195 -0
  593. data/lib/vendor/puppet/type/file/target.rb +87 -0
  594. data/lib/vendor/puppet/type/file/type.rb +19 -0
  595. data/lib/vendor/puppet/type/file.rb +829 -0
  596. data/lib/vendor/puppet/type/filebucket.rb +114 -0
  597. data/lib/vendor/puppet/type/group.rb +149 -0
  598. data/lib/vendor/puppet/type/host.rb +87 -0
  599. data/lib/vendor/puppet/type/interface.rb +112 -0
  600. data/lib/vendor/puppet/type/k5login.rb +88 -0
  601. data/lib/vendor/puppet/type/macauthorization.rb +167 -0
  602. data/lib/vendor/puppet/type/mailalias.rb +48 -0
  603. data/lib/vendor/puppet/type/maillist.rb +62 -0
  604. data/lib/vendor/puppet/type/mcx.rb +99 -0
  605. data/lib/vendor/puppet/type/mount.rb +241 -0
  606. data/lib/vendor/puppet/type/nagios_command.rb +3 -0
  607. data/lib/vendor/puppet/type/nagios_contact.rb +3 -0
  608. data/lib/vendor/puppet/type/nagios_contactgroup.rb +3 -0
  609. data/lib/vendor/puppet/type/nagios_host.rb +3 -0
  610. data/lib/vendor/puppet/type/nagios_hostdependency.rb +3 -0
  611. data/lib/vendor/puppet/type/nagios_hostescalation.rb +3 -0
  612. data/lib/vendor/puppet/type/nagios_hostextinfo.rb +3 -0
  613. data/lib/vendor/puppet/type/nagios_hostgroup.rb +3 -0
  614. data/lib/vendor/puppet/type/nagios_service.rb +3 -0
  615. data/lib/vendor/puppet/type/nagios_servicedependency.rb +3 -0
  616. data/lib/vendor/puppet/type/nagios_serviceescalation.rb +3 -0
  617. data/lib/vendor/puppet/type/nagios_serviceextinfo.rb +3 -0
  618. data/lib/vendor/puppet/type/nagios_servicegroup.rb +3 -0
  619. data/lib/vendor/puppet/type/nagios_timeperiod.rb +3 -0
  620. data/lib/vendor/puppet/type/notify.rb +44 -0
  621. data/lib/vendor/puppet/type/package.rb +357 -0
  622. data/lib/vendor/puppet/type/port.rb +119 -0
  623. data/lib/vendor/puppet/type/resources.rb +131 -0
  624. data/lib/vendor/puppet/type/router.rb +17 -0
  625. data/lib/vendor/puppet/type/schedule.rb +360 -0
  626. data/lib/vendor/puppet/type/scheduled_task.rb +166 -0
  627. data/lib/vendor/puppet/type/selboolean.rb +26 -0
  628. data/lib/vendor/puppet/type/selmodule.rb +59 -0
  629. data/lib/vendor/puppet/type/service.rb +221 -0
  630. data/lib/vendor/puppet/type/ssh_authorized_key.rb +112 -0
  631. data/lib/vendor/puppet/type/sshkey.rb +72 -0
  632. data/lib/vendor/puppet/type/stage.rb +19 -0
  633. data/lib/vendor/puppet/type/tidy.rb +333 -0
  634. data/lib/vendor/puppet/type/user.rb +524 -0
  635. data/lib/vendor/puppet/type/vlan.rb +26 -0
  636. data/lib/vendor/puppet/type/whit.rb +34 -0
  637. data/lib/vendor/puppet/type/yumrepo.rb +361 -0
  638. data/lib/vendor/puppet/type/zfs.rb +146 -0
  639. data/lib/vendor/puppet/type/zone.rb +492 -0
  640. data/lib/vendor/puppet/type/zpool.rb +91 -0
  641. data/lib/vendor/puppet/type.rb +1979 -0
  642. data/lib/vendor/puppet/util/adsi.rb +296 -0
  643. data/lib/vendor/puppet/util/autoload/file_cache.rb +92 -0
  644. data/lib/vendor/puppet/util/autoload.rb +158 -0
  645. data/lib/vendor/puppet/util/backups.rb +87 -0
  646. data/lib/vendor/puppet/util/cacher.rb +80 -0
  647. data/lib/vendor/puppet/util/checksums.rb +143 -0
  648. data/lib/vendor/puppet/util/classgen.rb +209 -0
  649. data/lib/vendor/puppet/util/colors.rb +128 -0
  650. data/lib/vendor/puppet/util/command_line.rb +185 -0
  651. data/lib/vendor/puppet/util/constant_inflector.rb +15 -0
  652. data/lib/vendor/puppet/util/diff.rb +77 -0
  653. data/lib/vendor/puppet/util/docs.rb +123 -0
  654. data/lib/vendor/puppet/util/errors.rb +63 -0
  655. data/lib/vendor/puppet/util/execution.rb +20 -0
  656. data/lib/vendor/puppet/util/execution_stub.rb +26 -0
  657. data/lib/vendor/puppet/util/feature.rb +83 -0
  658. data/lib/vendor/puppet/util/file_locking.rb +47 -0
  659. data/lib/vendor/puppet/util/fileparsing.rb +373 -0
  660. data/lib/vendor/puppet/util/filetype.rb +296 -0
  661. data/lib/vendor/puppet/util/graph.rb +27 -0
  662. data/lib/vendor/puppet/util/inifile.rb +203 -0
  663. data/lib/vendor/puppet/util/inline_docs.rb +26 -0
  664. data/lib/vendor/puppet/util/instance_loader.rb +81 -0
  665. data/lib/vendor/puppet/util/instrumentation/data.rb +34 -0
  666. data/lib/vendor/puppet/util/instrumentation/indirection_probe.rb +29 -0
  667. data/lib/vendor/puppet/util/instrumentation/instrumentable.rb +143 -0
  668. data/lib/vendor/puppet/util/instrumentation/listener.rb +60 -0
  669. data/lib/vendor/puppet/util/instrumentation/listeners/log.rb +29 -0
  670. data/lib/vendor/puppet/util/instrumentation/listeners/performance.rb +30 -0
  671. data/lib/vendor/puppet/util/instrumentation.rb +171 -0
  672. data/lib/vendor/puppet/util/ldap/connection.rb +74 -0
  673. data/lib/vendor/puppet/util/ldap/generator.rb +42 -0
  674. data/lib/vendor/puppet/util/ldap/manager.rb +279 -0
  675. data/lib/vendor/puppet/util/ldap.rb +2 -0
  676. data/lib/vendor/puppet/util/loadedfile.rb +61 -0
  677. data/lib/vendor/puppet/util/log/destination.rb +49 -0
  678. data/lib/vendor/puppet/util/log/destinations.rb +268 -0
  679. data/lib/vendor/puppet/util/log.rb +275 -0
  680. data/lib/vendor/puppet/util/log_paths.rb +22 -0
  681. data/lib/vendor/puppet/util/logging.rb +51 -0
  682. data/lib/vendor/puppet/util/metaid.rb +21 -0
  683. data/lib/vendor/puppet/util/methodhelper.rb +32 -0
  684. data/lib/vendor/puppet/util/metric.rb +186 -0
  685. data/lib/vendor/puppet/util/monkey_patches.rb +243 -0
  686. data/lib/vendor/puppet/util/nagios_maker.rb +60 -0
  687. data/lib/vendor/puppet/util/network_device/base.rb +27 -0
  688. data/lib/vendor/puppet/util/network_device/cisco/device.rb +257 -0
  689. data/lib/vendor/puppet/util/network_device/cisco/facts.rb +72 -0
  690. data/lib/vendor/puppet/util/network_device/cisco/interface.rb +82 -0
  691. data/lib/vendor/puppet/util/network_device/cisco.rb +4 -0
  692. data/lib/vendor/puppet/util/network_device/config.rb +92 -0
  693. data/lib/vendor/puppet/util/network_device/ipcalc.rb +68 -0
  694. data/lib/vendor/puppet/util/network_device/transport/base.rb +26 -0
  695. data/lib/vendor/puppet/util/network_device/transport/ssh.rb +121 -0
  696. data/lib/vendor/puppet/util/network_device/transport/telnet.rb +42 -0
  697. data/lib/vendor/puppet/util/network_device/transport.rb +3 -0
  698. data/lib/vendor/puppet/util/network_device.rb +17 -0
  699. data/lib/vendor/puppet/util/package.rb +31 -0
  700. data/lib/vendor/puppet/util/pidlock.rb +117 -0
  701. data/lib/vendor/puppet/util/platform.rb +22 -0
  702. data/lib/vendor/puppet/util/plugins.rb +82 -0
  703. data/lib/vendor/puppet/util/posix.rb +137 -0
  704. data/lib/vendor/puppet/util/provider_features.rb +168 -0
  705. data/lib/vendor/puppet/util/pson.rb +13 -0
  706. data/lib/vendor/puppet/util/queue/stomp.rb +60 -0
  707. data/lib/vendor/puppet/util/queue.rb +96 -0
  708. data/lib/vendor/puppet/util/rails/cache_accumulator.rb +65 -0
  709. data/lib/vendor/puppet/util/rails/collection_merger.rb +17 -0
  710. data/lib/vendor/puppet/util/rails/reference_serializer.rb +32 -0
  711. data/lib/vendor/puppet/util/rdoc.rb +87 -0
  712. data/lib/vendor/puppet/util/reference.rb +124 -0
  713. data/lib/vendor/puppet/util/resource_template.rb +61 -0
  714. data/lib/vendor/puppet/util/retryaction.rb +48 -0
  715. data/lib/vendor/puppet/util/run_mode.rb +82 -0
  716. data/lib/vendor/puppet/util/selinux.rb +211 -0
  717. data/lib/vendor/puppet/util/settings/boolean_setting.rb +30 -0
  718. data/lib/vendor/puppet/util/settings/file_setting.rb +135 -0
  719. data/lib/vendor/puppet/util/settings/setting.rb +94 -0
  720. data/lib/vendor/puppet/util/settings.rb +926 -0
  721. data/lib/vendor/puppet/util/storage.rb +96 -0
  722. data/lib/vendor/puppet/util/subclass_loader.rb +82 -0
  723. data/lib/vendor/puppet/util/suidmanager.rb +173 -0
  724. data/lib/vendor/puppet/util/symbolic_file_mode.rb +140 -0
  725. data/lib/vendor/puppet/util/tagging.rb +78 -0
  726. data/lib/vendor/puppet/util/terminal.rb +16 -0
  727. data/lib/vendor/puppet/util/user_attr.rb +21 -0
  728. data/lib/vendor/puppet/util/warnings.rb +29 -0
  729. data/lib/vendor/puppet/util/windows/error.rb +16 -0
  730. data/lib/vendor/puppet/util/windows/file.rb +27 -0
  731. data/lib/vendor/puppet/util/windows/process.rb +33 -0
  732. data/lib/vendor/puppet/util/windows/security.rb +622 -0
  733. data/lib/vendor/puppet/util/windows/sid.rb +96 -0
  734. data/lib/vendor/puppet/util/windows/user.rb +106 -0
  735. data/lib/vendor/puppet/util/windows.rb +8 -0
  736. data/lib/vendor/puppet/util/zaml.rb +407 -0
  737. data/lib/vendor/puppet/util.rb +646 -0
  738. data/lib/vendor/puppet/version.rb +18 -0
  739. data/lib/vendor/puppet.rb +125 -0
  740. data/lib/vendor/semver.rb +124 -0
  741. data/puppet-parse.gemspec +2 -8
  742. metadata +812 -94
@@ -0,0 +1,652 @@
1
+ require 'puppet'
2
+ require 'puppet/provider/nameservice'
3
+ require 'facter/util/plist'
4
+ require 'cgi'
5
+ require 'fileutils'
6
+
7
+ class Puppet::Provider::NameService
8
+ class DirectoryService < Puppet::Provider::NameService
9
+ # JJM: Dive into the singleton_class
10
+ class << self
11
+ # JJM: This allows us to pass information when calling
12
+ # Puppet::Type.type
13
+ # e.g. Puppet::Type.type(:user).provide :directoryservice, :ds_path => "Users"
14
+ # This is referenced in the get_ds_path class method
15
+ attr_writer :ds_path
16
+ attr_writer :macosx_version_major
17
+ end
18
+
19
+ initvars
20
+
21
+ commands :dscl => "/usr/bin/dscl"
22
+ commands :dseditgroup => "/usr/sbin/dseditgroup"
23
+ commands :sw_vers => "/usr/bin/sw_vers"
24
+ commands :plutil => '/usr/bin/plutil'
25
+ confine :operatingsystem => :darwin
26
+ defaultfor :operatingsystem => :darwin
27
+
28
+
29
+ # JJM 2007-07-25: This map is used to map NameService attributes to their
30
+ # corresponding DirectoryService attribute names.
31
+ # See: http://images.apple.com/server/docs.Open_Directory_v10.4.pdf
32
+ # JJM: Note, this is de-coupled from the Puppet::Type, and must
33
+ # be actively maintained. There may also be collisions with different
34
+ # types (Users, Groups, Mounts, Hosts, etc...)
35
+ @@ds_to_ns_attribute_map = {
36
+ 'RecordName' => :name,
37
+ 'PrimaryGroupID' => :gid,
38
+ 'NFSHomeDirectory' => :home,
39
+ 'UserShell' => :shell,
40
+ 'UniqueID' => :uid,
41
+ 'RealName' => :comment,
42
+ 'Password' => :password,
43
+ 'GeneratedUID' => :guid,
44
+ 'IPAddress' => :ip_address,
45
+ 'ENetAddress' => :en_address,
46
+ 'GroupMembership' => :members,
47
+ }
48
+ # JJM The same table as above, inverted.
49
+ @@ns_to_ds_attribute_map = {
50
+ :name => 'RecordName',
51
+ :gid => 'PrimaryGroupID',
52
+ :home => 'NFSHomeDirectory',
53
+ :shell => 'UserShell',
54
+ :uid => 'UniqueID',
55
+ :comment => 'RealName',
56
+ :password => 'Password',
57
+ :guid => 'GeneratedUID',
58
+ :en_address => 'ENetAddress',
59
+ :ip_address => 'IPAddress',
60
+ :members => 'GroupMembership',
61
+ }
62
+
63
+ @@password_hash_dir = "/var/db/shadow/hash"
64
+ @@users_plist_dir = '/var/db/dslocal/nodes/Default/users'
65
+
66
+
67
+ def self.instances
68
+ # JJM Class method that provides an array of instance objects of this
69
+ # type.
70
+ # JJM: Properties are dependent on the Puppet::Type we're managine.
71
+ type_property_array = [:name] + @resource_type.validproperties
72
+
73
+ # Create a new instance of this Puppet::Type for each object present
74
+ # on the system.
75
+ list_all_present.collect do |name_string|
76
+ self.new(single_report(name_string, *type_property_array))
77
+ end
78
+ end
79
+
80
+ def self.get_ds_path
81
+ # JJM: 2007-07-24 This method dynamically returns the DS path we're concerned with.
82
+ # For example, if we're working with an user type, this will be /Users
83
+ # with a group type, this will be /Groups.
84
+ # @ds_path is an attribute of the class itself.
85
+ return @ds_path if defined?(@ds_path)
86
+ # JJM: "Users" or "Groups" etc ... (Based on the Puppet::Type)
87
+ # Remember this is a class method, so self.class is Class
88
+ # Also, @resource_type seems to be the reference to the
89
+ # Puppet::Type this class object is providing for.
90
+ @resource_type.name.to_s.capitalize + "s"
91
+ end
92
+
93
+ def self.get_macosx_version_major
94
+ return @macosx_version_major if defined?(@macosx_version_major)
95
+ begin
96
+ # Make sure we've loaded all of the facts
97
+ Facter.loadfacts
98
+
99
+ if Facter.value(:macosx_productversion_major)
100
+ product_version_major = Facter.value(:macosx_productversion_major)
101
+ else
102
+ # TODO: remove this code chunk once we require Facter 1.5.5 or higher.
103
+ Puppet.warning("DEPRECATION WARNING: Future versions of the directoryservice provider will require Facter 1.5.5 or newer.")
104
+ product_version = Facter.value(:macosx_productversion)
105
+ fail("Could not determine OS X version from Facter") if product_version.nil?
106
+ product_version_major = product_version.scan(/(\d+)\.(\d+)./).join(".")
107
+ end
108
+ fail("#{product_version_major} is not supported by the directoryservice provider") if %w{10.0 10.1 10.2 10.3}.include?(product_version_major)
109
+ @macosx_version_major = product_version_major
110
+ return @macosx_version_major
111
+ rescue Puppet::ExecutionFailure => detail
112
+ fail("Could not determine OS X version: #{detail}")
113
+ end
114
+ end
115
+
116
+
117
+ def self.list_all_present
118
+ # JJM: List all objects of this Puppet::Type already present on the system.
119
+ begin
120
+ dscl_output = execute(get_exec_preamble("-list"))
121
+ rescue Puppet::ExecutionFailure => detail
122
+ fail("Could not get #{@resource_type.name} list from DirectoryService")
123
+ end
124
+ dscl_output.split("\n")
125
+ end
126
+
127
+ def self.parse_dscl_url_data(dscl_output)
128
+ # we need to construct a Hash from the dscl -url output to match
129
+ # that returned by the dscl -plist output for 10.5+ clients.
130
+ #
131
+ # Nasty assumptions:
132
+ # a) no values *end* in a colon ':', only keys
133
+ # b) if a line ends in a colon and the next line does start with
134
+ # a space, then the second line is a value of the first.
135
+ # c) (implied by (b)) keys don't start with spaces.
136
+
137
+ dscl_plist = {}
138
+ dscl_output.split("\n").inject([]) do |array, line|
139
+ if line =~ /^\s+/ # it's a value
140
+ array[-1] << line # add the value to the previous key
141
+ else
142
+ array << line
143
+ end
144
+ array
145
+ end.compact
146
+
147
+ dscl_output.each do |line|
148
+ # This should be a 'normal' entry. key and value on one line.
149
+ # We split on ': ' to deal with keys/values with a colon in them.
150
+ split_array = line.split(/:\s+/)
151
+ key = split_array.first
152
+ value = CGI::unescape(split_array.last.strip.chomp)
153
+ # We need to treat GroupMembership separately as it is currently
154
+ # the only attribute we care about multiple values for, and
155
+ # the values can never contain spaces (shortnames)
156
+ # We also make every value an array to be consistent with the
157
+ # output of dscl -plist under 10.5
158
+ if key == "GroupMembership"
159
+ dscl_plist[key] = value.split(/\s/)
160
+ else
161
+ dscl_plist[key] = [value]
162
+ end
163
+ end
164
+ dscl_plist
165
+ end
166
+
167
+ def self.parse_dscl_plist_data(dscl_output)
168
+ Plist.parse_xml(dscl_output)
169
+ end
170
+
171
+ def self.generate_attribute_hash(input_hash, *type_properties)
172
+ attribute_hash = {}
173
+ input_hash.keys.each do |key|
174
+ ds_attribute = key.sub("dsAttrTypeStandard:", "")
175
+ next unless (@@ds_to_ns_attribute_map.keys.include?(ds_attribute) and type_properties.include? @@ds_to_ns_attribute_map[ds_attribute])
176
+ ds_value = input_hash[key]
177
+ case @@ds_to_ns_attribute_map[ds_attribute]
178
+ when :members
179
+ ds_value = ds_value # only members uses arrays so far
180
+ when :gid, :uid
181
+ # OS X stores objects like uid/gid as strings.
182
+ # Try casting to an integer for these cases to be
183
+ # consistent with the other providers and the group type
184
+ # validation
185
+ begin
186
+ ds_value = Integer(ds_value[0])
187
+ rescue ArgumentError
188
+ ds_value = ds_value[0]
189
+ end
190
+ else ds_value = ds_value[0]
191
+ end
192
+ attribute_hash[@@ds_to_ns_attribute_map[ds_attribute]] = ds_value
193
+ end
194
+
195
+ # NBK: need to read the existing password here as it's not actually
196
+ # stored in the user record. It is stored at a path that involves the
197
+ # UUID of the user record for non-Mobile local acccounts.
198
+ # Mobile Accounts are out of scope for this provider for now
199
+ attribute_hash[:password] = self.get_password(attribute_hash[:guid], attribute_hash[:name]) if @resource_type.validproperties.include?(:password) and Puppet.features.root?
200
+ attribute_hash
201
+ end
202
+
203
+ def self.single_report(resource_name, *type_properties)
204
+ # JJM 2007-07-24:
205
+ # Given a the name of an object and a list of properties of that
206
+ # object, return all property values in a hash.
207
+ #
208
+ # This class method returns nil if the object doesn't exist
209
+ # Otherwise, it returns a hash of the object properties.
210
+
211
+ all_present_str_array = list_all_present
212
+
213
+ # NBK: shortcut the process if the resource is missing
214
+ return nil unless all_present_str_array.include? resource_name
215
+
216
+ dscl_vector = get_exec_preamble("-read", resource_name)
217
+ begin
218
+ dscl_output = execute(dscl_vector)
219
+ rescue Puppet::ExecutionFailure => detail
220
+ fail("Could not get report. command execution failed.")
221
+ end
222
+
223
+ # Two code paths is ugly, but until we can drop 10.4 support we don't
224
+ # have a lot of choice. Ultimately this should all be done using Ruby
225
+ # to access the DirectoryService APIs directly, but that's simply not
226
+ # feasible for a while yet.
227
+ if self.get_macosx_version_major > "10.4"
228
+ dscl_plist = self.parse_dscl_plist_data(dscl_output)
229
+ elsif self.get_macosx_version_major == "10.4"
230
+ dscl_plist = self.parse_dscl_url_data(dscl_output)
231
+ else
232
+ fail("Puppet does not support OS X versions < 10.4")
233
+ end
234
+
235
+ self.generate_attribute_hash(dscl_plist, *type_properties)
236
+ end
237
+
238
+ def self.get_exec_preamble(ds_action, resource_name = nil)
239
+ # JJM 2007-07-24
240
+ # DSCL commands are often repetitive and contain the same positional
241
+ # arguments over and over. See http://developer.apple.com/documentation/Porting/Conceptual/PortingUnix/additionalfeatures/chapter_10_section_9.html
242
+ # for an example of what I mean.
243
+ # This method spits out proper DSCL commands for us.
244
+ # We EXPECT name to be @resource[:name] when called from an instance object.
245
+
246
+ # 10.4 doesn't support the -plist option for dscl, and 10.5 has a
247
+ # different format for the -url output with objects with spaces in
248
+ # their values. *sigh*. Use -url for 10.4 in the hope this can be
249
+ # deprecated one day, and use -plist for 10.5 and higher.
250
+ if self.get_macosx_version_major > "10.4"
251
+ command_vector = [ command(:dscl), "-plist", "." ]
252
+ elsif self.get_macosx_version_major == "10.4"
253
+ command_vector = [ command(:dscl), "-url", "." ]
254
+ else
255
+ fail("Puppet does not support OS X versions < 10.4")
256
+ end
257
+
258
+ # JJM: The actual action to perform. See "man dscl"
259
+ # Common actiosn: -create, -delete, -merge, -append, -passwd
260
+ command_vector << ds_action
261
+ # JJM: get_ds_path will spit back "Users" or "Groups",
262
+ # etc... Depending on the Puppet::Type of our self.
263
+ if resource_name
264
+ command_vector << "/#{get_ds_path}/#{resource_name}"
265
+ else
266
+ command_vector << "/#{get_ds_path}"
267
+ end
268
+ # JJM: This returns most of the preamble of the command.
269
+ # e.g. 'dscl / -create /Users/mccune'
270
+ command_vector
271
+ end
272
+
273
+ def self.set_password(resource_name, guid, password_hash)
274
+ # Use Puppet::Util::Package.versioncmp() to catch the scenario where a
275
+ # version '10.10' would be < '10.7' with simple string comparison. This
276
+ # if-statement only executes if the current version is less-than 10.7
277
+ if (Puppet::Util::Package.versioncmp(get_macosx_version_major, '10.7') == -1)
278
+ password_hash_file = "#{@@password_hash_dir}/#{guid}"
279
+ begin
280
+ File.open(password_hash_file, 'w') { |f| f.write(password_hash)}
281
+ rescue Errno::EACCES => detail
282
+ fail("Could not write to password hash file: #{detail}")
283
+ end
284
+
285
+ # NBK: For shadow hashes, the user AuthenticationAuthority must contain a value of
286
+ # ";ShadowHash;". The LKDC in 10.5 makes this more interesting though as it
287
+ # will dynamically generate ;Kerberosv5;;username@LKDC:SHA1 attributes if
288
+ # missing. Thus we make sure we only set ;ShadowHash; if it is missing, and
289
+ # we can do this with the merge command. This allows people to continue to
290
+ # use other custom AuthenticationAuthority attributes without stomping on them.
291
+ #
292
+ # There is a potential problem here in that we're only doing this when setting
293
+ # the password, and the attribute could get modified at other times while the
294
+ # hash doesn't change and so this doesn't get called at all... but
295
+ # without switching all the other attributes to merge instead of create I can't
296
+ # see a simple enough solution for this that doesn't modify the user record
297
+ # every single time. This should be a rather rare edge case. (famous last words)
298
+
299
+ dscl_vector = self.get_exec_preamble("-merge", resource_name)
300
+ dscl_vector << "AuthenticationAuthority" << ";ShadowHash;"
301
+ begin
302
+ dscl_output = execute(dscl_vector)
303
+ rescue Puppet::ExecutionFailure => detail
304
+ fail("Could not set AuthenticationAuthority.")
305
+ end
306
+ else
307
+ # 10.7 uses salted SHA512 password hashes which are 128 characters plus
308
+ # an 8 character salt. Previous versions used a SHA1 hash padded with
309
+ # zeroes. If someone attempts to use a password hash that worked with
310
+ # a previous version of OX X, we will fail early and warn them.
311
+ if password_hash.length != 136
312
+ fail("OS X 10.7 requires a Salted SHA512 hash password of 136 characters. \
313
+ Please check your password and try again.")
314
+ end
315
+
316
+ if File.exists?("#{@@users_plist_dir}/#{resource_name}.plist")
317
+ # If a plist already exists in /var/db/dslocal/nodes/Default/users, then
318
+ # we will need to extract the binary plist from the 'ShadowHashData'
319
+ # key, log the new password into the resultant plist's 'SALTED-SHA512'
320
+ # key, and then save the entire structure back.
321
+ users_plist = Plist::parse_xml(plutil( '-convert', 'xml1', '-o', '/dev/stdout', \
322
+ "#{@@users_plist_dir}/#{resource_name}.plist"))
323
+
324
+ # users_plist['ShadowHashData'][0].string is actually a binary plist
325
+ # that's nested INSIDE the user's plist (which itself is a binary
326
+ # plist). If we encounter a user plist that DOESN'T have a
327
+ # ShadowHashData field, create one.
328
+ if users_plist['ShadowHashData']
329
+ password_hash_plist = users_plist['ShadowHashData'][0].string
330
+ converted_hash_plist = convert_binary_to_xml(password_hash_plist)
331
+ else
332
+ users_plist['ShadowHashData'] = [StringIO.new]
333
+ converted_hash_plist = {'SALTED-SHA512' => StringIO.new}
334
+ end
335
+
336
+ # converted_hash_plist['SALTED-SHA512'].string expects a Base64 encoded
337
+ # string. The password_hash provided as a resource attribute is a
338
+ # hex value. We need to convert the provided hex value to a Base64
339
+ # encoded string to nest it in the converted hash plist.
340
+ converted_hash_plist['SALTED-SHA512'].string = \
341
+ password_hash.unpack('a2'*(password_hash.size/2)).collect { |i| i.hex.chr }.join
342
+
343
+ # Finally, we can convert the nested plist back to binary, embed it
344
+ # into the user's plist, and convert the resultant plist back to
345
+ # a binary plist.
346
+ changed_plist = convert_xml_to_binary(converted_hash_plist)
347
+ users_plist['ShadowHashData'][0].string = changed_plist
348
+ Plist::Emit.save_plist(users_plist, "#{@@users_plist_dir}/#{resource_name}.plist")
349
+ plutil('-convert', 'binary1', "#{@@users_plist_dir}/#{resource_name}.plist")
350
+ end
351
+ end
352
+ end
353
+
354
+ def self.get_password(guid, username)
355
+ # Use Puppet::Util::Package.versioncmp() to catch the scenario where a
356
+ # version '10.10' would be < '10.7' with simple string comparison. This
357
+ # if-statement only executes if the current version is less-than 10.7
358
+ if (Puppet::Util::Package.versioncmp(get_macosx_version_major, '10.7') == -1)
359
+ password_hash = nil
360
+ password_hash_file = "#{@@password_hash_dir}/#{guid}"
361
+ if File.exists?(password_hash_file) and File.file?(password_hash_file)
362
+ fail("Could not read password hash file at #{password_hash_file}") if not File.readable?(password_hash_file)
363
+ f = File.new(password_hash_file)
364
+ password_hash = f.read
365
+ f.close
366
+ end
367
+ password_hash
368
+ else
369
+ if File.exists?("#{@@users_plist_dir}/#{username}.plist")
370
+ # If a plist exists in /var/db/dslocal/nodes/Default/users, we will
371
+ # extract the binary plist from the 'ShadowHashData' key, decode the
372
+ # salted-SHA512 password hash, and then return it.
373
+ users_plist = Plist::parse_xml(plutil('-convert', 'xml1', '-o', '/dev/stdout', "#{@@users_plist_dir}/#{username}.plist"))
374
+ if users_plist['ShadowHashData']
375
+ # users_plist['ShadowHashData'][0].string is actually a binary plist
376
+ # that's nested INSIDE the user's plist (which itself is a binary
377
+ # plist).
378
+ password_hash_plist = users_plist['ShadowHashData'][0].string
379
+ converted_hash_plist = convert_binary_to_xml(password_hash_plist)
380
+
381
+ # converted_hash_plist['SALTED-SHA512'].string is a Base64 encoded
382
+ # string. The password_hash provided as a resource attribute is a
383
+ # hex value. We need to convert the Base64 encoded string to a
384
+ # hex value and provide it back to Puppet.
385
+ password_hash = converted_hash_plist['SALTED-SHA512'].string.unpack("H*")[0]
386
+ password_hash
387
+ end
388
+ end
389
+ end
390
+ end
391
+
392
+ # This method will accept a hash that has been returned from Plist::parse_xml
393
+ # and convert it to a binary plist (string value).
394
+ def self.convert_xml_to_binary(plist_data)
395
+ Puppet.debug('Converting XML plist to binary')
396
+ Puppet.debug('Executing: \'plutil -convert binary1 -o - -\'')
397
+ IO.popen('plutil -convert binary1 -o - -', mode='r+') do |io|
398
+ io.write plist_data.to_plist
399
+ io.close_write
400
+ @converted_plist = io.read
401
+ end
402
+ @converted_plist
403
+ end
404
+
405
+ # This method will accept a binary plist (as a string) and convert it to a
406
+ # hash via Plist::parse_xml.
407
+ def self.convert_binary_to_xml(plist_data)
408
+ Puppet.debug('Converting binary plist to XML')
409
+ Puppet.debug('Executing: \'plutil -convert xml1 -o - -\'')
410
+ IO.popen('plutil -convert xml1 -o - -', mode='r+') do |io|
411
+ io.write plist_data
412
+ io.close_write
413
+ @converted_plist = io.read
414
+ end
415
+ Puppet.debug('Converting XML values to a hash.')
416
+ @plist_hash = Plist::parse_xml(@converted_plist)
417
+ @plist_hash
418
+ end
419
+
420
+ # Unlike most other *nixes, OS X doesn't provide built in functionality
421
+ # for automatically assigning uids and gids to accounts, so we set up these
422
+ # methods for consumption by functionality like --mkusers
423
+ # By default we restrict to a reasonably sane range for system accounts
424
+ def self.next_system_id(id_type, min_id=20)
425
+ dscl_args = ['.', '-list']
426
+ if id_type == 'uid'
427
+ dscl_args << '/Users' << 'uid'
428
+ elsif id_type == 'gid'
429
+ dscl_args << '/Groups' << 'gid'
430
+ else
431
+ fail("Invalid id_type #{id_type}. Only 'uid' and 'gid' supported")
432
+ end
433
+ dscl_out = dscl(dscl_args)
434
+ # We're ok with throwing away negative uids here.
435
+ ids = dscl_out.split.compact.collect { |l| l.to_i if l.match(/^\d+$/) }
436
+ ids.compact!.sort! { |a,b| a.to_f <=> b.to_f }
437
+ # We're just looking for an unused id in our sorted array.
438
+ ids.each_index do |i|
439
+ next_id = ids[i] + 1
440
+ return next_id if ids[i+1] != next_id and next_id >= min_id
441
+ end
442
+ end
443
+
444
+
445
+ def ensure=(ensure_value)
446
+ super
447
+ # We need to loop over all valid properties for the type we're
448
+ # managing and call the method which sets that property value
449
+ # dscl can't create everything at once unfortunately.
450
+ if ensure_value == :present
451
+ @resource.class.validproperties.each do |name|
452
+ next if name == :ensure
453
+ # LAK: We use property.sync here rather than directly calling
454
+ # the settor method because the properties might do some kind
455
+ # of conversion. In particular, the user gid property might
456
+ # have a string and need to convert it to a number
457
+ if @resource.should(name)
458
+ @resource.property(name).sync
459
+ elsif value = autogen(name)
460
+ self.send(name.to_s + "=", value)
461
+ else
462
+ next
463
+ end
464
+ end
465
+ end
466
+ end
467
+
468
+ def password=(passphrase)
469
+ exec_arg_vector = self.class.get_exec_preamble("-read", @resource.name)
470
+ exec_arg_vector << @@ns_to_ds_attribute_map[:guid]
471
+ begin
472
+ guid_output = execute(exec_arg_vector)
473
+ guid_plist = Plist.parse_xml(guid_output)
474
+ # Although GeneratedUID like all DirectoryService values can be multi-valued
475
+ # according to the schema, in practice user accounts cannot have multiple UUIDs
476
+ # otherwise Bad Things Happen, so we just deal with the first value.
477
+ guid = guid_plist["dsAttrTypeStandard:#{@@ns_to_ds_attribute_map[:guid]}"][0]
478
+ self.class.set_password(@resource.name, guid, passphrase)
479
+ rescue Puppet::ExecutionFailure => detail
480
+ fail("Could not set #{param} on #{@resource.class.name}[#{@resource.name}]: #{detail}")
481
+ end
482
+ end
483
+
484
+ # NBK: we override @parent.set as we need to execute a series of commands
485
+ # to deal with array values, rather than the single command nameservice.rb
486
+ # expects to be returned by modifycmd. Thus we don't bother defining modifycmd.
487
+
488
+ def set(param, value)
489
+ self.class.validate(param, value)
490
+ current_members = @property_value_cache_hash[:members]
491
+ if param == :members
492
+ # If we are meant to be authoritative for the group membership
493
+ # then remove all existing members who haven't been specified
494
+ # in the manifest.
495
+ remove_unwanted_members(current_members, value) if @resource[:auth_membership] and not current_members.nil?
496
+
497
+ # if they're not a member, make them one.
498
+ add_members(current_members, value)
499
+ else
500
+ exec_arg_vector = self.class.get_exec_preamble("-create", @resource[:name])
501
+ # JJM: The following line just maps the NS name to the DS name
502
+ # e.g. { :uid => 'UniqueID' }
503
+ exec_arg_vector << @@ns_to_ds_attribute_map[param.intern]
504
+ # JJM: The following line sends the actual value to set the property to
505
+ exec_arg_vector << value.to_s
506
+ begin
507
+ execute(exec_arg_vector)
508
+ rescue Puppet::ExecutionFailure => detail
509
+ fail("Could not set #{param} on #{@resource.class.name}[#{@resource.name}]: #{detail}")
510
+ end
511
+ end
512
+ end
513
+
514
+ # NBK: we override @parent.create as we need to execute a series of commands
515
+ # to create objects with dscl, rather than the single command nameservice.rb
516
+ # expects to be returned by addcmd. Thus we don't bother defining addcmd.
517
+ def create
518
+ if exists?
519
+ info "already exists"
520
+ return nil
521
+ end
522
+
523
+ # NBK: First we create the object with a known guid so we can set the contents
524
+ # of the password hash if required
525
+ # Shelling out sucks, but for a single use case it doesn't seem worth
526
+ # requiring people install a UUID library that doesn't come with the system.
527
+ # This should be revisited if Puppet starts managing UUIDs for other platform
528
+ # user records.
529
+ guid = %x{/usr/bin/uuidgen}.chomp
530
+
531
+ exec_arg_vector = self.class.get_exec_preamble("-create", @resource[:name])
532
+ exec_arg_vector << @@ns_to_ds_attribute_map[:guid] << guid
533
+ begin
534
+ execute(exec_arg_vector)
535
+ rescue Puppet::ExecutionFailure => detail
536
+ fail("Could not set GeneratedUID for #{@resource.class.name} #{@resource.name}: #{detail}")
537
+ end
538
+
539
+ if value = @resource.should(:password) and value != ""
540
+ self.class.set_password(@resource[:name], guid, value)
541
+ end
542
+
543
+ # Now we create all the standard properties
544
+ Puppet::Type.type(@resource.class.name).validproperties.each do |property|
545
+ next if property == :ensure
546
+ value = @resource.should(property)
547
+ if property == :gid and value.nil?
548
+ value = self.class.next_system_id(id_type='gid')
549
+ end
550
+ if property == :uid and value.nil?
551
+ value = self.class.next_system_id(id_type='uid')
552
+ end
553
+ if value != "" and not value.nil?
554
+ if property == :members
555
+ add_members(nil, value)
556
+ else
557
+ exec_arg_vector = self.class.get_exec_preamble("-create", @resource[:name])
558
+ exec_arg_vector << @@ns_to_ds_attribute_map[property.intern]
559
+ next if property == :password # skip setting the password here
560
+ exec_arg_vector << value.to_s
561
+ begin
562
+ execute(exec_arg_vector)
563
+ rescue Puppet::ExecutionFailure => detail
564
+ fail("Could not create #{@resource.class.name} #{@resource.name}: #{detail}")
565
+ end
566
+ end
567
+ end
568
+ end
569
+ end
570
+
571
+ def remove_unwanted_members(current_members, new_members)
572
+ current_members.each do |member|
573
+ if not new_members.flatten.include?(member)
574
+ cmd = [:dseditgroup, "-o", "edit", "-n", ".", "-d", member, @resource[:name]]
575
+ begin
576
+ execute(cmd)
577
+ rescue Puppet::ExecutionFailure => detail
578
+ # TODO: We're falling back to removing the member using dscl due to rdar://8481241
579
+ # This bug causes dseditgroup to fail to remove a member if that member doesn't exist
580
+ cmd = [:dscl, ".", "-delete", "/Groups/#{@resource.name}", "GroupMembership", member]
581
+ begin
582
+ execute(cmd)
583
+ rescue Puppet::ExecutionFailure => detail
584
+ fail("Could not remove #{member} from group: #{@resource.name}, #{detail}")
585
+ end
586
+ end
587
+ end
588
+ end
589
+ end
590
+
591
+ def add_members(current_members, new_members)
592
+ new_members.flatten.each do |new_member|
593
+ if current_members.nil? or not current_members.include?(new_member)
594
+ cmd = [:dseditgroup, "-o", "edit", "-n", ".", "-a", new_member, @resource[:name]]
595
+ begin
596
+ execute(cmd)
597
+ rescue Puppet::ExecutionFailure => detail
598
+ fail("Could not add #{new_member} to group: #{@resource.name}, #{detail}")
599
+ end
600
+ end
601
+ end
602
+ end
603
+
604
+ def deletecmd
605
+ # JJM: Like addcmd, only called when deleting the object itself
606
+ # Note, this isn't used to delete properties of the object,
607
+ # at least that's how I understand it...
608
+ self.class.get_exec_preamble("-delete", @resource[:name])
609
+ end
610
+
611
+ def getinfo(refresh = false)
612
+ # JJM 2007-07-24:
613
+ # Override the getinfo method, which is also defined in nameservice.rb
614
+ # This method returns and sets @infohash
615
+ # I'm not re-factoring the name "getinfo" because this method will be
616
+ # most likely called by nameservice.rb, which I didn't write.
617
+ if refresh or (! defined?(@property_value_cache_hash) or ! @property_value_cache_hash)
618
+ # JJM 2007-07-24: OK, there's a bit of magic that's about to
619
+ # happen... Let's see how strong my grip has become... =)
620
+ #
621
+ # self is a provider instance of some Puppet::Type, like
622
+ # Puppet::Type::User::ProviderDirectoryservice for the case of the
623
+ # user type and this provider.
624
+ #
625
+ # self.class looks like "user provider directoryservice", if that
626
+ # helps you ...
627
+ #
628
+ # self.class.resource_type is a reference to the Puppet::Type class,
629
+ # probably Puppet::Type::User or Puppet::Type::Group, etc...
630
+ #
631
+ # self.class.resource_type.validproperties is a class method,
632
+ # returning an Array of the valid properties of that specific
633
+ # Puppet::Type.
634
+ #
635
+ # So... something like [:comment, :home, :password, :shell, :uid,
636
+ # :groups, :ensure, :gid]
637
+ #
638
+ # Ultimately, we add :name to the list, delete :ensure from the
639
+ # list, then report on the remaining list. Pretty whacky, ehh?
640
+ type_properties = [:name] + self.class.resource_type.validproperties
641
+ type_properties.delete(:ensure) if type_properties.include? :ensure
642
+ type_properties << :guid # append GeneratedUID so we just get the report here
643
+ @property_value_cache_hash = self.class.single_report(@resource[:name], *type_properties)
644
+ [:uid, :gid].each do |param|
645
+ @property_value_cache_hash[param] = @property_value_cache_hash[param].to_i if @property_value_cache_hash and @property_value_cache_hash.include?(param)
646
+ end
647
+ end
648
+ @property_value_cache_hash
649
+ end
650
+ end
651
+ end
652
+
@@ -0,0 +1,33 @@
1
+ require 'puppet/provider/nameservice'
2
+
3
+ class Puppet::Provider::NameService
4
+ class ObjectAdd < Puppet::Provider::NameService
5
+ def deletecmd
6
+ [command(:delete), @resource[:name]]
7
+ end
8
+
9
+ # Determine the flag to pass to our command.
10
+ def flag(name)
11
+ name = name.intern if name.is_a? String
12
+ self.class.option(name, :flag) || "-" + name.to_s[0,1]
13
+ end
14
+
15
+ def modifycmd(param, value)
16
+ cmd = [command(param.to_s =~ /password_.+_age/ ? :password : :modify)]
17
+ cmd << flag(param) << value
18
+ if @resource.allowdupe? && ((param == :uid) || (param == :gid and self.class.name == :groupadd))
19
+ cmd << "-o"
20
+ end
21
+ cmd << @resource[:name]
22
+
23
+ cmd
24
+ end
25
+
26
+ def posixmethod(name)
27
+ name = name.intern if name.is_a? String
28
+ method = self.class.option(name, :method) || name
29
+
30
+ method
31
+ end
32
+ end
33
+ end