tylerrick-chef 0.10.8

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 (450) hide show
  1. data/LICENSE +201 -0
  2. data/README.rdoc +171 -0
  3. data/bin/chef-client +26 -0
  4. data/bin/chef-solo +25 -0
  5. data/bin/knife +26 -0
  6. data/bin/shef +34 -0
  7. data/distro/README +2 -0
  8. data/distro/arch/etc/conf.d/chef-client.conf +5 -0
  9. data/distro/arch/etc/conf.d/chef-expander.conf +8 -0
  10. data/distro/arch/etc/conf.d/chef-server-webui.conf +10 -0
  11. data/distro/arch/etc/conf.d/chef-server.conf +10 -0
  12. data/distro/arch/etc/conf.d/chef-solr.conf +8 -0
  13. data/distro/arch/etc/rc.d/chef-client +76 -0
  14. data/distro/arch/etc/rc.d/chef-expander +78 -0
  15. data/distro/arch/etc/rc.d/chef-server +78 -0
  16. data/distro/arch/etc/rc.d/chef-server-webui +78 -0
  17. data/distro/arch/etc/rc.d/chef-solr +78 -0
  18. data/distro/common/html/chef-client.8.html +146 -0
  19. data/distro/common/html/chef-expander.8.html +164 -0
  20. data/distro/common/html/chef-expanderctl.8.html +146 -0
  21. data/distro/common/html/chef-server-webui.8.html +185 -0
  22. data/distro/common/html/chef-server.8.html +182 -0
  23. data/distro/common/html/chef-solo.8.html +191 -0
  24. data/distro/common/html/chef-solr.8.html +165 -0
  25. data/distro/common/html/knife-bootstrap.1.html +243 -0
  26. data/distro/common/html/knife-client.1.html +219 -0
  27. data/distro/common/html/knife-configure.1.html +170 -0
  28. data/distro/common/html/knife-cookbook-site.1.html +241 -0
  29. data/distro/common/html/knife-cookbook.1.html +384 -0
  30. data/distro/common/html/knife-data-bag.1.html +234 -0
  31. data/distro/common/html/knife-environment.1.html +267 -0
  32. data/distro/common/html/knife-exec.1.html +134 -0
  33. data/distro/common/html/knife-index.1.html +125 -0
  34. data/distro/common/html/knife-node.1.html +250 -0
  35. data/distro/common/html/knife-recipe.1.html +92 -0
  36. data/distro/common/html/knife-role.1.html +200 -0
  37. data/distro/common/html/knife-search.1.html +288 -0
  38. data/distro/common/html/knife-ssh.1.html +157 -0
  39. data/distro/common/html/knife-status.1.html +128 -0
  40. data/distro/common/html/knife-tag.1.html +137 -0
  41. data/distro/common/html/knife.1.html +321 -0
  42. data/distro/common/html/shef.1.html +283 -0
  43. data/distro/common/man/man1/knife-bootstrap.1 +197 -0
  44. data/distro/common/man/man1/knife-client.1 +99 -0
  45. data/distro/common/man/man1/knife-configure.1 +88 -0
  46. data/distro/common/man/man1/knife-cookbook-site.1 +145 -0
  47. data/distro/common/man/man1/knife-cookbook.1 +345 -0
  48. data/distro/common/man/man1/knife-data-bag.1 +130 -0
  49. data/distro/common/man/man1/knife-environment.1 +178 -0
  50. data/distro/common/man/man1/knife-exec.1 +46 -0
  51. data/distro/common/man/man1/knife-index.1 +29 -0
  52. data/distro/common/man/man1/knife-node.1 +134 -0
  53. data/distro/common/man/man1/knife-role.1 +88 -0
  54. data/distro/common/man/man1/knife-search.1 +280 -0
  55. data/distro/common/man/man1/knife-ssh.1 +83 -0
  56. data/distro/common/man/man1/knife-status.1 +29 -0
  57. data/distro/common/man/man1/knife-tag.1 +43 -0
  58. data/distro/common/man/man1/knife.1 +292 -0
  59. data/distro/common/man/man1/shef.1 +256 -0
  60. data/distro/common/man/man8/chef-client.8 +104 -0
  61. data/distro/common/man/man8/chef-expander.8 +97 -0
  62. data/distro/common/man/man8/chef-expanderctl.8 +62 -0
  63. data/distro/common/man/man8/chef-server-webui.8 +155 -0
  64. data/distro/common/man/man8/chef-server.8 +147 -0
  65. data/distro/common/man/man8/chef-solo.8 +158 -0
  66. data/distro/common/man/man8/chef-solr.8 +122 -0
  67. data/distro/common/markdown/README +3 -0
  68. data/distro/common/markdown/man1/knife-bootstrap.mkd +142 -0
  69. data/distro/common/markdown/man1/knife-client.mkd +103 -0
  70. data/distro/common/markdown/man1/knife-configure.mkd +70 -0
  71. data/distro/common/markdown/man1/knife-cookbook-site.mkd +123 -0
  72. data/distro/common/markdown/man1/knife-cookbook.mkd +263 -0
  73. data/distro/common/markdown/man1/knife-data-bag.mkd +117 -0
  74. data/distro/common/markdown/man1/knife-environment.mkd +151 -0
  75. data/distro/common/markdown/man1/knife-exec.mkd +37 -0
  76. data/distro/common/markdown/man1/knife-index.mkd +30 -0
  77. data/distro/common/markdown/man1/knife-node.mkd +130 -0
  78. data/distro/common/markdown/man1/knife-role.mkd +85 -0
  79. data/distro/common/markdown/man1/knife-search.mkd +180 -0
  80. data/distro/common/markdown/man1/knife-ssh.mkd +72 -0
  81. data/distro/common/markdown/man1/knife-status.mkd +36 -0
  82. data/distro/common/markdown/man1/knife-tag.mkd +39 -0
  83. data/distro/common/markdown/man1/knife.mkd +220 -0
  84. data/distro/common/markdown/man1/shef.mkd +189 -0
  85. data/distro/common/markdown/man8/chef-client.mkd +75 -0
  86. data/distro/common/markdown/man8/chef-expander.mkd +82 -0
  87. data/distro/common/markdown/man8/chef-expanderctl.mkd +58 -0
  88. data/distro/common/markdown/man8/chef-server-webui.mkd +121 -0
  89. data/distro/common/markdown/man8/chef-server.mkd +121 -0
  90. data/distro/common/markdown/man8/chef-solo.mkd +107 -0
  91. data/distro/common/markdown/man8/chef-solr.mkd +89 -0
  92. data/distro/debian/etc/default/chef-client +4 -0
  93. data/distro/debian/etc/default/chef-expander +8 -0
  94. data/distro/debian/etc/default/chef-server +9 -0
  95. data/distro/debian/etc/default/chef-server-webui +9 -0
  96. data/distro/debian/etc/default/chef-solr +8 -0
  97. data/distro/debian/etc/init.d/chef-client +185 -0
  98. data/distro/debian/etc/init.d/chef-expander +176 -0
  99. data/distro/debian/etc/init.d/chef-server +122 -0
  100. data/distro/debian/etc/init.d/chef-server-webui +123 -0
  101. data/distro/debian/etc/init.d/chef-solr +176 -0
  102. data/distro/debian/etc/init/chef-client.conf +17 -0
  103. data/distro/debian/etc/init/chef-expander.conf +17 -0
  104. data/distro/debian/etc/init/chef-server-webui.conf +17 -0
  105. data/distro/debian/etc/init/chef-server.conf +17 -0
  106. data/distro/debian/etc/init/chef-solr.conf +17 -0
  107. data/distro/redhat/etc/init.d/chef-client +110 -0
  108. data/distro/redhat/etc/init.d/chef-expander +104 -0
  109. data/distro/redhat/etc/init.d/chef-server +112 -0
  110. data/distro/redhat/etc/init.d/chef-server-webui +112 -0
  111. data/distro/redhat/etc/init.d/chef-solr +104 -0
  112. data/distro/redhat/etc/logrotate.d/chef-client +8 -0
  113. data/distro/redhat/etc/logrotate.d/chef-expander +8 -0
  114. data/distro/redhat/etc/logrotate.d/chef-server +8 -0
  115. data/distro/redhat/etc/logrotate.d/chef-server-webui +8 -0
  116. data/distro/redhat/etc/logrotate.d/chef-solr +8 -0
  117. data/distro/redhat/etc/sysconfig/chef-client +15 -0
  118. data/distro/redhat/etc/sysconfig/chef-expander +7 -0
  119. data/distro/redhat/etc/sysconfig/chef-server +14 -0
  120. data/distro/redhat/etc/sysconfig/chef-server-webui +14 -0
  121. data/distro/redhat/etc/sysconfig/chef-solr +8 -0
  122. data/lib/chef.rb +41 -0
  123. data/lib/chef/api_client.rb +271 -0
  124. data/lib/chef/application.rb +152 -0
  125. data/lib/chef/application/agent.rb +18 -0
  126. data/lib/chef/application/client.rb +285 -0
  127. data/lib/chef/application/knife.rb +188 -0
  128. data/lib/chef/application/solo.rb +218 -0
  129. data/lib/chef/applications.rb +4 -0
  130. data/lib/chef/certificate.rb +194 -0
  131. data/lib/chef/checksum.rb +167 -0
  132. data/lib/chef/checksum/storage.rb +18 -0
  133. data/lib/chef/checksum/storage/filesystem.rb +56 -0
  134. data/lib/chef/checksum_cache.rb +189 -0
  135. data/lib/chef/client.rb +366 -0
  136. data/lib/chef/config.rb +248 -0
  137. data/lib/chef/cookbook/chefignore.rb +66 -0
  138. data/lib/chef/cookbook/cookbook_collection.rb +45 -0
  139. data/lib/chef/cookbook/cookbook_version_loader.rb +173 -0
  140. data/lib/chef/cookbook/file_system_file_vendor.rb +56 -0
  141. data/lib/chef/cookbook/file_vendor.rb +48 -0
  142. data/lib/chef/cookbook/metadata.rb +629 -0
  143. data/lib/chef/cookbook/remote_file_vendor.rb +88 -0
  144. data/lib/chef/cookbook/syntax_check.rb +136 -0
  145. data/lib/chef/cookbook_loader.rb +121 -0
  146. data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
  147. data/lib/chef/cookbook_uploader.rb +154 -0
  148. data/lib/chef/cookbook_version.rb +1096 -0
  149. data/lib/chef/cookbook_version_selector.rb +168 -0
  150. data/lib/chef/couchdb.rb +246 -0
  151. data/lib/chef/daemon.rb +172 -0
  152. data/lib/chef/data_bag.rb +235 -0
  153. data/lib/chef/data_bag_item.rb +273 -0
  154. data/lib/chef/encrypted_data_bag_item.rb +139 -0
  155. data/lib/chef/environment.rb +455 -0
  156. data/lib/chef/exceptions.rb +154 -0
  157. data/lib/chef/file_access_control.rb +144 -0
  158. data/lib/chef/file_cache.rb +218 -0
  159. data/lib/chef/handler.rb +227 -0
  160. data/lib/chef/handler/error_report.rb +33 -0
  161. data/lib/chef/handler/json_file.rb +58 -0
  162. data/lib/chef/index_queue.rb +29 -0
  163. data/lib/chef/index_queue/amqp_client.rb +116 -0
  164. data/lib/chef/index_queue/consumer.rb +76 -0
  165. data/lib/chef/index_queue/indexable.rb +109 -0
  166. data/lib/chef/json_compat.rb +52 -0
  167. data/lib/chef/knife.rb +520 -0
  168. data/lib/chef/knife/bootstrap.rb +207 -0
  169. data/lib/chef/knife/bootstrap/archlinux-gems.erb +60 -0
  170. data/lib/chef/knife/bootstrap/centos5-gems.erb +56 -0
  171. data/lib/chef/knife/bootstrap/fedora13-gems.erb +43 -0
  172. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +49 -0
  173. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +50 -0
  174. data/lib/chef/knife/client_bulk_delete.rb +65 -0
  175. data/lib/chef/knife/client_create.rb +79 -0
  176. data/lib/chef/knife/client_delete.rb +46 -0
  177. data/lib/chef/knife/client_edit.rb +45 -0
  178. data/lib/chef/knife/client_list.rb +42 -0
  179. data/lib/chef/knife/client_reregister.rb +58 -0
  180. data/lib/chef/knife/client_show.rb +52 -0
  181. data/lib/chef/knife/configure.rb +149 -0
  182. data/lib/chef/knife/configure_client.rb +50 -0
  183. data/lib/chef/knife/cookbook_bulk_delete.rb +72 -0
  184. data/lib/chef/knife/cookbook_create.rb +274 -0
  185. data/lib/chef/knife/cookbook_delete.rb +151 -0
  186. data/lib/chef/knife/cookbook_download.rb +137 -0
  187. data/lib/chef/knife/cookbook_list.rb +47 -0
  188. data/lib/chef/knife/cookbook_metadata.rb +107 -0
  189. data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -0
  190. data/lib/chef/knife/cookbook_show.rb +102 -0
  191. data/lib/chef/knife/cookbook_site_download.rb +70 -0
  192. data/lib/chef/knife/cookbook_site_install.rb +148 -0
  193. data/lib/chef/knife/cookbook_site_list.rb +62 -0
  194. data/lib/chef/knife/cookbook_site_search.rb +51 -0
  195. data/lib/chef/knife/cookbook_site_share.rb +114 -0
  196. data/lib/chef/knife/cookbook_site_show.rb +57 -0
  197. data/lib/chef/knife/cookbook_site_unshare.rb +56 -0
  198. data/lib/chef/knife/cookbook_site_vendor.rb +46 -0
  199. data/lib/chef/knife/cookbook_test.rb +93 -0
  200. data/lib/chef/knife/cookbook_upload.rb +240 -0
  201. data/lib/chef/knife/core/bootstrap_context.rb +100 -0
  202. data/lib/chef/knife/core/cookbook_scm_repo.rb +148 -0
  203. data/lib/chef/knife/core/generic_presenter.rb +191 -0
  204. data/lib/chef/knife/core/node_editor.rb +127 -0
  205. data/lib/chef/knife/core/node_presenter.rb +136 -0
  206. data/lib/chef/knife/core/object_loader.rb +75 -0
  207. data/lib/chef/knife/core/subcommand_loader.rb +112 -0
  208. data/lib/chef/knife/core/text_formatter.rb +100 -0
  209. data/lib/chef/knife/core/ui.rb +216 -0
  210. data/lib/chef/knife/data_bag_create.rb +93 -0
  211. data/lib/chef/knife/data_bag_delete.rb +51 -0
  212. data/lib/chef/knife/data_bag_edit.rb +94 -0
  213. data/lib/chef/knife/data_bag_from_file.rb +87 -0
  214. data/lib/chef/knife/data_bag_list.rb +46 -0
  215. data/lib/chef/knife/data_bag_show.rb +81 -0
  216. data/lib/chef/knife/environment_create.rb +53 -0
  217. data/lib/chef/knife/environment_delete.rb +45 -0
  218. data/lib/chef/knife/environment_edit.rb +45 -0
  219. data/lib/chef/knife/environment_from_file.rb +50 -0
  220. data/lib/chef/knife/environment_list.rb +42 -0
  221. data/lib/chef/knife/environment_show.rb +46 -0
  222. data/lib/chef/knife/exec.rb +51 -0
  223. data/lib/chef/knife/help.rb +103 -0
  224. data/lib/chef/knife/help_topics.rb +4 -0
  225. data/lib/chef/knife/index_rebuild.rb +50 -0
  226. data/lib/chef/knife/node_bulk_delete.rb +80 -0
  227. data/lib/chef/knife/node_create.rb +50 -0
  228. data/lib/chef/knife/node_delete.rb +47 -0
  229. data/lib/chef/knife/node_edit.rb +72 -0
  230. data/lib/chef/knife/node_from_file.rb +50 -0
  231. data/lib/chef/knife/node_list.rb +46 -0
  232. data/lib/chef/knife/node_run_list_add.rb +67 -0
  233. data/lib/chef/knife/node_run_list_remove.rb +48 -0
  234. data/lib/chef/knife/node_show.rb +73 -0
  235. data/lib/chef/knife/recipe_list.rb +32 -0
  236. data/lib/chef/knife/role_bulk_delete.rb +70 -0
  237. data/lib/chef/knife/role_create.rb +55 -0
  238. data/lib/chef/knife/role_delete.rb +47 -0
  239. data/lib/chef/knife/role_edit.rb +48 -0
  240. data/lib/chef/knife/role_from_file.rb +56 -0
  241. data/lib/chef/knife/role_list.rb +43 -0
  242. data/lib/chef/knife/role_show.rb +54 -0
  243. data/lib/chef/knife/search.rb +141 -0
  244. data/lib/chef/knife/ssh.rb +367 -0
  245. data/lib/chef/knife/status.rb +104 -0
  246. data/lib/chef/knife/tag_create.rb +52 -0
  247. data/lib/chef/knife/tag_delete.rb +60 -0
  248. data/lib/chef/knife/tag_list.rb +47 -0
  249. data/lib/chef/log.rb +39 -0
  250. data/lib/chef/mash.rb +211 -0
  251. data/lib/chef/mixin/check_helper.rb +31 -0
  252. data/lib/chef/mixin/checksum.rb +32 -0
  253. data/lib/chef/mixin/command.rb +163 -0
  254. data/lib/chef/mixin/command/unix.rb +215 -0
  255. data/lib/chef/mixin/command/windows.rb +76 -0
  256. data/lib/chef/mixin/convert_to_class_name.rb +63 -0
  257. data/lib/chef/mixin/create_path.rb +57 -0
  258. data/lib/chef/mixin/deep_merge.rb +225 -0
  259. data/lib/chef/mixin/deprecation.rb +65 -0
  260. data/lib/chef/mixin/from_file.rb +50 -0
  261. data/lib/chef/mixin/get_source_from_package.rb +42 -0
  262. data/lib/chef/mixin/language.rb +163 -0
  263. data/lib/chef/mixin/language_include_attribute.rb +61 -0
  264. data/lib/chef/mixin/language_include_recipe.rb +52 -0
  265. data/lib/chef/mixin/params_validate.rb +225 -0
  266. data/lib/chef/mixin/recipe_definition_dsl_core.rb +78 -0
  267. data/lib/chef/mixin/shell_out.rb +41 -0
  268. data/lib/chef/mixin/template.rb +95 -0
  269. data/lib/chef/mixin/xml_escape.rb +140 -0
  270. data/lib/chef/mixins.rb +15 -0
  271. data/lib/chef/monkey_patches/dir.rb +36 -0
  272. data/lib/chef/monkey_patches/numeric.rb +15 -0
  273. data/lib/chef/monkey_patches/object.rb +9 -0
  274. data/lib/chef/monkey_patches/regexp.rb +34 -0
  275. data/lib/chef/monkey_patches/string.rb +49 -0
  276. data/lib/chef/monkey_patches/tempfile.rb +64 -0
  277. data/lib/chef/nil_argument.rb +3 -0
  278. data/lib/chef/node.rb +677 -0
  279. data/lib/chef/node/attribute.rb +487 -0
  280. data/lib/chef/openid_registration.rb +187 -0
  281. data/lib/chef/platform.rb +434 -0
  282. data/lib/chef/provider.rb +124 -0
  283. data/lib/chef/provider/breakpoint.rb +36 -0
  284. data/lib/chef/provider/cookbook_file.rb +100 -0
  285. data/lib/chef/provider/cron.rb +186 -0
  286. data/lib/chef/provider/cron/solaris.rb +195 -0
  287. data/lib/chef/provider/deploy.rb +418 -0
  288. data/lib/chef/provider/deploy/revision.rb +80 -0
  289. data/lib/chef/provider/deploy/timestamped.rb +33 -0
  290. data/lib/chef/provider/directory.rb +72 -0
  291. data/lib/chef/provider/env.rb +152 -0
  292. data/lib/chef/provider/env/windows.rb +75 -0
  293. data/lib/chef/provider/erl_call.rb +101 -0
  294. data/lib/chef/provider/execute.rb +65 -0
  295. data/lib/chef/provider/file.rb +226 -0
  296. data/lib/chef/provider/git.rb +243 -0
  297. data/lib/chef/provider/group.rb +133 -0
  298. data/lib/chef/provider/group/aix.rb +70 -0
  299. data/lib/chef/provider/group/dscl.rb +121 -0
  300. data/lib/chef/provider/group/gpasswd.rb +53 -0
  301. data/lib/chef/provider/group/groupadd.rb +91 -0
  302. data/lib/chef/provider/group/pw.rb +84 -0
  303. data/lib/chef/provider/group/suse.rb +53 -0
  304. data/lib/chef/provider/group/usermod.rb +57 -0
  305. data/lib/chef/provider/group/windows.rb +79 -0
  306. data/lib/chef/provider/http_request.rb +122 -0
  307. data/lib/chef/provider/ifconfig.rb +195 -0
  308. data/lib/chef/provider/link.rb +164 -0
  309. data/lib/chef/provider/log.rb +54 -0
  310. data/lib/chef/provider/mdadm.rb +91 -0
  311. data/lib/chef/provider/mount.rb +114 -0
  312. data/lib/chef/provider/mount/mount.rb +240 -0
  313. data/lib/chef/provider/mount/windows.rb +81 -0
  314. data/lib/chef/provider/ohai.rb +42 -0
  315. data/lib/chef/provider/package.rb +200 -0
  316. data/lib/chef/provider/package/apt.rb +145 -0
  317. data/lib/chef/provider/package/dpkg.rb +115 -0
  318. data/lib/chef/provider/package/easy_install.rb +136 -0
  319. data/lib/chef/provider/package/freebsd.rb +125 -0
  320. data/lib/chef/provider/package/macports.rb +105 -0
  321. data/lib/chef/provider/package/pacman.rb +101 -0
  322. data/lib/chef/provider/package/portage.rb +135 -0
  323. data/lib/chef/provider/package/rpm.rb +104 -0
  324. data/lib/chef/provider/package/rubygems.rb +465 -0
  325. data/lib/chef/provider/package/solaris.rb +130 -0
  326. data/lib/chef/provider/package/yum-dump.py +286 -0
  327. data/lib/chef/provider/package/yum.rb +1173 -0
  328. data/lib/chef/provider/package/zypper.rb +144 -0
  329. data/lib/chef/provider/remote_directory.rb +137 -0
  330. data/lib/chef/provider/remote_file.rb +118 -0
  331. data/lib/chef/provider/route.rb +193 -0
  332. data/lib/chef/provider/ruby_block.rb +34 -0
  333. data/lib/chef/provider/script.rb +55 -0
  334. data/lib/chef/provider/service.rb +122 -0
  335. data/lib/chef/provider/service/arch.rb +116 -0
  336. data/lib/chef/provider/service/debian.rb +130 -0
  337. data/lib/chef/provider/service/freebsd.rb +154 -0
  338. data/lib/chef/provider/service/gentoo.rb +53 -0
  339. data/lib/chef/provider/service/init.rb +71 -0
  340. data/lib/chef/provider/service/insserv.rb +52 -0
  341. data/lib/chef/provider/service/invokercd.rb +35 -0
  342. data/lib/chef/provider/service/redhat.rb +60 -0
  343. data/lib/chef/provider/service/simple.rb +120 -0
  344. data/lib/chef/provider/service/solaris.rb +85 -0
  345. data/lib/chef/provider/service/systemd.rb +102 -0
  346. data/lib/chef/provider/service/upstart.rb +198 -0
  347. data/lib/chef/provider/service/windows.rb +155 -0
  348. data/lib/chef/provider/subversion.rb +197 -0
  349. data/lib/chef/provider/template.rb +104 -0
  350. data/lib/chef/provider/user.rb +186 -0
  351. data/lib/chef/provider/user/dscl.rb +280 -0
  352. data/lib/chef/provider/user/pw.rb +113 -0
  353. data/lib/chef/provider/user/useradd.rb +137 -0
  354. data/lib/chef/provider/user/windows.rb +124 -0
  355. data/lib/chef/providers.rb +95 -0
  356. data/lib/chef/recipe.rb +129 -0
  357. data/lib/chef/resource.rb +609 -0
  358. data/lib/chef/resource/apt_package.rb +34 -0
  359. data/lib/chef/resource/bash.rb +33 -0
  360. data/lib/chef/resource/breakpoint.rb +35 -0
  361. data/lib/chef/resource/conditional.rb +90 -0
  362. data/lib/chef/resource/cookbook_file.rb +45 -0
  363. data/lib/chef/resource/cron.rb +188 -0
  364. data/lib/chef/resource/csh.rb +33 -0
  365. data/lib/chef/resource/deploy.rb +389 -0
  366. data/lib/chef/resource/deploy_revision.rb +40 -0
  367. data/lib/chef/resource/directory.rb +76 -0
  368. data/lib/chef/resource/dpkg_package.rb +34 -0
  369. data/lib/chef/resource/easy_install_package.rb +57 -0
  370. data/lib/chef/resource/env.rb +58 -0
  371. data/lib/chef/resource/erl_call.rb +83 -0
  372. data/lib/chef/resource/execute.rb +127 -0
  373. data/lib/chef/resource/file.rb +99 -0
  374. data/lib/chef/resource/freebsd_package.rb +35 -0
  375. data/lib/chef/resource/gem_package.rb +53 -0
  376. data/lib/chef/resource/git.rb +46 -0
  377. data/lib/chef/resource/group.rb +78 -0
  378. data/lib/chef/resource/http_request.rb +61 -0
  379. data/lib/chef/resource/ifconfig.rb +144 -0
  380. data/lib/chef/resource/link.rb +78 -0
  381. data/lib/chef/resource/log.rb +62 -0
  382. data/lib/chef/resource/macports_package.rb +29 -0
  383. data/lib/chef/resource/mdadm.rb +82 -0
  384. data/lib/chef/resource/mount.rb +134 -0
  385. data/lib/chef/resource/ohai.rb +40 -0
  386. data/lib/chef/resource/package.rb +80 -0
  387. data/lib/chef/resource/pacman_package.rb +33 -0
  388. data/lib/chef/resource/perl.rb +33 -0
  389. data/lib/chef/resource/portage_package.rb +33 -0
  390. data/lib/chef/resource/python.rb +33 -0
  391. data/lib/chef/resource/remote_directory.rb +109 -0
  392. data/lib/chef/resource/remote_file.rb +83 -0
  393. data/lib/chef/resource/route.rb +135 -0
  394. data/lib/chef/resource/rpm_package.rb +34 -0
  395. data/lib/chef/resource/ruby.rb +33 -0
  396. data/lib/chef/resource/ruby_block.rb +40 -0
  397. data/lib/chef/resource/scm.rb +147 -0
  398. data/lib/chef/resource/script.rb +60 -0
  399. data/lib/chef/resource/service.rb +151 -0
  400. data/lib/chef/resource/solaris_package.rb +36 -0
  401. data/lib/chef/resource/subversion.rb +36 -0
  402. data/lib/chef/resource/template.rb +69 -0
  403. data/lib/chef/resource/timestamped_deploy.rb +31 -0
  404. data/lib/chef/resource/user.rb +130 -0
  405. data/lib/chef/resource/yum_package.rb +63 -0
  406. data/lib/chef/resource_collection.rb +217 -0
  407. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  408. data/lib/chef/resource_definition.rb +67 -0
  409. data/lib/chef/resource_definition_list.rb +38 -0
  410. data/lib/chef/resources.rb +64 -0
  411. data/lib/chef/rest.rb +400 -0
  412. data/lib/chef/rest/auth_credentials.rb +71 -0
  413. data/lib/chef/rest/cookie_jar.rb +31 -0
  414. data/lib/chef/rest/rest_request.rb +213 -0
  415. data/lib/chef/role.rb +343 -0
  416. data/lib/chef/run_context.rb +126 -0
  417. data/lib/chef/run_list.rb +165 -0
  418. data/lib/chef/run_list/run_list_expansion.rb +193 -0
  419. data/lib/chef/run_list/run_list_item.rb +92 -0
  420. data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
  421. data/lib/chef/run_status.rb +121 -0
  422. data/lib/chef/runner.rb +105 -0
  423. data/lib/chef/sandbox.rb +153 -0
  424. data/lib/chef/search/query.rb +65 -0
  425. data/lib/chef/shef.rb +327 -0
  426. data/lib/chef/shef/ext.rb +569 -0
  427. data/lib/chef/shef/model_wrapper.rb +120 -0
  428. data/lib/chef/shef/shef_rest.rb +28 -0
  429. data/lib/chef/shef/shef_session.rb +285 -0
  430. data/lib/chef/shell_out.rb +249 -0
  431. data/lib/chef/shell_out/unix.rb +223 -0
  432. data/lib/chef/shell_out/windows.rb +588 -0
  433. data/lib/chef/solr_query.rb +187 -0
  434. data/lib/chef/solr_query/lucene.treetop +150 -0
  435. data/lib/chef/solr_query/lucene_nodes.rb +285 -0
  436. data/lib/chef/solr_query/query_transform.rb +65 -0
  437. data/lib/chef/solr_query/solr_http_request.rb +132 -0
  438. data/lib/chef/streaming_cookbook_uploader.rb +201 -0
  439. data/lib/chef/tasks/chef_repo.rake +334 -0
  440. data/lib/chef/util/file_edit.rb +122 -0
  441. data/lib/chef/util/windows.rb +56 -0
  442. data/lib/chef/util/windows/net_group.rb +101 -0
  443. data/lib/chef/util/windows/net_use.rb +121 -0
  444. data/lib/chef/util/windows/net_user.rb +198 -0
  445. data/lib/chef/util/windows/volume.rb +59 -0
  446. data/lib/chef/version.rb +23 -0
  447. data/lib/chef/version_class.rb +70 -0
  448. data/lib/chef/version_constraint.rb +116 -0
  449. data/lib/chef/webui_user.rb +231 -0
  450. metadata +764 -0
