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,1979 @@
1
+ require 'puppet'
2
+ require 'puppet/util/log'
3
+ require 'puppet/util/metric'
4
+ require 'puppet/property'
5
+ require 'puppet/parameter'
6
+ require 'puppet/util'
7
+ require 'puppet/util/autoload'
8
+ require 'puppet/metatype/manager'
9
+ require 'puppet/util/errors'
10
+ require 'puppet/util/log_paths'
11
+ require 'puppet/util/logging'
12
+ require 'puppet/util/tagging'
13
+
14
+ # see the bottom of the file for the rest of the inclusions
15
+
16
+ module Puppet
17
+ class Type
18
+ include Puppet::Util
19
+ include Puppet::Util::Errors
20
+ include Puppet::Util::LogPaths
21
+ include Puppet::Util::Logging
22
+ include Puppet::Util::Tagging
23
+
24
+ ###############################
25
+ # Comparing type instances.
26
+ include Comparable
27
+ def <=>(other)
28
+ # We only order against other types, not arbitrary objects.
29
+ return nil unless other.is_a? Puppet::Type
30
+ # Our natural order is based on the reference name we use when comparing
31
+ # against other type instances.
32
+ self.ref <=> other.ref
33
+ end
34
+
35
+ ###############################
36
+ # Code related to resource type attributes.
37
+ class << self
38
+ include Puppet::Util::ClassGen
39
+ include Puppet::Util::Warnings
40
+ attr_reader :properties
41
+ end
42
+
43
+ def self.states
44
+ warnonce "The states method is deprecated; use properties"
45
+ properties
46
+ end
47
+
48
+ # All parameters, in the appropriate order. The key_attributes come first, then
49
+ # the provider, then the properties, and finally the params and metaparams
50
+ # in the order they were specified in the files.
51
+ def self.allattrs
52
+ key_attributes | (parameters & [:provider]) | properties.collect { |property| property.name } | parameters | metaparams
53
+ end
54
+
55
+ # Retrieve an attribute alias, if there is one.
56
+ def self.attr_alias(param)
57
+ # Intern again, because this might be called by someone who doesn't
58
+ # understand the calling convention and all.
59
+ @attr_aliases[param.intern]
60
+ end
61
+
62
+ # Create an alias to an existing attribute. This will cause the aliased
63
+ # attribute to be valid when setting and retrieving values on the instance.
64
+ def self.set_attr_alias(hash)
65
+ hash.each do |new, old|
66
+ @attr_aliases[new.intern] = old.intern
67
+ end
68
+ end
69
+
70
+ # Find the class associated with any given attribute.
71
+ def self.attrclass(name)
72
+ @attrclasses ||= {}
73
+
74
+ # We cache the value, since this method gets called such a huge number
75
+ # of times (as in, hundreds of thousands in a given run).
76
+ unless @attrclasses.include?(name)
77
+ @attrclasses[name] = case self.attrtype(name)
78
+ when :property; @validproperties[name]
79
+ when :meta; @@metaparamhash[name]
80
+ when :param; @paramhash[name]
81
+ end
82
+ end
83
+ @attrclasses[name]
84
+ end
85
+
86
+ # What type of parameter are we dealing with? Cache the results, because
87
+ # this method gets called so many times.
88
+ def self.attrtype(attr)
89
+ @attrtypes ||= {}
90
+ unless @attrtypes.include?(attr)
91
+ @attrtypes[attr] = case
92
+ when @validproperties.include?(attr); :property
93
+ when @paramhash.include?(attr); :param
94
+ when @@metaparamhash.include?(attr); :meta
95
+ end
96
+ end
97
+
98
+ @attrtypes[attr]
99
+ end
100
+
101
+ def self.eachmetaparam
102
+ @@metaparams.each { |p| yield p.name }
103
+ end
104
+
105
+ # Create the 'ensure' class. This is a separate method so other types
106
+ # can easily call it and create their own 'ensure' values.
107
+ def self.ensurable(&block)
108
+ if block_given?
109
+ self.newproperty(:ensure, :parent => Puppet::Property::Ensure, &block)
110
+ else
111
+ self.newproperty(:ensure, :parent => Puppet::Property::Ensure) do
112
+ self.defaultvalues
113
+ end
114
+ end
115
+ end
116
+
117
+ # Should we add the 'ensure' property to this class?
118
+ def self.ensurable?
119
+ # If the class has all three of these methods defined, then it's
120
+ # ensurable.
121
+ [:exists?, :create, :destroy].all? { |method|
122
+ self.public_method_defined?(method)
123
+ }
124
+ end
125
+
126
+ # These `apply_to` methods are horrible. They should really be implemented
127
+ # as part of the usual system of constraints that apply to a type and
128
+ # provider pair, but were implemented as a separate shadow system.
129
+ #
130
+ # We should rip them out in favour of a real constraint pattern around the
131
+ # target device - whatever that looks like - and not have this additional
132
+ # magic here. --daniel 2012-03-08
133
+ def self.apply_to_device
134
+ @apply_to = :device
135
+ end
136
+
137
+ def self.apply_to_host
138
+ @apply_to = :host
139
+ end
140
+
141
+ def self.apply_to_all
142
+ @apply_to = :both
143
+ end
144
+
145
+ def self.apply_to
146
+ @apply_to ||= :host
147
+ end
148
+
149
+ def self.can_apply_to(target)
150
+ [ target == :device ? :device : :host, :both ].include?(apply_to)
151
+ end
152
+
153
+ # Deal with any options passed into parameters.
154
+ def self.handle_param_options(name, options)
155
+ # If it's a boolean parameter, create a method to test the value easily
156
+ if options[:boolean]
157
+ define_method(name.to_s + "?") do
158
+ val = self[name]
159
+ if val == :true or val == true
160
+ return true
161
+ end
162
+ end
163
+ end
164
+ end
165
+
166
+ # Is the parameter in question a meta-parameter?
167
+ def self.metaparam?(param)
168
+ @@metaparamhash.include?(param.intern)
169
+ end
170
+
171
+ # Find the metaparameter class associated with a given metaparameter name.
172
+ # Must accept a `nil` name, and return nil.
173
+ def self.metaparamclass(name)
174
+ return nil if name.nil?
175
+ @@metaparamhash[name.intern]
176
+ end
177
+
178
+ def self.metaparams
179
+ @@metaparams.collect { |param| param.name }
180
+ end
181
+
182
+ def self.metaparamdoc(metaparam)
183
+ @@metaparamhash[metaparam].doc
184
+ end
185
+
186
+ # Create a new metaparam. Requires a block and a name, stores it in the
187
+ # @parameters array, and does some basic checking on it.
188
+ def self.newmetaparam(name, options = {}, &block)
189
+ @@metaparams ||= []
190
+ @@metaparamhash ||= {}
191
+ name = name.intern
192
+
193
+ param = genclass(
194
+ name,
195
+ :parent => options[:parent] || Puppet::Parameter,
196
+ :prefix => "MetaParam",
197
+ :hash => @@metaparamhash,
198
+ :array => @@metaparams,
199
+ :attributes => options[:attributes],
200
+ &block
201
+ )
202
+
203
+ # Grr.
204
+ param.required_features = options[:required_features] if options[:required_features]
205
+
206
+ handle_param_options(name, options)
207
+
208
+ param.metaparam = true
209
+
210
+ param
211
+ end
212
+
213
+ def self.key_attribute_parameters
214
+ @key_attribute_parameters ||= (
215
+ params = @parameters.find_all { |param|
216
+ param.isnamevar? or param.name == :name
217
+ }
218
+ )
219
+ end
220
+
221
+ def self.key_attributes
222
+ # This is a cache miss around 0.05 percent of the time. --daniel 2012-07-17
223
+ @key_attributes_cache ||= key_attribute_parameters.collect { |p| p.name }
224
+ end
225
+
226
+ def self.title_patterns
227
+ case key_attributes.length
228
+ when 0; []
229
+ when 1;
230
+ [ [ /(.*)/m, [ [key_attributes.first] ] ] ]
231
+ else
232
+ raise Puppet::DevError,"you must specify title patterns when there are two or more key attributes"
233
+ end
234
+ end
235
+
236
+ def uniqueness_key
237
+ self.class.key_attributes.sort_by { |attribute_name| attribute_name.to_s }.map{ |attribute_name| self[attribute_name] }
238
+ end
239
+
240
+ # Create a new parameter. Requires a block and a name, stores it in the
241
+ # @parameters array, and does some basic checking on it.
242
+ def self.newparam(name, options = {}, &block)
243
+ options[:attributes] ||= {}
244
+
245
+ param = genclass(
246
+ name,
247
+ :parent => options[:parent] || Puppet::Parameter,
248
+ :attributes => options[:attributes],
249
+ :block => block,
250
+ :prefix => "Parameter",
251
+ :array => @parameters,
252
+ :hash => @paramhash
253
+ )
254
+
255
+ handle_param_options(name, options)
256
+
257
+ # Grr.
258
+ param.required_features = options[:required_features] if options[:required_features]
259
+
260
+ param.isnamevar if options[:namevar]
261
+
262
+ param
263
+ end
264
+
265
+ def self.newstate(name, options = {}, &block)
266
+ Puppet.warning "newstate() has been deprecrated; use newproperty(#{name})"
267
+ newproperty(name, options, &block)
268
+ end
269
+
270
+ # Create a new property. The first parameter must be the name of the property;
271
+ # this is how users will refer to the property when creating new instances.
272
+ # The second parameter is a hash of options; the options are:
273
+ # * <tt>:parent</tt>: The parent class for the property. Defaults to Puppet::Property.
274
+ # * <tt>:retrieve</tt>: The method to call on the provider or @parent object (if
275
+ # the provider is not set) to retrieve the current value.
276
+ def self.newproperty(name, options = {}, &block)
277
+ name = name.intern
278
+
279
+ # This is here for types that might still have the old method of defining
280
+ # a parent class.
281
+ unless options.is_a? Hash
282
+ raise Puppet::DevError,
283
+ "Options must be a hash, not #{options.inspect}"
284
+ end
285
+
286
+ raise Puppet::DevError, "Class #{self.name} already has a property named #{name}" if @validproperties.include?(name)
287
+
288
+ if parent = options[:parent]
289
+ options.delete(:parent)
290
+ else
291
+ parent = Puppet::Property
292
+ end
293
+
294
+ # We have to create our own, new block here because we want to define
295
+ # an initial :retrieve method, if told to, and then eval the passed
296
+ # block if available.
297
+ prop = genclass(name, :parent => parent, :hash => @validproperties, :attributes => options) do
298
+ # If they've passed a retrieve method, then override the retrieve
299
+ # method on the class.
300
+ if options[:retrieve]
301
+ define_method(:retrieve) do
302
+ provider.send(options[:retrieve])
303
+ end
304
+ end
305
+
306
+ class_eval(&block) if block
307
+ end
308
+
309
+ # If it's the 'ensure' property, always put it first.
310
+ if name == :ensure
311
+ @properties.unshift prop
312
+ else
313
+ @properties << prop
314
+ end
315
+
316
+ prop
317
+ end
318
+
319
+ def self.paramdoc(param)
320
+ @paramhash[param].doc
321
+ end
322
+
323
+ # Return the parameter names
324
+ def self.parameters
325
+ return [] unless defined?(@parameters)
326
+ @parameters.collect { |klass| klass.name }
327
+ end
328
+
329
+ # Find the parameter class associated with a given parameter name.
330
+ def self.paramclass(name)
331
+ @paramhash[name]
332
+ end
333
+
334
+ # Return the property class associated with a name
335
+ def self.propertybyname(name)
336
+ @validproperties[name]
337
+ end
338
+
339
+ def self.validattr?(name)
340
+ name = name.intern
341
+ return true if name == :name
342
+ @validattrs ||= {}
343
+
344
+ unless @validattrs.include?(name)
345
+ @validattrs[name] = !!(self.validproperty?(name) or self.validparameter?(name) or self.metaparam?(name))
346
+ end
347
+
348
+ @validattrs[name]
349
+ end
350
+
351
+ # does the name reflect a valid property?
352
+ def self.validproperty?(name)
353
+ name = name.intern
354
+ @validproperties.include?(name) && @validproperties[name]
355
+ end
356
+
357
+ # Return the list of validproperties
358
+ def self.validproperties
359
+ return {} unless defined?(@parameters)
360
+
361
+ @validproperties.keys
362
+ end
363
+
364
+ # does the name reflect a valid parameter?
365
+ def self.validparameter?(name)
366
+ raise Puppet::DevError, "Class #{self} has not defined parameters" unless defined?(@parameters)
367
+ !!(@paramhash.include?(name) or @@metaparamhash.include?(name))
368
+ end
369
+
370
+ # This is a forward-compatibility method - it's the validity interface we'll use in Puppet::Resource.
371
+ def self.valid_parameter?(name)
372
+ validattr?(name)
373
+ end
374
+
375
+ # Return either the attribute alias or the attribute.
376
+ def attr_alias(name)
377
+ name = name.intern
378
+ if synonym = self.class.attr_alias(name)
379
+ return synonym
380
+ else
381
+ return name
382
+ end
383
+ end
384
+
385
+ # Are we deleting this resource?
386
+ def deleting?
387
+ obj = @parameters[:ensure] and obj.should == :absent
388
+ end
389
+
390
+ # Create a new property if it is valid but doesn't exist
391
+ # Returns: true if a new parameter was added, false otherwise
392
+ def add_property_parameter(prop_name)
393
+ if self.class.validproperty?(prop_name) && !@parameters[prop_name]
394
+ self.newattr(prop_name)
395
+ return true
396
+ end
397
+ false
398
+ end
399
+
400
+ #
401
+ # The name_var is the key_attribute in the case that there is only one.
402
+ #
403
+ def name_var
404
+ key_attributes = self.class.key_attributes
405
+ (key_attributes.length == 1) && key_attributes.first
406
+ end
407
+
408
+ # abstract accessing parameters and properties, and normalize
409
+ # access to always be symbols, not strings
410
+ # This returns a value, not an object. It returns the 'is'
411
+ # value, but you can also specifically return 'is' and 'should'
412
+ # values using 'object.is(:property)' or 'object.should(:property)'.
413
+ def [](name)
414
+ name = attr_alias(name)
415
+
416
+ fail("Invalid parameter #{name}(#{name.inspect})") unless self.class.validattr?(name)
417
+
418
+ if name == :name && nv = name_var
419
+ name = nv
420
+ end
421
+
422
+ if obj = @parameters[name]
423
+ # Note that if this is a property, then the value is the "should" value,
424
+ # not the current value.
425
+ obj.value
426
+ else
427
+ return nil
428
+ end
429
+ end
430
+
431
+ # Abstract setting parameters and properties, and normalize
432
+ # access to always be symbols, not strings. This sets the 'should'
433
+ # value on properties, and otherwise just sets the appropriate parameter.
434
+ def []=(name,value)
435
+ name = attr_alias(name)
436
+
437
+ fail("Invalid parameter #{name}") unless self.class.validattr?(name)
438
+
439
+ if name == :name && nv = name_var
440
+ name = nv
441
+ end
442
+ raise Puppet::Error.new("Got nil value for #{name}") if value.nil?
443
+
444
+ property = self.newattr(name)
445
+
446
+ if property
447
+ begin
448
+ # make sure the parameter doesn't have any errors
449
+ property.value = value
450
+ rescue => detail
451
+ error = Puppet::Error.new("Parameter #{name} failed on #{ref}: #{detail}")
452
+ error.set_backtrace(detail.backtrace)
453
+ raise error
454
+ end
455
+ end
456
+
457
+ nil
458
+ end
459
+
460
+ # remove a property from the object; useful in testing or in cleanup
461
+ # when an error has been encountered
462
+ def delete(attr)
463
+ attr = attr.intern
464
+ if @parameters.has_key?(attr)
465
+ @parameters.delete(attr)
466
+ else
467
+ raise Puppet::DevError.new("Undefined attribute '#{attr}' in #{self}")
468
+ end
469
+ end
470
+
471
+ # iterate across the existing properties
472
+ def eachproperty
473
+ # properties is a private method
474
+ properties.each { |property|
475
+ yield property
476
+ }
477
+ end
478
+
479
+ # Create a transaction event. Called by Transaction or by
480
+ # a property.
481
+ def event(options = {})
482
+ Puppet::Transaction::Event.new({:resource => self, :file => file, :line => line, :tags => tags}.merge(options))
483
+ end
484
+
485
+ # retrieve the 'should' value for a specified property
486
+ def should(name)
487
+ name = attr_alias(name)
488
+ (prop = @parameters[name] and prop.is_a?(Puppet::Property)) ? prop.should : nil
489
+ end
490
+
491
+ # Create the actual attribute instance. Requires either the attribute
492
+ # name or class as the first argument, then an optional hash of
493
+ # attributes to set during initialization.
494
+ def newattr(name)
495
+ if name.is_a?(Class)
496
+ klass = name
497
+ name = klass.name
498
+ end
499
+
500
+ unless klass = self.class.attrclass(name)
501
+ raise Puppet::Error, "Resource type #{self.class.name} does not support parameter #{name}"
502
+ end
503
+
504
+ if provider and ! provider.class.supports_parameter?(klass)
505
+ missing = klass.required_features.find_all { |f| ! provider.class.feature?(f) }
506
+ debug "Provider %s does not support features %s; not managing attribute %s" % [provider.class.name, missing.join(", "), name]
507
+ return nil
508
+ end
509
+
510
+ return @parameters[name] if @parameters.include?(name)
511
+
512
+ @parameters[name] = klass.new(:resource => self)
513
+ end
514
+
515
+ # return the value of a parameter
516
+ def parameter(name)
517
+ @parameters[name.to_sym]
518
+ end
519
+
520
+ def parameters
521
+ @parameters.dup
522
+ end
523
+
524
+ # Is the named property defined?
525
+ def propertydefined?(name)
526
+ name = name.intern unless name.is_a? Symbol
527
+ @parameters.include?(name)
528
+ end
529
+
530
+ # Return an actual property instance by name; to return the value, use 'resource[param]'
531
+ # LAK:NOTE(20081028) Since the 'parameter' method is now a superset of this method,
532
+ # this one should probably go away at some point.
533
+ def property(name)
534
+ (obj = @parameters[name.intern] and obj.is_a?(Puppet::Property)) ? obj : nil
535
+ end
536
+
537
+ # For any parameters or properties that have defaults and have not yet been
538
+ # set, set them now. This method can be handed a list of attributes,
539
+ # and if so it will only set defaults for those attributes.
540
+ def set_default(attr)
541
+ return unless klass = self.class.attrclass(attr)
542
+ return unless klass.method_defined?(:default)
543
+ return if @parameters.include?(klass.name)
544
+
545
+ return unless parameter = newattr(klass.name)
546
+
547
+ if value = parameter.default and ! value.nil?
548
+ parameter.value = value
549
+ else
550
+ @parameters.delete(parameter.name)
551
+ end
552
+ end
553
+
554
+ # Convert our object to a hash. This just includes properties.
555
+ def to_hash
556
+ rethash = {}
557
+
558
+ @parameters.each do |name, obj|
559
+ rethash[name] = obj.value
560
+ end
561
+
562
+ rethash
563
+ end
564
+
565
+ def type
566
+ self.class.name
567
+ end
568
+
569
+ # Return a specific value for an attribute.
570
+ def value(name)
571
+ name = attr_alias(name)
572
+
573
+ (obj = @parameters[name] and obj.respond_to?(:value)) ? obj.value : nil
574
+ end
575
+
576
+ def version
577
+ return 0 unless catalog
578
+ catalog.version
579
+ end
580
+
581
+ # Return all of the property objects, in the order specified in the
582
+ # class.
583
+ def properties
584
+ self.class.properties.collect { |prop| @parameters[prop.name] }.compact
585
+ end
586
+
587
+ # Is this type's name isomorphic with the object? That is, if the
588
+ # name conflicts, does it necessarily mean that the objects conflict?
589
+ # Defaults to true.
590
+ def self.isomorphic?
591
+ if defined?(@isomorphic)
592
+ return @isomorphic
593
+ else
594
+ return true
595
+ end
596
+ end
597
+
598
+ def isomorphic?
599
+ self.class.isomorphic?
600
+ end
601
+
602
+ # is the instance a managed instance? A 'yes' here means that
603
+ # the instance was created from the language, vs. being created
604
+ # in order resolve other questions, such as finding a package
605
+ # in a list
606
+ def managed?
607
+ # Once an object is managed, it always stays managed; but an object
608
+ # that is listed as unmanaged might become managed later in the process,
609
+ # so we have to check that every time
610
+ if @managed
611
+ return @managed
612
+ else
613
+ @managed = false
614
+ properties.each { |property|
615
+ s = property.should
616
+ if s and ! property.class.unmanaged
617
+ @managed = true
618
+ break
619
+ end
620
+ }
621
+ return @managed
622
+ end
623
+ end
624
+
625
+ ###############################
626
+ # Code related to the container behaviour.
627
+
628
+ def depthfirst?
629
+ false
630
+ end
631
+
632
+ # Remove an object. The argument determines whether the object's
633
+ # subscriptions get eliminated, too.
634
+ def remove(rmdeps = true)
635
+ # This is hackish (mmm, cut and paste), but it works for now, and it's
636
+ # better than warnings.
637
+ @parameters.each do |name, obj|
638
+ obj.remove
639
+ end
640
+ @parameters.clear
641
+
642
+ @parent = nil
643
+
644
+ # Remove the reference to the provider.
645
+ if self.provider
646
+ @provider.clear
647
+ @provider = nil
648
+ end
649
+ end
650
+
651
+ ###############################
652
+ # Code related to evaluating the resources.
653
+
654
+ def ancestors
655
+ []
656
+ end
657
+
658
+ # Flush the provider, if it supports it. This is called by the
659
+ # transaction.
660
+ def flush
661
+ self.provider.flush if self.provider and self.provider.respond_to?(:flush)
662
+ end
663
+
664
+ # if all contained objects are in sync, then we're in sync
665
+ # FIXME I don't think this is used on the type instances any more,
666
+ # it's really only used for testing
667
+ def insync?(is)
668
+ insync = true
669
+
670
+ if property = @parameters[:ensure]
671
+ unless is.include? property
672
+ raise Puppet::DevError,
673
+ "The is value is not in the is array for '#{property.name}'"
674
+ end
675
+ ensureis = is[property]
676
+ if property.safe_insync?(ensureis) and property.should == :absent
677
+ return true
678
+ end
679
+ end
680
+
681
+ properties.each { |property|
682
+ unless is.include? property
683
+ raise Puppet::DevError,
684
+ "The is value is not in the is array for '#{property.name}'"
685
+ end
686
+
687
+ propis = is[property]
688
+ unless property.safe_insync?(propis)
689
+ property.debug("Not in sync: #{propis.inspect} vs #{property.should.inspect}")
690
+ insync = false
691
+ #else
692
+ # property.debug("In sync")
693
+ end
694
+ }
695
+
696
+ #self.debug("#{self} sync status is #{insync}")
697
+ insync
698
+ end
699
+
700
+ # retrieve the current value of all contained properties
701
+ def retrieve
702
+ fail "Provider #{provider.class.name} is not functional on this host" if self.provider.is_a?(Puppet::Provider) and ! provider.class.suitable?
703
+
704
+ result = Puppet::Resource.new(type, title)
705
+
706
+ # Provide the name, so we know we'll always refer to a real thing
707
+ result[:name] = self[:name] unless self[:name] == title
708
+
709
+ if ensure_prop = property(:ensure) or (self.class.validattr?(:ensure) and ensure_prop = newattr(:ensure))
710
+ result[:ensure] = ensure_state = ensure_prop.retrieve
711
+ else
712
+ ensure_state = nil
713
+ end
714
+
715
+ properties.each do |property|
716
+ next if property.name == :ensure
717
+ if ensure_state == :absent
718
+ result[property] = :absent
719
+ else
720
+ result[property] = property.retrieve
721
+ end
722
+ end
723
+
724
+ result
725
+ end
726
+
727
+ def retrieve_resource
728
+ resource = retrieve
729
+ resource = Resource.new(type, title, :parameters => resource) if resource.is_a? Hash
730
+ resource
731
+ end
732
+
733
+ # Get a hash of the current properties. Returns a hash with
734
+ # the actual property instance as the key and the current value
735
+ # as the, um, value.
736
+ def currentpropvalues
737
+ # It's important to use the 'properties' method here, as it follows the order
738
+ # in which they're defined in the class. It also guarantees that 'ensure'
739
+ # is the first property, which is important for skipping 'retrieve' on
740
+ # all the properties if the resource is absent.
741
+ ensure_state = false
742
+ return properties.inject({}) do | prophash, property|
743
+ if property.name == :ensure
744
+ ensure_state = property.retrieve
745
+ prophash[property] = ensure_state
746
+ else
747
+ if ensure_state == :absent
748
+ prophash[property] = :absent
749
+ else
750
+ prophash[property] = property.retrieve
751
+ end
752
+ end
753
+ prophash
754
+ end
755
+ end
756
+
757
+ # Are we running in noop mode?
758
+ def noop?
759
+ # If we're not a host_config, we're almost certainly part of
760
+ # Settings, and we want to ignore 'noop'
761
+ return false if catalog and ! catalog.host_config?
762
+
763
+ if defined?(@noop)
764
+ @noop
765
+ else
766
+ Puppet[:noop]
767
+ end
768
+ end
769
+
770
+ def noop
771
+ noop?
772
+ end
773
+
774
+ ###############################
775
+ # Code related to managing resource instances.
776
+ require 'puppet/transportable'
777
+
778
+ # retrieve a named instance of the current type
779
+ def self.[](name)
780
+ raise "Global resource access is deprecated"
781
+ @objects[name] || @aliases[name]
782
+ end
783
+
784
+ # add an instance by name to the class list of instances
785
+ def self.[]=(name,object)
786
+ raise "Global resource storage is deprecated"
787
+ newobj = nil
788
+ if object.is_a?(Puppet::Type)
789
+ newobj = object
790
+ else
791
+ raise Puppet::DevError, "must pass a Puppet::Type object"
792
+ end
793
+
794
+ if exobj = @objects[name] and self.isomorphic?
795
+ msg = "Object '#{newobj.class.name}[#{name}]' already exists"
796
+
797
+ msg += ("in file #{object.file} at line #{object.line}") if exobj.file and exobj.line
798
+ msg += ("and cannot be redefined in file #{object.file} at line #{object.line}") if object.file and object.line
799
+ error = Puppet::Error.new(msg)
800
+ raise error
801
+ else
802
+ #Puppet.info("adding %s of type %s to class list" %
803
+ # [name,object.class])
804
+ @objects[name] = newobj
805
+ end
806
+ end
807
+
808
+ # Create an alias. We keep these in a separate hash so that we don't encounter
809
+ # the objects multiple times when iterating over them.
810
+ def self.alias(name, obj)
811
+ raise "Global resource aliasing is deprecated"
812
+ if @objects.include?(name)
813
+ unless @objects[name] == obj
814
+ raise Puppet::Error.new(
815
+ "Cannot create alias #{name}: object already exists"
816
+ )
817
+ end
818
+ end
819
+
820
+ if @aliases.include?(name)
821
+ unless @aliases[name] == obj
822
+ raise Puppet::Error.new(
823
+ "Object #{@aliases[name].name} already has alias #{name}"
824
+ )
825
+ end
826
+ end
827
+
828
+ @aliases[name] = obj
829
+ end
830
+
831
+ # remove all of the instances of a single type
832
+ def self.clear
833
+ raise "Global resource removal is deprecated"
834
+ if defined?(@objects)
835
+ @objects.each do |name, obj|
836
+ obj.remove(true)
837
+ end
838
+ @objects.clear
839
+ end
840
+ @aliases.clear if defined?(@aliases)
841
+ end
842
+
843
+ # Force users to call this, so that we can merge objects if
844
+ # necessary.
845
+ def self.create(args)
846
+ # LAK:DEP Deprecation notice added 12/17/2008
847
+ Puppet.warning "Puppet::Type.create is deprecated; use Puppet::Type.new"
848
+ new(args)
849
+ end
850
+
851
+ # remove a specified object
852
+ def self.delete(resource)
853
+ raise "Global resource removal is deprecated"
854
+ return unless defined?(@objects)
855
+ @objects.delete(resource.title) if @objects.include?(resource.title)
856
+ @aliases.delete(resource.title) if @aliases.include?(resource.title)
857
+ if @aliases.has_value?(resource)
858
+ names = []
859
+ @aliases.each do |name, otherres|
860
+ if otherres == resource
861
+ names << name
862
+ end
863
+ end
864
+ names.each { |name| @aliases.delete(name) }
865
+ end
866
+ end
867
+
868
+ # iterate across each of the type's instances
869
+ def self.each
870
+ raise "Global resource iteration is deprecated"
871
+ return unless defined?(@objects)
872
+ @objects.each { |name,instance|
873
+ yield instance
874
+ }
875
+ end
876
+
877
+ # does the type have an object with the given name?
878
+ def self.has_key?(name)
879
+ raise "Global resource access is deprecated"
880
+ @objects.has_key?(name)
881
+ end
882
+
883
+ # Retrieve all known instances. Either requires providers or must be overridden.
884
+ def self.instances
885
+ raise Puppet::DevError, "#{self.name} has no providers and has not overridden 'instances'" if provider_hash.empty?
886
+
887
+ # Put the default provider first, then the rest of the suitable providers.
888
+ provider_instances = {}
889
+ providers_by_source.collect do |provider|
890
+ all_properties = self.properties.find_all do |property|
891
+ provider.supports_parameter?(property)
892
+ end.collect do |property|
893
+ property.name
894
+ end
895
+
896
+ provider.instances.collect do |instance|
897
+ # We always want to use the "first" provider instance we find, unless the resource
898
+ # is already managed and has a different provider set
899
+ if other = provider_instances[instance.name]
900
+ Puppet.warning "%s %s found in both %s and %s; skipping the %s version" %
901
+ [self.name.to_s.capitalize, instance.name, other.class.name, instance.class.name, instance.class.name]
902
+ next
903
+ end
904
+ provider_instances[instance.name] = instance
905
+
906
+ result = new(:name => instance.name, :provider => instance)
907
+ properties.each { |name| result.newattr(name) }
908
+ result
909
+ end
910
+ end.flatten.compact
911
+ end
912
+
913
+ # Return a list of one suitable provider per source, with the default provider first.
914
+ def self.providers_by_source
915
+ # Put the default provider first (can be nil), then the rest of the suitable providers.
916
+ sources = []
917
+ [defaultprovider, suitableprovider].flatten.uniq.collect do |provider|
918
+ next if provider.nil?
919
+ next if sources.include?(provider.source)
920
+
921
+ sources << provider.source
922
+ provider
923
+ end.compact
924
+ end
925
+
926
+ # Convert a simple hash into a Resource instance.
927
+ def self.hash2resource(hash)
928
+ hash = hash.inject({}) { |result, ary| result[ary[0].to_sym] = ary[1]; result }
929
+
930
+ title = hash.delete(:title)
931
+ title ||= hash[:name]
932
+ title ||= hash[key_attributes.first] if key_attributes.length == 1
933
+
934
+ raise Puppet::Error, "Title or name must be provided" unless title
935
+
936
+ # Now create our resource.
937
+ resource = Puppet::Resource.new(self.name, title)
938
+ [:catalog].each do |attribute|
939
+ if value = hash[attribute]
940
+ hash.delete(attribute)
941
+ resource.send(attribute.to_s + "=", value)
942
+ end
943
+ end
944
+
945
+ hash.each do |param, value|
946
+ resource[param] = value
947
+ end
948
+ resource
949
+ end
950
+
951
+ # Create the path for logging and such.
952
+ def pathbuilder
953
+ if p = parent
954
+ [p.pathbuilder, self.ref].flatten
955
+ else
956
+ [self.ref]
957
+ end
958
+ end
959
+
960
+ ###############################
961
+ # Add all of the meta parameters.
962
+ newmetaparam(:noop) do
963
+ desc "Boolean flag indicating whether work should actually
964
+ be done."
965
+
966
+ newvalues(:true, :false)
967
+ munge do |value|
968
+ case value
969
+ when true, :true, "true"; @resource.noop = true
970
+ when false, :false, "false"; @resource.noop = false
971
+ end
972
+ end
973
+ end
974
+
975
+ newmetaparam(:schedule) do
976
+ desc "On what schedule the object should be managed. You must create a
977
+ schedule object, and then reference the name of that object to use
978
+ that for your schedule:
979
+
980
+ schedule { 'daily':
981
+ period => daily,
982
+ range => \"2-4\"
983
+ }
984
+
985
+ exec { \"/usr/bin/apt-get update\":
986
+ schedule => 'daily'
987
+ }
988
+
989
+ The creation of the schedule object does not need to appear in the
990
+ configuration before objects that use it."
991
+ end
992
+
993
+ newmetaparam(:audit) do
994
+ desc "Marks a subset of this resource's unmanaged attributes for auditing. Accepts an
995
+ attribute name, an array of attribute names, or `all`.
996
+
997
+ Auditing a resource attribute has two effects: First, whenever a catalog
998
+ is applied with puppet apply or puppet agent, Puppet will check whether
999
+ that attribute of the resource has been modified, comparing its current
1000
+ value to the previous run; any change will be logged alongside any actions
1001
+ performed by Puppet while applying the catalog.
1002
+
1003
+ Secondly, marking a resource attribute for auditing will include that
1004
+ attribute in inspection reports generated by puppet inspect; see the
1005
+ puppet inspect documentation for more details.
1006
+
1007
+ Managed attributes for a resource can also be audited, but note that
1008
+ changes made by Puppet will be logged as additional modifications. (I.e.
1009
+ if a user manually edits a file whose contents are audited and managed,
1010
+ puppet agent's next two runs will both log an audit notice: the first run
1011
+ will log the user's edit and then revert the file to the desired state,
1012
+ and the second run will log the edit made by Puppet.)"
1013
+
1014
+ validate do |list|
1015
+ list = Array(list).collect {|p| p.to_sym}
1016
+ unless list == [:all]
1017
+ list.each do |param|
1018
+ next if @resource.class.validattr?(param)
1019
+ fail "Cannot audit #{param}: not a valid attribute for #{resource}"
1020
+ end
1021
+ end
1022
+ end
1023
+
1024
+ munge do |args|
1025
+ properties_to_audit(args).each do |param|
1026
+ next unless resource.class.validproperty?(param)
1027
+ resource.newattr(param)
1028
+ end
1029
+ end
1030
+
1031
+ def all_properties
1032
+ resource.class.properties.find_all do |property|
1033
+ resource.provider.nil? or resource.provider.class.supports_parameter?(property)
1034
+ end.collect do |property|
1035
+ property.name
1036
+ end
1037
+ end
1038
+
1039
+ def properties_to_audit(list)
1040
+ if !list.kind_of?(Array) && list.to_sym == :all
1041
+ list = all_properties
1042
+ else
1043
+ list = Array(list).collect { |p| p.to_sym }
1044
+ end
1045
+ end
1046
+ end
1047
+
1048
+ newmetaparam(:check) do
1049
+ desc "Audit specified attributes of resources over time, and report if any have changed.
1050
+ This parameter has been deprecated in favor of 'audit'."
1051
+
1052
+ munge do |args|
1053
+ resource.warning "'check' attribute is deprecated; use 'audit' instead"
1054
+ resource[:audit] = args
1055
+ end
1056
+ end
1057
+
1058
+ newmetaparam(:loglevel) do
1059
+ desc "Sets the level that information will be logged.
1060
+ The log levels have the biggest impact when logs are sent to
1061
+ syslog (which is currently the default)."
1062
+ defaultto :notice
1063
+
1064
+ newvalues(*Puppet::Util::Log.levels)
1065
+ newvalues(:verbose)
1066
+
1067
+ munge do |loglevel|
1068
+ val = super(loglevel)
1069
+ if val == :verbose
1070
+ val = :info
1071
+ end
1072
+ val
1073
+ end
1074
+ end
1075
+
1076
+ newmetaparam(:alias) do
1077
+ desc "Creates an alias for the object. Puppet uses this internally when you
1078
+ provide a symbolic title:
1079
+
1080
+ file { 'sshdconfig':
1081
+ path => $operatingsystem ? {
1082
+ solaris => \"/usr/local/etc/ssh/sshd_config\",
1083
+ default => \"/etc/ssh/sshd_config\"
1084
+ },
1085
+ source => \"...\"
1086
+ }
1087
+
1088
+ service { 'sshd':
1089
+ subscribe => File['sshdconfig']
1090
+ }
1091
+
1092
+ When you use this feature, the parser sets `sshdconfig` as the title,
1093
+ and the library sets that as an alias for the file so the dependency
1094
+ lookup in `Service['sshd']` works. You can use this metaparameter yourself,
1095
+ but note that only the library can use these aliases; for instance,
1096
+ the following code will not work:
1097
+
1098
+ file { \"/etc/ssh/sshd_config\":
1099
+ owner => root,
1100
+ group => root,
1101
+ alias => 'sshdconfig'
1102
+ }
1103
+
1104
+ file { 'sshdconfig':
1105
+ mode => 644
1106
+ }
1107
+
1108
+ There's no way here for the Puppet parser to know that these two stanzas
1109
+ should be affecting the same file.
1110
+
1111
+ See the [Language Guide](http://docs.puppetlabs.com/guides/language_guide.html) for more information.
1112
+
1113
+ "
1114
+
1115
+ munge do |aliases|
1116
+ aliases = [aliases] unless aliases.is_a?(Array)
1117
+
1118
+ raise(ArgumentError, "Cannot add aliases without a catalog") unless @resource.catalog
1119
+
1120
+ aliases.each do |other|
1121
+ if obj = @resource.catalog.resource(@resource.class.name, other)
1122
+ unless obj.object_id == @resource.object_id
1123
+ self.fail("#{@resource.title} can not create alias #{other}: object already exists")
1124
+ end
1125
+ next
1126
+ end
1127
+
1128
+ # Newschool, add it to the catalog.
1129
+ @resource.catalog.alias(@resource, other)
1130
+ end
1131
+ end
1132
+ end
1133
+
1134
+ newmetaparam(:tag) do
1135
+ desc "Add the specified tags to the associated resource. While all resources
1136
+ are automatically tagged with as much information as possible
1137
+ (e.g., each class and definition containing the resource), it can
1138
+ be useful to add your own tags to a given resource.
1139
+
1140
+ Multiple tags can be specified as an array:
1141
+
1142
+ file {'/etc/hosts':
1143
+ ensure => file,
1144
+ source => 'puppet:///modules/site/hosts',
1145
+ mode => 0644,
1146
+ tag => ['bootstrap', 'minimumrun', 'mediumrun'],
1147
+ }
1148
+
1149
+ Tags are useful for things like applying a subset of a host's configuration
1150
+ with [the `tags` setting](/references/latest/configuration.html#tags):
1151
+
1152
+ puppet agent --test --tags bootstrap
1153
+
1154
+ This way, you can easily isolate the portion of the configuration you're
1155
+ trying to test."
1156
+
1157
+ munge do |tags|
1158
+ tags = [tags] unless tags.is_a? Array
1159
+
1160
+ tags.each do |tag|
1161
+ @resource.tag(tag)
1162
+ end
1163
+ end
1164
+ end
1165
+
1166
+ class RelationshipMetaparam < Puppet::Parameter
1167
+ class << self
1168
+ attr_accessor :direction, :events, :callback, :subclasses
1169
+ end
1170
+
1171
+ @subclasses = []
1172
+
1173
+ def self.inherited(sub)
1174
+ @subclasses << sub
1175
+ end
1176
+
1177
+ def munge(references)
1178
+ references = [references] unless references.is_a?(Array)
1179
+ references.collect do |ref|
1180
+ if ref.is_a?(Puppet::Resource)
1181
+ ref
1182
+ else
1183
+ Puppet::Resource.new(ref)
1184
+ end
1185
+ end
1186
+ end
1187
+
1188
+ def validate_relationship
1189
+ @value.each do |ref|
1190
+ unless @resource.catalog.resource(ref.to_s)
1191
+ description = self.class.direction == :in ? "dependency" : "dependent"
1192
+ fail "Could not find #{description} #{ref} for #{resource.ref}"
1193
+ end
1194
+ end
1195
+ end
1196
+
1197
+ # Create edges from each of our relationships. :in
1198
+ # relationships are specified by the event-receivers, and :out
1199
+ # relationships are specified by the event generator. This
1200
+ # way 'source' and 'target' are consistent terms in both edges
1201
+ # and events -- that is, an event targets edges whose source matches
1202
+ # the event's source. The direction of the relationship determines
1203
+ # which resource is applied first and which resource is considered
1204
+ # to be the event generator.
1205
+ def to_edges
1206
+ @value.collect do |reference|
1207
+ reference.catalog = resource.catalog
1208
+
1209
+ # Either of the two retrieval attempts could have returned
1210
+ # nil.
1211
+ unless related_resource = reference.resolve
1212
+ self.fail "Could not retrieve dependency '#{reference}' of #{@resource.ref}"
1213
+ end
1214
+
1215
+ # Are we requiring them, or vice versa? See the method docs
1216
+ # for futher info on this.
1217
+ if self.class.direction == :in
1218
+ source = related_resource
1219
+ target = @resource
1220
+ else
1221
+ source = @resource
1222
+ target = related_resource
1223
+ end
1224
+
1225
+ if method = self.class.callback
1226
+ subargs = {
1227
+ :event => self.class.events,
1228
+ :callback => method
1229
+ }
1230
+ self.debug("subscribes to #{related_resource.ref}")
1231
+ else
1232
+ # If there's no callback, there's no point in even adding
1233
+ # a label.
1234
+ subargs = nil
1235
+ self.debug("requires #{related_resource.ref}")
1236
+ end
1237
+
1238
+ rel = Puppet::Relationship.new(source, target, subargs)
1239
+ end
1240
+ end
1241
+ end
1242
+
1243
+ def self.relationship_params
1244
+ RelationshipMetaparam.subclasses
1245
+ end
1246
+
1247
+
1248
+ # Note that the order in which the relationships params is defined
1249
+ # matters. The labelled params (notify and subcribe) must be later,
1250
+ # so that if both params are used, those ones win. It's a hackish
1251
+ # solution, but it works.
1252
+
1253
+ newmetaparam(:require, :parent => RelationshipMetaparam, :attributes => {:direction => :in, :events => :NONE}) do
1254
+ desc "References to one or more objects that this object depends on.
1255
+ This is used purely for guaranteeing that changes to required objects
1256
+ happen before the dependent object. For instance:
1257
+
1258
+ # Create the destination directory before you copy things down
1259
+ file { \"/usr/local/scripts\":
1260
+ ensure => directory
1261
+ }
1262
+
1263
+ file { \"/usr/local/scripts/myscript\":
1264
+ source => \"puppet://server/module/myscript\",
1265
+ mode => 755,
1266
+ require => File[\"/usr/local/scripts\"]
1267
+ }
1268
+
1269
+ Multiple dependencies can be specified by providing a comma-separated list
1270
+ of resources, enclosed in square brackets:
1271
+
1272
+ require => [ File[\"/usr/local\"], File[\"/usr/local/scripts\"] ]
1273
+
1274
+ Note that Puppet will autorequire everything that it can, and
1275
+ there are hooks in place so that it's easy for resources to add new
1276
+ ways to autorequire objects, so if you think Puppet could be
1277
+ smarter here, let us know.
1278
+
1279
+ In fact, the above code was redundant --- Puppet will autorequire
1280
+ any parent directories that are being managed; it will
1281
+ automatically realize that the parent directory should be created
1282
+ before the script is pulled down.
1283
+
1284
+ Currently, exec resources will autorequire their CWD (if it is
1285
+ specified) plus any fully qualified paths that appear in the
1286
+ command. For instance, if you had an `exec` command that ran
1287
+ the `myscript` mentioned above, the above code that pulls the
1288
+ file down would be automatically listed as a requirement to the
1289
+ `exec` code, so that you would always be running againts the
1290
+ most recent version.
1291
+ "
1292
+ end
1293
+
1294
+ newmetaparam(:subscribe, :parent => RelationshipMetaparam, :attributes => {:direction => :in, :events => :ALL_EVENTS, :callback => :refresh}) do
1295
+ desc "References to one or more objects that this object depends on. This
1296
+ metaparameter creates a dependency relationship like **require,**
1297
+ and also causes the dependent object to be refreshed when the
1298
+ subscribed object is changed. For instance:
1299
+
1300
+ class nagios {
1301
+ file { 'nagconf':
1302
+ path => \"/etc/nagios/nagios.conf\"
1303
+ source => \"puppet://server/module/nagios.conf\",
1304
+ }
1305
+ service { 'nagios':
1306
+ ensure => running,
1307
+ subscribe => File['nagconf']
1308
+ }
1309
+ }
1310
+
1311
+ Currently the `exec`, `mount` and `service` types support
1312
+ refreshing.
1313
+ "
1314
+ end
1315
+
1316
+ newmetaparam(:before, :parent => RelationshipMetaparam, :attributes => {:direction => :out, :events => :NONE}) do
1317
+ desc %{References to one or more objects that depend on this object. This
1318
+ parameter is the opposite of **require** --- it guarantees that
1319
+ the specified object is applied later than the specifying object:
1320
+
1321
+ file { "/var/nagios/configuration":
1322
+ source => "...",
1323
+ recurse => true,
1324
+ before => Exec["nagios-rebuid"]
1325
+ }
1326
+
1327
+ exec { "nagios-rebuild":
1328
+ command => "/usr/bin/make",
1329
+ cwd => "/var/nagios/configuration"
1330
+ }
1331
+
1332
+ This will make sure all of the files are up to date before the
1333
+ make command is run.}
1334
+ end
1335
+
1336
+ newmetaparam(:notify, :parent => RelationshipMetaparam, :attributes => {:direction => :out, :events => :ALL_EVENTS, :callback => :refresh}) do
1337
+ desc %{References to one or more objects that depend on this object. This
1338
+ parameter is the opposite of **subscribe** --- it creates a
1339
+ dependency relationship like **before,** and also causes the
1340
+ dependent object(s) to be refreshed when this object is changed. For
1341
+ instance:
1342
+
1343
+ file { "/etc/sshd_config":
1344
+ source => "....",
1345
+ notify => Service['sshd']
1346
+ }
1347
+
1348
+ service { 'sshd':
1349
+ ensure => running
1350
+ }
1351
+
1352
+ This will restart the sshd service if the sshd config file changes.}
1353
+ end
1354
+
1355
+ newmetaparam(:stage) do
1356
+ desc %{Which run stage a given resource should reside in. This just creates
1357
+ a dependency on or from the named milestone. For instance, saying that
1358
+ this is in the 'bootstrap' stage creates a dependency on the 'bootstrap'
1359
+ milestone.
1360
+
1361
+ By default, all classes get directly added to the
1362
+ 'main' stage. You can create new stages as resources:
1363
+
1364
+ stage { ['pre', 'post']: }
1365
+
1366
+ To order stages, use standard relationships:
1367
+
1368
+ stage { 'pre': before => Stage['main'] }
1369
+
1370
+ Or use the new relationship syntax:
1371
+
1372
+ Stage['pre'] -> Stage['main'] -> Stage['post']
1373
+
1374
+ Then use the new class parameters to specify a stage:
1375
+
1376
+ class { 'foo': stage => 'pre' }
1377
+
1378
+ Stages can only be set on classes, not individual resources. This will
1379
+ fail:
1380
+
1381
+ file { '/foo': stage => 'pre', ensure => file }
1382
+ }
1383
+ end
1384
+
1385
+ ###############################
1386
+ # All of the provider plumbing for the resource types.
1387
+ require 'puppet/provider'
1388
+ require 'puppet/util/provider_features'
1389
+
1390
+ # Add the feature handling module.
1391
+ extend Puppet::Util::ProviderFeatures
1392
+
1393
+ attr_reader :provider
1394
+
1395
+ # the Type class attribute accessors
1396
+ class << self
1397
+ attr_accessor :providerloader
1398
+ attr_writer :defaultprovider
1399
+ end
1400
+
1401
+ # Find the default provider.
1402
+ def self.defaultprovider
1403
+ return @defaultprovider if @defaultprovider
1404
+
1405
+ suitable = suitableprovider
1406
+
1407
+ # Find which providers are a default for this system.
1408
+ defaults = suitable.find_all { |provider| provider.default? }
1409
+
1410
+ # If we don't have any default we use suitable providers
1411
+ defaults = suitable if defaults.empty?
1412
+ max = defaults.collect { |provider| provider.specificity }.max
1413
+ defaults = defaults.find_all { |provider| provider.specificity == max }
1414
+
1415
+ if defaults.length > 1
1416
+ Puppet.warning(
1417
+ "Found multiple default providers for #{self.name}: #{defaults.collect { |i| i.name.to_s }.join(", ")}; using #{defaults[0].name}"
1418
+ )
1419
+ end
1420
+
1421
+ @defaultprovider = defaults.shift unless defaults.empty?
1422
+ end
1423
+
1424
+ def self.provider_hash_by_type(type)
1425
+ @provider_hashes ||= {}
1426
+ @provider_hashes[type] ||= {}
1427
+ end
1428
+
1429
+ def self.provider_hash
1430
+ Puppet::Type.provider_hash_by_type(self.name)
1431
+ end
1432
+
1433
+ # Retrieve a provider by name.
1434
+ def self.provider(name)
1435
+ name = name.intern
1436
+
1437
+ # If we don't have it yet, try loading it.
1438
+ @providerloader.load(name) unless provider_hash.has_key?(name)
1439
+ provider_hash[name]
1440
+ end
1441
+
1442
+ # Just list all of the providers.
1443
+ def self.providers
1444
+ provider_hash.keys
1445
+ end
1446
+
1447
+ def self.validprovider?(name)
1448
+ name = name.intern
1449
+
1450
+ (provider_hash.has_key?(name) && provider_hash[name].suitable?)
1451
+ end
1452
+
1453
+ # Create a new provider of a type. This method must be called
1454
+ # directly on the type that it's implementing.
1455
+ def self.provide(name, options = {}, &block)
1456
+ name = name.intern
1457
+
1458
+ if unprovide(name)
1459
+ Puppet.debug "Reloading #{name} #{self.name} provider"
1460
+ end
1461
+
1462
+ parent = if pname = options[:parent]
1463
+ options.delete(:parent)
1464
+ if pname.is_a? Class
1465
+ pname
1466
+ else
1467
+ if provider = self.provider(pname)
1468
+ provider
1469
+ else
1470
+ raise Puppet::DevError,
1471
+ "Could not find parent provider #{pname} of #{name}"
1472
+ end
1473
+ end
1474
+ else
1475
+ Puppet::Provider
1476
+ end
1477
+
1478
+ options[:resource_type] ||= self
1479
+
1480
+ self.providify
1481
+
1482
+ provider = genclass(
1483
+ name,
1484
+ :parent => parent,
1485
+ :hash => provider_hash,
1486
+ :prefix => "Provider",
1487
+ :block => block,
1488
+ :include => feature_module,
1489
+ :extend => feature_module,
1490
+ :attributes => options
1491
+ )
1492
+
1493
+ provider
1494
+ end
1495
+
1496
+ # Make sure we have a :provider parameter defined. Only gets called if there
1497
+ # are providers.
1498
+ def self.providify
1499
+ return if @paramhash.has_key? :provider
1500
+
1501
+ newparam(:provider) do
1502
+ # We're using a hacky way to get the name of our type, since there doesn't
1503
+ # seem to be a correct way to introspect this at the time this code is run.
1504
+ # We expect that the class in which this code is executed will be something
1505
+ # like Puppet::Type::Ssh_authorized_key::ParameterProvider.
1506
+ desc <<-EOT
1507
+ The specific backend to use for this `#{self.to_s.split('::')[2].downcase}`
1508
+ resource. You will seldom need to specify this --- Puppet will usually
1509
+ discover the appropriate provider for your platform.
1510
+ EOT
1511
+
1512
+ # This is so we can refer back to the type to get a list of
1513
+ # providers for documentation.
1514
+ class << self
1515
+ attr_accessor :parenttype
1516
+ end
1517
+
1518
+ # We need to add documentation for each provider.
1519
+ def self.doc
1520
+ # Since we're mixing @doc with text from other sources, we must normalize
1521
+ # its indentation with scrub. But we don't need to manually scrub the
1522
+ # provider's doc string, since markdown_definitionlist sanitizes its inputs.
1523
+ scrub(@doc) + "Available providers are:\n\n" + parenttype.providers.sort { |a,b|
1524
+ a.to_s <=> b.to_s
1525
+ }.collect { |i|
1526
+ markdown_definitionlist( i, scrub(parenttype().provider(i).doc) )
1527
+ }.join
1528
+ end
1529
+
1530
+ defaultto {
1531
+ prov = @resource.class.defaultprovider
1532
+ prov.name if prov
1533
+ }
1534
+
1535
+ validate do |provider_class|
1536
+ provider_class = provider_class[0] if provider_class.is_a? Array
1537
+ provider_class = provider_class.class.name if provider_class.is_a?(Puppet::Provider)
1538
+
1539
+ unless provider = @resource.class.provider(provider_class)
1540
+ raise ArgumentError, "Invalid #{@resource.class.name} provider '#{provider_class}'"
1541
+ end
1542
+ end
1543
+
1544
+ munge do |provider|
1545
+ provider = provider[0] if provider.is_a? Array
1546
+ provider = provider.intern if provider.is_a? String
1547
+ @resource.provider = provider
1548
+
1549
+ if provider.is_a?(Puppet::Provider)
1550
+ provider.class.name
1551
+ else
1552
+ provider
1553
+ end
1554
+ end
1555
+ end.parenttype = self
1556
+ end
1557
+
1558
+ def self.unprovide(name)
1559
+ if @defaultprovider and @defaultprovider.name == name
1560
+ @defaultprovider = nil
1561
+ end
1562
+
1563
+ rmclass(name, :hash => provider_hash, :prefix => "Provider")
1564
+ end
1565
+
1566
+ # Return an array of all of the suitable providers.
1567
+ def self.suitableprovider
1568
+ providerloader.loadall if provider_hash.empty?
1569
+ provider_hash.find_all { |name, provider|
1570
+ provider.suitable?
1571
+ }.collect { |name, provider|
1572
+ provider
1573
+ }.reject { |p| p.name == :fake } # For testing
1574
+ end
1575
+
1576
+ def suitable?
1577
+ # If we don't use providers, then we consider it suitable.
1578
+ return true unless self.class.paramclass(:provider)
1579
+
1580
+ # We have a provider and it is suitable.
1581
+ return true if provider && provider.class.suitable?
1582
+
1583
+ # We're using the default provider and there is one.
1584
+ if !provider and self.class.defaultprovider
1585
+ self.provider = self.class.defaultprovider.name
1586
+ return true
1587
+ end
1588
+
1589
+ # We specified an unsuitable provider, or there isn't any suitable
1590
+ # provider.
1591
+ false
1592
+ end
1593
+
1594
+ def provider=(name)
1595
+ if name.is_a?(Puppet::Provider)
1596
+ @provider = name
1597
+ @provider.resource = self
1598
+ elsif klass = self.class.provider(name)
1599
+ @provider = klass.new(self)
1600
+ else
1601
+ raise ArgumentError, "Could not find #{name} provider of #{self.class.name}"
1602
+ end
1603
+ end
1604
+
1605
+ ###############################
1606
+ # All of the relationship code.
1607
+
1608
+ # Specify a block for generating a list of objects to autorequire. This
1609
+ # makes it so that you don't have to manually specify things that you clearly
1610
+ # require.
1611
+ def self.autorequire(name, &block)
1612
+ @autorequires ||= {}
1613
+ @autorequires[name] = block
1614
+ end
1615
+
1616
+ # Yield each of those autorequires in turn, yo.
1617
+ def self.eachautorequire
1618
+ @autorequires ||= {}
1619
+ @autorequires.each { |type, block|
1620
+ yield(type, block)
1621
+ }
1622
+ end
1623
+
1624
+ # Figure out of there are any objects we can automatically add as
1625
+ # dependencies.
1626
+ def autorequire(rel_catalog = nil)
1627
+ rel_catalog ||= catalog
1628
+ raise(Puppet::DevError, "You cannot add relationships without a catalog") unless rel_catalog
1629
+
1630
+ reqs = []
1631
+ self.class.eachautorequire { |type, block|
1632
+ # Ignore any types we can't find, although that would be a bit odd.
1633
+ next unless typeobj = Puppet::Type.type(type)
1634
+
1635
+ # Retrieve the list of names from the block.
1636
+ next unless list = self.instance_eval(&block)
1637
+ list = [list] unless list.is_a?(Array)
1638
+
1639
+ # Collect the current prereqs
1640
+ list.each { |dep|
1641
+ # Support them passing objects directly, to save some effort.
1642
+ unless dep.is_a? Puppet::Type
1643
+ # Skip autorequires that we aren't managing
1644
+ unless dep = rel_catalog.resource(type, dep)
1645
+ next
1646
+ end
1647
+ end
1648
+
1649
+ reqs << Puppet::Relationship.new(dep, self)
1650
+ }
1651
+ }
1652
+
1653
+ reqs
1654
+ end
1655
+
1656
+ # Build the dependencies associated with an individual object.
1657
+ def builddepends
1658
+ # Handle the requires
1659
+ self.class.relationship_params.collect do |klass|
1660
+ if param = @parameters[klass.name]
1661
+ param.to_edges
1662
+ end
1663
+ end.flatten.reject { |r| r.nil? }
1664
+ end
1665
+
1666
+ # Define the initial list of tags.
1667
+ def tags=(list)
1668
+ tag(self.class.name)
1669
+ tag(*list)
1670
+ end
1671
+
1672
+ # Types (which map to resources in the languages) are entirely composed of
1673
+ # attribute value pairs. Generally, Puppet calls any of these things an
1674
+ # 'attribute', but these attributes always take one of three specific
1675
+ # forms: parameters, metaparams, or properties.
1676
+
1677
+ # In naming methods, I have tried to consistently name the method so
1678
+ # that it is clear whether it operates on all attributes (thus has 'attr' in
1679
+ # the method name, or whether it operates on a specific type of attributes.
1680
+ attr_writer :title
1681
+ attr_writer :noop
1682
+
1683
+ include Enumerable
1684
+
1685
+ # class methods dealing with Type management
1686
+
1687
+ public
1688
+
1689
+ # the Type class attribute accessors
1690
+ class << self
1691
+ attr_reader :name
1692
+ attr_accessor :self_refresh
1693
+ include Enumerable, Puppet::Util::ClassGen
1694
+ include Puppet::MetaType::Manager
1695
+
1696
+ include Puppet::Util
1697
+ include Puppet::Util::Logging
1698
+ end
1699
+
1700
+ # all of the variables that must be initialized for each subclass
1701
+ def self.initvars
1702
+ # all of the instances of this class
1703
+ @objects = Hash.new
1704
+ @aliases = Hash.new
1705
+
1706
+ @defaults = {}
1707
+
1708
+ @parameters ||= []
1709
+
1710
+ @validproperties = {}
1711
+ @properties = []
1712
+ @parameters = []
1713
+ @paramhash = {}
1714
+
1715
+ @attr_aliases = {}
1716
+
1717
+ @paramdoc = Hash.new { |hash,key|
1718
+ key = key.intern if key.is_a?(String)
1719
+ if hash.include?(key)
1720
+ hash[key]
1721
+ else
1722
+ "Param Documentation for #{key} not found"
1723
+ end
1724
+ }
1725
+
1726
+ @doc ||= ""
1727
+
1728
+ end
1729
+
1730
+ def self.to_s
1731
+ if defined?(@name)
1732
+ "Puppet::Type::#{@name.to_s.capitalize}"
1733
+ else
1734
+ super
1735
+ end
1736
+ end
1737
+
1738
+ # Create a block to validate that our object is set up entirely. This will
1739
+ # be run before the object is operated on.
1740
+ def self.validate(&block)
1741
+ define_method(:validate, &block)
1742
+ #@validate = block
1743
+ end
1744
+
1745
+ # Origin information.
1746
+ attr_accessor :file, :line
1747
+
1748
+ # The catalog that this resource is stored in.
1749
+ attr_accessor :catalog
1750
+
1751
+ # is the resource exported
1752
+ attr_accessor :exported
1753
+
1754
+ # is the resource virtual (it should not :-))
1755
+ attr_accessor :virtual
1756
+
1757
+ # create a log at specified level
1758
+ def log(msg)
1759
+
1760
+ Puppet::Util::Log.create(
1761
+
1762
+ :level => @parameters[:loglevel].value,
1763
+ :message => msg,
1764
+
1765
+ :source => self
1766
+ )
1767
+ end
1768
+
1769
+
1770
+ # instance methods related to instance intrinsics
1771
+ # e.g., initialize and name
1772
+
1773
+ public
1774
+
1775
+ attr_reader :original_parameters
1776
+
1777
+ # initialize the type instance
1778
+ def initialize(resource)
1779
+ raise Puppet::DevError, "Got TransObject instead of Resource or hash" if resource.is_a?(Puppet::TransObject)
1780
+ resource = self.class.hash2resource(resource) unless resource.is_a?(Puppet::Resource)
1781
+
1782
+ # The list of parameter/property instances.
1783
+ @parameters = {}
1784
+
1785
+ # Set the title first, so any failures print correctly.
1786
+ if resource.type.to_s.downcase.to_sym == self.class.name
1787
+ self.title = resource.title
1788
+ else
1789
+ # This should only ever happen for components
1790
+ self.title = resource.ref
1791
+ end
1792
+
1793
+ [:file, :line, :catalog, :exported, :virtual].each do |getter|
1794
+ setter = getter.to_s + "="
1795
+ if val = resource.send(getter)
1796
+ self.send(setter, val)
1797
+ end
1798
+ end
1799
+
1800
+ @tags = resource.tags
1801
+
1802
+ @original_parameters = resource.to_hash
1803
+
1804
+ set_name(@original_parameters)
1805
+
1806
+ set_default(:provider)
1807
+
1808
+ set_parameters(@original_parameters)
1809
+
1810
+ self.validate if self.respond_to?(:validate)
1811
+ end
1812
+
1813
+ private
1814
+
1815
+ # Set our resource's name.
1816
+ def set_name(hash)
1817
+ self[name_var] = hash.delete(name_var) if name_var
1818
+ end
1819
+
1820
+ # Set all of the parameters from a hash, in the appropriate order.
1821
+ def set_parameters(hash)
1822
+ # Use the order provided by allattrs, but add in any
1823
+ # extra attributes from the resource so we get failures
1824
+ # on invalid attributes.
1825
+ no_values = []
1826
+ (self.class.allattrs + hash.keys).uniq.each do |attr|
1827
+ begin
1828
+ # Set any defaults immediately. This is mostly done so
1829
+ # that the default provider is available for any other
1830
+ # property validation.
1831
+ if hash.has_key?(attr)
1832
+ self[attr] = hash[attr]
1833
+ else
1834
+ no_values << attr
1835
+ end
1836
+ rescue ArgumentError, Puppet::Error, TypeError
1837
+ raise
1838
+ rescue => detail
1839
+ error = Puppet::DevError.new( "Could not set #{attr} on #{self.class.name}: #{detail}")
1840
+ error.set_backtrace(detail.backtrace)
1841
+ raise error
1842
+ end
1843
+ end
1844
+ no_values.each do |attr|
1845
+ set_default(attr)
1846
+ end
1847
+ end
1848
+
1849
+ public
1850
+
1851
+ # Set up all of our autorequires.
1852
+ def finish
1853
+ # Make sure all of our relationships are valid. Again, must be done
1854
+ # when the entire catalog is instantiated.
1855
+ self.class.relationship_params.collect do |klass|
1856
+ if param = @parameters[klass.name]
1857
+ param.validate_relationship
1858
+ end
1859
+ end.flatten.reject { |r| r.nil? }
1860
+ end
1861
+
1862
+ # For now, leave the 'name' method functioning like it used to. Once 'title'
1863
+ # works everywhere, I'll switch it.
1864
+ def name
1865
+ self[:name]
1866
+ end
1867
+
1868
+ # Look up our parent in the catalog, if we have one.
1869
+ def parent
1870
+ return nil unless catalog
1871
+
1872
+ unless defined?(@parent)
1873
+ if parents = catalog.adjacent(self, :direction => :in)
1874
+ # We should never have more than one parent, so let's just ignore
1875
+ # it if we happen to.
1876
+ @parent = parents.shift
1877
+ else
1878
+ @parent = nil
1879
+ end
1880
+ end
1881
+ @parent
1882
+ end
1883
+
1884
+ # Return the "type[name]" style reference.
1885
+ def ref
1886
+ # memoizing this is worthwhile ~ 3 percent of calls are the "first time
1887
+ # around" in an average run of Puppet. --daniel 2012-07-17
1888
+ @ref ||= "#{self.class.name.to_s.capitalize}[#{self.title}]"
1889
+ end
1890
+
1891
+ def self_refresh?
1892
+ self.class.self_refresh
1893
+ end
1894
+
1895
+ # Mark that we're purging.
1896
+ def purging
1897
+ @purging = true
1898
+ end
1899
+
1900
+ # Is this resource being purged? Used by transactions to forbid
1901
+ # deletion when there are dependencies.
1902
+ def purging?
1903
+ if defined?(@purging)
1904
+ @purging
1905
+ else
1906
+ false
1907
+ end
1908
+ end
1909
+
1910
+ # Retrieve the title of an object. If no title was set separately,
1911
+ # then use the object's name.
1912
+ def title
1913
+ unless @title
1914
+ if self.class.validparameter?(name_var)
1915
+ @title = self[:name]
1916
+ elsif self.class.validproperty?(name_var)
1917
+ @title = self.should(name_var)
1918
+ else
1919
+ self.devfail "Could not find namevar #{name_var} for #{self.class.name}"
1920
+ end
1921
+ end
1922
+
1923
+ @title
1924
+ end
1925
+
1926
+ # convert to a string
1927
+ def to_s
1928
+ self.ref
1929
+ end
1930
+
1931
+ # Convert to a transportable object
1932
+ def to_trans(ret = true)
1933
+ trans = TransObject.new(self.title, self.class.name)
1934
+
1935
+ values = retrieve_resource
1936
+ values.each do |name, value|
1937
+ name = name.name if name.respond_to? :name
1938
+ trans[name] = value
1939
+ end
1940
+
1941
+ @parameters.each do |name, param|
1942
+ # Avoid adding each instance name twice
1943
+ next if param.class.isnamevar? and param.value == self.title
1944
+
1945
+ # We've already got property values
1946
+ next if param.is_a?(Puppet::Property)
1947
+ trans[name] = param.value
1948
+ end
1949
+
1950
+ trans.tags = self.tags
1951
+
1952
+ # FIXME I'm currently ignoring 'parent' and 'path'
1953
+
1954
+ trans
1955
+ end
1956
+
1957
+ def to_resource
1958
+ # this 'type instance' versus 'resource' distinction seems artificial
1959
+ # I'd like to see it collapsed someday ~JW
1960
+ self.to_trans.to_resource
1961
+ end
1962
+
1963
+ def virtual?; !!@virtual; end
1964
+ def exported?; !!@exported; end
1965
+
1966
+ def appliable_to_device?
1967
+ self.class.can_apply_to(:device)
1968
+ end
1969
+
1970
+ def appliable_to_host?
1971
+ self.class.can_apply_to(:host)
1972
+ end
1973
+ end
1974
+ end
1975
+
1976
+ require 'puppet/provider'
1977
+
1978
+ # Always load these types.
1979
+ Puppet::Type.type(:component)