@@ -0,0 +1,144 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/provider/package'
20
+ require 'chef/mixin/command'
21
+ require 'chef/resource/package'
22
+ require 'singleton'
23
+
24
+ class Chef
25
+ class Provider
26
+ class Package
27
+ class Zypper < Chef::Provider::Package
28
+
29
+
30
+ def load_current_resource
31
+ @current_resource = Chef::Resource::Package.new(@new_resource.name)
32
+ @current_resource.package_name(@new_resource.package_name)
33
+
34
+ is_installed=false
35
+ is_out_of_date=false
36
+ version=''
37
+ oud_version=''
38
+ Chef::Log.debug("#{@new_resource} checking zypper")
39
+ status = popen4("zypper info #{@new_resource.package_name}") do |pid, stdin, stdout, stderr|
40
+ stdout.each do |line|
41
+ case line
42
+ when /^Version: (.+)$/
43
+ version = $1
44
+ Chef::Log.debug("#{@new_resource} version #{$1}")
45
+ when /^Installed: Yes$/
46
+ is_installed=true
47
+ Chef::Log.debug("#{@new_resource} is installed")
48
+
49
+ when /^Installed: No$/
50
+ is_installed=false
51
+ Chef::Log.debug("#{@new_resource} is not installed")
52
+ when /^Status: out-of-date \(version (.+) installed\)$/
53
+ is_out_of_date=true
54
+ oud_version=$1
55
+ Chef::Log.debug("#{@new_resource} out of date version #{$1}")
56
+ end
57
+ end
58
+ end
59
+
60
+ if is_installed==false
61
+ @candidate_version=version
62
+ @current_resource.version(nil)
63
+ end
64
+
65
+ if is_installed==true
66
+ if is_out_of_date==true
67
+ @current_resource.version(oud_version)
68
+ @candidate_version=version
69
+ else
70
+ @current_resource.version(version)
71
+ @candidate_version=version
72
+ end
73
+ end
74
+
75
+ unless status.exitstatus == 0
76
+ raise Chef::Exceptions::Package, "zypper failed - #{status.inspect}!"
77
+ end
78
+
79
+ @current_resource
80
+ end
81
+
82
+ #Gets the zypper Version from command output (Returns Floating Point number)
83
+ def zypper_version()
84
+ `zypper -V 2>&1`.scan(/\d+/).join(".").to_f
85
+ end
86
+
87
+ def install_package(name, version)
88
+ if zypper_version < 1.0
89
+ run_command(
90
+ :command => "zypper install -y #{name}"
91
+ )
92
+ elsif version
93
+ run_command(
94
+ :command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
95
+ )
96
+ else
97
+ run_command(
98
+ :command => "zypper -n --no-gpg-checks install -l #{name}"
99
+ )
100
+ end
101
+ end
102
+
103
+ def upgrade_package(name, version)
104
+ if zypper_version < 1.0
105
+ run_command(
106
+ :command => "zypper install -y #{name}"
107
+ )
108
+ elsif version
109
+ run_command(
110
+ :command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
111
+ )
112
+ else
113
+ run_command(
114
+ :command => "zypper -n --no-gpg-checks install -l #{name}"
115
+ )
116
+ end
117
+ end
118
+
119
+ def remove_package(name, version)
120
+ if zypper_version < 1.0
121
+ run_command(
122
+ :command => "zypper remove -y #{name}"
123
+ )
124
+ elsif version
125
+ run_command(
126
+ :command => "zypper -n --no-gpg-checks remove #{name}=#{version}"
127
+ )
128
+ else
129
+ run_command(
130
+ :command => "zypper -n --no-gpg-checks remove #{name}"
131
+ )
132
+ end
133
+
134
+
135
+ end
136
+
137
+ def purge_package(name, version)
138
+ remove_package(name, version)
139
+ end
140
+
141
+ end
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,137 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/provider/file'
20
+ require 'chef/provider/directory'
21
+ require 'chef/resource/directory'
22
+ require 'chef/resource/remote_file'
23
+ require 'chef/platform'
24
+ require 'uri'
25
+ require 'tempfile'
26
+ require 'net/https'
27
+ require 'set'
28
+
29
+ class Chef
30
+ class Provider
31
+ class RemoteDirectory < Chef::Provider::Directory
32
+
33
+ def action_create
34
+ super
35
+
36
+ files_to_purge = Set.new(
37
+ Dir.glob(::File.join(@new_resource.path, '**', '*'), ::File::FNM_DOTMATCH).select do |name|
38
+ name !~ /(?:^|#{Regexp.escape(::File::SEPARATOR)})\.\.?$/
39
+ end
40
+ )
41
+ files_to_transfer.each do |cookbook_file_relative_path|
42
+ create_cookbook_file(cookbook_file_relative_path)
43
+ files_to_purge.delete(::File.dirname(::File.join(@new_resource.path, cookbook_file_relative_path)))
44
+ files_to_purge.delete(::File.join(@new_resource.path, cookbook_file_relative_path))
45
+ end
46
+ purge_unmanaged_files(files_to_purge)
47
+ end
48
+
49
+ def action_create_if_missing
50
+ # if this action is called, ignore the existing overwrite flag
51
+ @new_resource.overwrite = false
52
+ action_create
53
+ end
54
+
55
+ protected
56
+
57
+ def purge_unmanaged_files(unmanaged_files)
58
+ if @new_resource.purge
59
+ unmanaged_files.sort.reverse.each do |f|
60
+ if ::File.directory?(f)
61
+ Dir::rmdir(f)
62
+ Chef::Log.debug("#{@new_resource} removed directory #{f}")
63
+ else
64
+ ::File.delete(f)
65
+ Chef::Log.debug("#{@new_resource} deleted file #{f}")
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ def files_to_transfer
72
+ cookbook = run_context.cookbook_collection[resource_cookbook]
73
+ files = cookbook.relative_filenames_in_preferred_directory(node, :files, @new_resource.source)
74
+ files.sort.reverse
75
+ end
76
+
77
+ def directory_root_in_cookbook_cache
78
+ @directory_root_in_cookbook_cache ||= begin
79
+ cookbook = run_context.cookbook_collection[resource_cookbook]
80
+ cookbook.preferred_filename_on_disk_location(node, :files, @new_resource.source, @new_resource.path)
81
+ end
82
+ end
83
+
84
+ # Determine the cookbook to get the file from. If new resource sets an
85
+ # explicit cookbook, use it, otherwise fall back to the implicit cookbook
86
+ # i.e., the cookbook the resource was declared in.
87
+ def resource_cookbook
88
+ @new_resource.cookbook || @new_resource.cookbook_name
89
+ end
90
+
91
+ def create_cookbook_file(cookbook_file_relative_path)
92
+ full_path = ::File.join(@new_resource.path, cookbook_file_relative_path)
93
+
94
+ ensure_directory_exists(::File.dirname(full_path))
95
+
96
+ file_to_fetch = cookbook_file_resource(full_path, cookbook_file_relative_path)
97
+ if @new_resource.overwrite
98
+ file_to_fetch.run_action(:create)
99
+ else
100
+ file_to_fetch.run_action(:create_if_missing)
101
+ end
102
+ @new_resource.updated_by_last_action(true) if file_to_fetch.updated?
103
+ end
104
+
105
+ def cookbook_file_resource(target_path, relative_source_path)
106
+ cookbook_file = Chef::Resource::CookbookFile.new(target_path, run_context)
107
+ cookbook_file.cookbook_name = @new_resource.cookbook || @new_resource.cookbook_name
108
+ cookbook_file.source(::File.join(@new_resource.source, relative_source_path))
109
+ cookbook_file.mode(@new_resource.files_mode) if @new_resource.files_mode
110
+ cookbook_file.group(@new_resource.files_group) if @new_resource.files_group
111
+ cookbook_file.owner(@new_resource.files_owner) if @new_resource.files_owner
112
+ cookbook_file.backup(@new_resource.files_backup) if @new_resource.files_backup
113
+
114
+ cookbook_file
115
+ end
116
+
117
+ def ensure_directory_exists(path)
118
+ unless ::File.directory?(path)
119
+ directory_to_create = resource_for_directory(path)
120
+ directory_to_create.run_action(:create)
121
+ @new_resource.updated_by_last_action(true) if directory_to_create.updated?
122
+ end
123
+ end
124
+
125
+ def resource_for_directory(path)
126
+ dir = Chef::Resource::Directory.new(path, run_context)
127
+ dir.cookbook_name = @new_resource.cookbook || @new_resource.cookbook_name
128
+ dir.mode(@new_resource.mode)
129
+ dir.group(@new_resource.group)
130
+ dir.owner(@new_resource.owner)
131
+ dir.recursive(true)
132
+ dir
133
+ end
134
+
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,118 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/provider/file'
20
+ require 'chef/rest'
21
+ require 'uri'
22
+ require 'tempfile'
23
+ require 'net/https'
24
+
25
+ class Chef
26
+ class Provider
27
+ class RemoteFile < Chef::Provider::File
28
+
29
+ def load_current_resource
30
+ super
31
+ @current_resource.checksum(checksum(@current_resource.path)) if ::File.exist?(@current_resource.path)
32
+ end
33
+
34
+ def action_create
35
+ assert_enclosing_directory_exists!
36
+
37
+ Chef::Log.debug("#{@new_resource} checking for changes")
38
+
39
+ if current_resource_matches_target_checksum?
40
+ Chef::Log.debug("#{@new_resource} checksum matches target checksum (#{@new_resource.checksum}) - not updating")
41
+ else
42
+ Chef::REST.new(@new_resource.source, nil, nil).fetch(@new_resource.source) do |raw_file|
43
+ if matches_current_checksum?(raw_file)
44
+ Chef::Log.debug "#{@new_resource} target and source checksums are the same - not updating"
45
+ else
46
+ backup_new_resource
47
+ FileUtils.cp raw_file.path, @new_resource.path
48
+ Chef::Log.info "#{@new_resource} updated"
49
+ @new_resource.updated_by_last_action(true)
50
+ end
51
+ end
52
+ end
53
+ enforce_ownership_and_permissions
54
+
55
+ @new_resource.updated_by_last_action?
56
+ end
57
+
58
+ def action_create_if_missing
59
+ if ::File.exists?(@new_resource.path)
60
+ Chef::Log.debug("#{@new_resource} exists, taking no action.")
61
+ else
62
+ action_create
63
+ end
64
+ end
65
+
66
+ def enforce_ownership_and_permissions
67
+ set_owner if @new_resource.owner
68
+ set_group if @new_resource.group
69
+ set_mode if @new_resource.mode
70
+ end
71
+
72
+ def current_resource_matches_target_checksum?
73
+ @new_resource.checksum && @current_resource.checksum && @current_resource.checksum =~ /^#{Regexp.escape(@new_resource.checksum)}/
74
+ end
75
+
76
+ def matches_current_checksum?(candidate_file)
77
+ Chef::Log.debug "#{@new_resource} checking for file existence of #{@new_resource.path}"
78
+ if ::File.exists?(@new_resource.path)
79
+ Chef::Log.debug "#{@new_resource} file exists at #{@new_resource.path}"
80
+ @new_resource.checksum(checksum(candidate_file.path))
81
+ Chef::Log.debug "#{@new_resource} target checksum: #{@current_resource.checksum}"
82
+ Chef::Log.debug "#{@new_resource} source checksum: #{@new_resource.checksum}"
83
+
84
+ @new_resource.checksum == @current_resource.checksum
85
+ else
86
+ Chef::Log.debug "#{@new_resource} creating #{@new_resource.path}"
87
+ false
88
+ end
89
+ end
90
+
91
+ def backup_new_resource
92
+ if ::File.exists?(@new_resource.path)
93
+ Chef::Log.debug "#{@new_resource} checksum changed from #{@current_resource.checksum} to #{@new_resource.checksum}"
94
+ backup @new_resource.path
95
+ end
96
+ end
97
+
98
+ def source_file(source, current_checksum, &block)
99
+ if absolute_uri?(source)
100
+ fetch_from_uri(source, &block)
101
+ elsif !Chef::Config[:solo]
102
+ fetch_from_chef_server(source, current_checksum, &block)
103
+ else
104
+ fetch_from_local_cookbook(source, &block)
105
+ end
106
+ end
107
+
108
+ private
109
+
110
+ def absolute_uri?(source)
111
+ URI.parse(source).absolute?
112
+ rescue URI::InvalidURIError
113
+ false
114
+ end
115
+
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,193 @@
1
+ #
2
+ # Author:: Bryan McLellan (btm@loftninjas.org), Jesse Nelson (spheromak@gmail.com)
3
+ # Copyright:: Copyright (c) 2009 Bryan McLellan
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/log'
20
+ require 'chef/mixin/command'
21
+ require 'chef/provider'
22
+ require 'ipaddr'
23
+
24
+ class Chef::Provider::Route < Chef::Provider
25
+ include Chef::Mixin::Command
26
+
27
+ attr_accessor :is_running
28
+
29
+ MASK = {'0.0.0.0' => '0',
30
+ '128.0.0.0' => '1',
31
+ '192.0.0.0' => '2',
32
+ '224.0.0.0' => '3',
33
+ '240.0.0.0' => '4',
34
+ '248.0.0.0' => '5',
35
+ '252.0.0.0' => '6',
36
+ '254.0.0.0' => '7',
37
+ '255.0.0.0' => '8',
38
+ '255.128.0.0' => '9',
39
+ '255.192.0.0' => '10',
40
+ '255.224.0.0' => '11',
41
+ '255.240.0.0' => '12',
42
+ '255.248.0.0' => '13',
43
+ '255.252.0.0' => '14',
44
+ '255.254.0.0' => '15',
45
+ '255.255.0.0' => '16',
46
+ '255.255.128.0' => '17',
47
+ '255.255.192.0' => '18',
48
+ '255.255.224.0' => '19',
49
+ '255.255.240.0' => '20',
50
+ '255.255.248.0' => '21',
51
+ '255.255.252.0' => '22',
52
+ '255.255.254.0' => '23',
53
+ '255.255.255.0' => '24',
54
+ '255.255.255.128' => '25',
55
+ '255.255.255.192' => '26',
56
+ '255.255.255.224' => '27',
57
+ '255.255.255.240' => '28',
58
+ '255.255.255.248' => '29',
59
+ '255.255.255.252' => '30',
60
+ '255.255.255.254' => '31',
61
+ '255.255.255.255' => '32' }
62
+
63
+ def load_current_resource
64
+ is_running = nil
65
+
66
+ # cidr or quad dot mask
67
+ if @new_resource.netmask
68
+ new_ip = IPAddr.new("#{@new_resource.target}/#{@new_resource.netmask}")
69
+ else
70
+ new_ip = IPAddr.new(@new_resource.target)
71
+ end
72
+
73
+ # pull routes from proc
74
+ if node[:os] == "linux"
75
+ route_file = ::File.open("/proc/net/route", "r")
76
+ while (line = route_file.gets)
77
+ # proc layout
78
+ iface,destination,gateway,flags,refcnt,use,metric,mask,mtu,window,irtt = line.split
79
+
80
+ # need to convert packed adresses int quad dot
81
+ # the addrs are reversed hex packed decimal addrs. so this unwraps them. tho you could
82
+ # do this without ipaddr using unpack. ipaddr has no htoa method.
83
+ #
84
+ destination = IPAddr.new(destination.scan(/../).reverse.to_s.hex, Socket::AF_INET).to_s
85
+ gateway = IPAddr.new(gateway.scan(/../).reverse.to_s.hex, Socket::AF_INET).to_s
86
+ mask = IPAddr.new(mask.scan(/../).reverse.to_s.hex, Socket::AF_INET).to_s
87
+ Chef::Log.debug("#{@new_resource} system has route: dest=#{destination} mask=#{mask} gw=#{gateway}")
88
+
89
+ # check if what were trying to configure is already there
90
+ # use an ipaddr object with ip/mask this way we can have
91
+ # a new resource be in cidr format (i don't feel like
92
+ # expanding bitmask by hand.
93
+ #
94
+ running_ip = IPAddr.new("#{destination}/#{mask}")
95
+ Chef::Log.debug("#{@new_resource} new ip: #{new_ip.inspect} running ip: #{running_ip.inspect}")
96
+ is_running = true if running_ip == new_ip
97
+ end
98
+ route_file.close
99
+ end
100
+ end
101
+
102
+ def action_add
103
+ # check to see if load_current_resource found the route
104
+ if is_running
105
+ Chef::Log.debug("#{@new_resource} route already active - nothing to do")
106
+ else
107
+ command = generate_command(:add)
108
+
109
+ run_command( :command => command )
110
+ Chef::Log.info("#{@new_resource} added")
111
+ @new_resource.updated_by_last_action(true)
112
+ end
113
+
114
+ #for now we always write the file (ugly but its what it is)
115
+ generate_config
116
+ end
117
+
118
+ def action_delete
119
+ if is_running
120
+ command = generate_command(:delete)
121
+
122
+ run_command( :command => command )
123
+ Chef::Log.info("#{@new_resource} removed")
124
+ @new_resource.updated_by_last_action(true)
125
+ else
126
+ Chef::Log.debug("#{@new_resource} route does not exist - nothing to do")
127
+ end
128
+ end
129
+
130
+ def generate_config
131
+ conf = Hash.new
132
+ case node[:platform]
133
+ when ("centos" || "redhat" || "fedora")
134
+ # walk the collection
135
+ run_context.resource_collection.each do |resource|
136
+ if resource.is_a? Chef::Resource::Route
137
+ # default to eth0
138
+ if resource.device
139
+ dev = resource.device
140
+ else
141
+ dev = "eth0"
142
+ end
143
+
144
+ conf[dev] = String.new if conf[dev].nil?
145
+ if resource.action == :add
146
+ conf[dev] = config_file_contents(:add, :target => resource.target, :netmask => resource.netmask, :gateway => resource.gateway)
147
+ else
148
+ # need to do this for the case when the last route on an int
149
+ # is removed
150
+ conf[dev] = config_file_contents(:delete)
151
+ end
152
+ end
153
+ end
154
+ conf.each do |k, v|
155
+ network_file = ::File.new("/etc/sysconfig/network-scripts/route-#{k}", "w")
156
+ network_file.puts(conf[k])
157
+ Chef::Log.debug("#{@new_resource} writing route.#{k}\n#{conf[k]}")
158
+ network_file.close
159
+ end
160
+ end
161
+ end
162
+
163
+ def generate_command(action)
164
+ common_route_items = ''
165
+ common_route_items << "/#{MASK[@new_resource.netmask.to_s]}" if @new_resource.netmask
166
+ common_route_items << " via #{@new_resource.gateway} " if @new_resource.gateway
167
+
168
+ case action
169
+ when :add
170
+ command = "ip route replace #{@new_resource.target}"
171
+ command << common_route_items
172
+ command << " dev #{@new_resource.device} " if @new_resource.device
173
+ when :delete
174
+ command = "ip route delete #{@new_resource.target}"
175
+ command << common_route_items
176
+ end
177
+
178
+ return command
179
+ end
180
+
181
+ def config_file_contents(action, options={})
182
+ content = ''
183
+ case action
184
+ when :add
185
+ content << "#{options[:target]}"
186
+ content << "/#{options[:netmask]}" if options[:netmask]
187
+ content << " via #{options[:gateway]}" if options[:gateway]
188
+ content << "\n"
189
+ end
190
+
191
+ return content
192
+ end
193
+ end