TrueCar-chef 0.10.0.beta.3

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 (372) 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-server-webui.conf +10 -0
  10. data/distro/arch/etc/conf.d/chef-server.conf +10 -0
  11. data/distro/arch/etc/conf.d/chef-solr-indexer.conf +8 -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-server +78 -0
  15. data/distro/arch/etc/rc.d/chef-server-webui +78 -0
  16. data/distro/arch/etc/rc.d/chef-solr +78 -0
  17. data/distro/arch/etc/rc.d/chef-solr-indexer +78 -0
  18. data/distro/common/man/man1/chef-indexer.1 +42 -0
  19. data/distro/common/man/man1/chef-server-webui.1 +106 -0
  20. data/distro/common/man/man1/chef-server.1 +107 -0
  21. data/distro/common/man/man1/chef-solr-indexer.1 +55 -0
  22. data/distro/common/man/man1/chef-solr.1 +55 -0
  23. data/distro/common/man/man8/chef-client.8 +63 -0
  24. data/distro/common/man/man8/chef-solo.8 +57 -0
  25. data/distro/common/man/man8/chef-solr-rebuild.8 +37 -0
  26. data/distro/common/man/man8/knife.8 +1349 -0
  27. data/distro/common/man/man8/shef.8 +45 -0
  28. data/distro/common/markdown/README +3 -0
  29. data/distro/common/markdown/knife.mkd +865 -0
  30. data/distro/debian/etc/default/chef-client +4 -0
  31. data/distro/debian/etc/default/chef-server +9 -0
  32. data/distro/debian/etc/default/chef-server-webui +9 -0
  33. data/distro/debian/etc/default/chef-solr +8 -0
  34. data/distro/debian/etc/default/chef-solr-indexer +7 -0
  35. data/distro/debian/etc/init.d/chef-client +175 -0
  36. data/distro/debian/etc/init.d/chef-server +122 -0
  37. data/distro/debian/etc/init.d/chef-server-webui +123 -0
  38. data/distro/debian/etc/init.d/chef-solr +176 -0
  39. data/distro/debian/etc/init.d/chef-solr-indexer +176 -0
  40. data/distro/debian/etc/init/chef-client.conf +17 -0
  41. data/distro/debian/etc/init/chef-server-webui.conf +17 -0
  42. data/distro/debian/etc/init/chef-server.conf +17 -0
  43. data/distro/debian/etc/init/chef-solr-indexer.conf +17 -0
  44. data/distro/debian/etc/init/chef-solr.conf +17 -0
  45. data/distro/redhat/etc/init.d/chef-client +106 -0
  46. data/distro/redhat/etc/init.d/chef-server +112 -0
  47. data/distro/redhat/etc/init.d/chef-server-webui +112 -0
  48. data/distro/redhat/etc/init.d/chef-solr +104 -0
  49. data/distro/redhat/etc/init.d/chef-solr-indexer +104 -0
  50. data/distro/redhat/etc/logrotate.d/chef-client +8 -0
  51. data/distro/redhat/etc/logrotate.d/chef-server +8 -0
  52. data/distro/redhat/etc/logrotate.d/chef-server-webui +8 -0
  53. data/distro/redhat/etc/logrotate.d/chef-solr +8 -0
  54. data/distro/redhat/etc/logrotate.d/chef-solr-indexer +8 -0
  55. data/distro/redhat/etc/sysconfig/chef-client +15 -0
  56. data/distro/redhat/etc/sysconfig/chef-server +14 -0
  57. data/distro/redhat/etc/sysconfig/chef-server-webui +14 -0
  58. data/distro/redhat/etc/sysconfig/chef-solr +8 -0
  59. data/distro/redhat/etc/sysconfig/chef-solr-indexer +7 -0
  60. data/lib/chef.rb +40 -0
  61. data/lib/chef/api_client.rb +264 -0
  62. data/lib/chef/application.rb +137 -0
  63. data/lib/chef/application/agent.rb +18 -0
  64. data/lib/chef/application/client.rb +242 -0
  65. data/lib/chef/application/knife.rb +169 -0
  66. data/lib/chef/application/solo.rb +217 -0
  67. data/lib/chef/applications.rb +4 -0
  68. data/lib/chef/certificate.rb +194 -0
  69. data/lib/chef/checksum.rb +182 -0
  70. data/lib/chef/checksum_cache.rb +189 -0
  71. data/lib/chef/client.rb +362 -0
  72. data/lib/chef/config.rb +244 -0
  73. data/lib/chef/cookbook/chefignore.rb +66 -0
  74. data/lib/chef/cookbook/cookbook_collection.rb +45 -0
  75. data/lib/chef/cookbook/cookbook_version_loader.rb +151 -0
  76. data/lib/chef/cookbook/file_system_file_vendor.rb +56 -0
  77. data/lib/chef/cookbook/file_vendor.rb +48 -0
  78. data/lib/chef/cookbook/metadata.rb +592 -0
  79. data/lib/chef/cookbook/remote_file_vendor.rb +87 -0
  80. data/lib/chef/cookbook/syntax_check.rb +136 -0
  81. data/lib/chef/cookbook_loader.rb +103 -0
  82. data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
  83. data/lib/chef/cookbook_uploader.rb +125 -0
  84. data/lib/chef/cookbook_version.rb +979 -0
  85. data/lib/chef/cookbook_version_selector.rb +163 -0
  86. data/lib/chef/couchdb.rb +247 -0
  87. data/lib/chef/daemon.rb +172 -0
  88. data/lib/chef/data_bag.rb +223 -0
  89. data/lib/chef/data_bag_item.rb +267 -0
  90. data/lib/chef/encrypted_data_bag_item.rb +126 -0
  91. data/lib/chef/environment.rb +386 -0
  92. data/lib/chef/exceptions.rb +153 -0
  93. data/lib/chef/file_access_control.rb +140 -0
  94. data/lib/chef/file_cache.rb +218 -0
  95. data/lib/chef/handler.rb +206 -0
  96. data/lib/chef/handler/json_file.rb +58 -0
  97. data/lib/chef/index_queue.rb +29 -0
  98. data/lib/chef/index_queue/amqp_client.rb +116 -0
  99. data/lib/chef/index_queue/consumer.rb +76 -0
  100. data/lib/chef/index_queue/indexable.rb +109 -0
  101. data/lib/chef/json_compat.rb +52 -0
  102. data/lib/chef/knife.rb +424 -0
  103. data/lib/chef/knife/bootstrap.rb +185 -0
  104. data/lib/chef/knife/bootstrap/archlinux-gems.erb +47 -0
  105. data/lib/chef/knife/bootstrap/centos5-gems.erb +41 -0
  106. data/lib/chef/knife/bootstrap/client-install.vbs +80 -0
  107. data/lib/chef/knife/bootstrap/fedora13-gems.erb +38 -0
  108. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +32 -0
  109. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +46 -0
  110. data/lib/chef/knife/bootstrap/windows-gems.erb +34 -0
  111. data/lib/chef/knife/client_bulk_delete.rb +43 -0
  112. data/lib/chef/knife/client_create.rb +73 -0
  113. data/lib/chef/knife/client_delete.rb +48 -0
  114. data/lib/chef/knife/client_edit.rb +48 -0
  115. data/lib/chef/knife/client_list.rb +43 -0
  116. data/lib/chef/knife/client_reregister.rb +59 -0
  117. data/lib/chef/knife/client_show.rb +53 -0
  118. data/lib/chef/knife/configure.rb +136 -0
  119. data/lib/chef/knife/configure_client.rb +52 -0
  120. data/lib/chef/knife/cookbook_bulk_delete.rb +61 -0
  121. data/lib/chef/knife/cookbook_create.rb +274 -0
  122. data/lib/chef/knife/cookbook_delete.rb +149 -0
  123. data/lib/chef/knife/cookbook_download.rb +134 -0
  124. data/lib/chef/knife/cookbook_list.rb +50 -0
  125. data/lib/chef/knife/cookbook_metadata.rb +102 -0
  126. data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -0
  127. data/lib/chef/knife/cookbook_show.rb +101 -0
  128. data/lib/chef/knife/cookbook_site_download.rb +58 -0
  129. data/lib/chef/knife/cookbook_site_list.rb +56 -0
  130. data/lib/chef/knife/cookbook_site_search.rb +51 -0
  131. data/lib/chef/knife/cookbook_site_share.rb +114 -0
  132. data/lib/chef/knife/cookbook_site_show.rb +57 -0
  133. data/lib/chef/knife/cookbook_site_unshare.rb +56 -0
  134. data/lib/chef/knife/cookbook_site_vendor.rb +145 -0
  135. data/lib/chef/knife/cookbook_test.rb +82 -0
  136. data/lib/chef/knife/cookbook_upload.rb +146 -0
  137. data/lib/chef/knife/data_bag_create.rb +94 -0
  138. data/lib/chef/knife/data_bag_delete.rb +51 -0
  139. data/lib/chef/knife/data_bag_edit.rb +94 -0
  140. data/lib/chef/knife/data_bag_from_file.rb +85 -0
  141. data/lib/chef/knife/data_bag_list.rb +46 -0
  142. data/lib/chef/knife/data_bag_show.rb +81 -0
  143. data/lib/chef/knife/environment_create.rb +53 -0
  144. data/lib/chef/knife/environment_delete.rb +45 -0
  145. data/lib/chef/knife/environment_edit.rb +45 -0
  146. data/lib/chef/knife/environment_from_file.rb +39 -0
  147. data/lib/chef/knife/environment_list.rb +42 -0
  148. data/lib/chef/knife/environment_show.rb +46 -0
  149. data/lib/chef/knife/exec.rb +51 -0
  150. data/lib/chef/knife/index_rebuild.rb +50 -0
  151. data/lib/chef/knife/node_bulk_delete.rb +46 -0
  152. data/lib/chef/knife/node_create.rb +50 -0
  153. data/lib/chef/knife/node_delete.rb +47 -0
  154. data/lib/chef/knife/node_edit.rb +163 -0
  155. data/lib/chef/knife/node_from_file.rb +45 -0
  156. data/lib/chef/knife/node_list.rb +46 -0
  157. data/lib/chef/knife/node_run_list_add.rb +67 -0
  158. data/lib/chef/knife/node_run_list_remove.rb +48 -0
  159. data/lib/chef/knife/node_show.rb +62 -0
  160. data/lib/chef/knife/recipe_list.rb +33 -0
  161. data/lib/chef/knife/role_bulk_delete.rb +47 -0
  162. data/lib/chef/knife/role_create.rb +55 -0
  163. data/lib/chef/knife/role_delete.rb +47 -0
  164. data/lib/chef/knife/role_edit.rb +48 -0
  165. data/lib/chef/knife/role_from_file.rb +49 -0
  166. data/lib/chef/knife/role_list.rb +43 -0
  167. data/lib/chef/knife/role_show.rb +54 -0
  168. data/lib/chef/knife/search.rb +123 -0
  169. data/lib/chef/knife/ssh.rb +318 -0
  170. data/lib/chef/knife/status.rb +90 -0
  171. data/lib/chef/knife/subcommand_loader.rb +101 -0
  172. data/lib/chef/knife/tag_create.rb +31 -0
  173. data/lib/chef/knife/tag_delete.rb +31 -0
  174. data/lib/chef/knife/tag_list.rb +29 -0
  175. data/lib/chef/knife/ui.rb +227 -0
  176. data/lib/chef/knife/windows_bootstrap.rb +157 -0
  177. data/lib/chef/log.rb +39 -0
  178. data/lib/chef/mash.rb +211 -0
  179. data/lib/chef/mixin/check_helper.rb +31 -0
  180. data/lib/chef/mixin/checksum.rb +32 -0
  181. data/lib/chef/mixin/command.rb +221 -0
  182. data/lib/chef/mixin/command/unix.rb +215 -0
  183. data/lib/chef/mixin/command/windows.rb +76 -0
  184. data/lib/chef/mixin/convert_to_class_name.rb +63 -0
  185. data/lib/chef/mixin/create_path.rb +56 -0
  186. data/lib/chef/mixin/deep_merge.rb +225 -0
  187. data/lib/chef/mixin/deprecation.rb +65 -0
  188. data/lib/chef/mixin/from_file.rb +50 -0
  189. data/lib/chef/mixin/language.rb +165 -0
  190. data/lib/chef/mixin/language_include_attribute.rb +61 -0
  191. data/lib/chef/mixin/language_include_recipe.rb +52 -0
  192. data/lib/chef/mixin/params_validate.rb +225 -0
  193. data/lib/chef/mixin/recipe_definition_dsl_core.rb +81 -0
  194. data/lib/chef/mixin/shell_out.rb +40 -0
  195. data/lib/chef/mixin/template.rb +95 -0
  196. data/lib/chef/mixin/xml_escape.rb +140 -0
  197. data/lib/chef/mixins.rb +15 -0
  198. data/lib/chef/monkey_patches/dir.rb +36 -0
  199. data/lib/chef/monkey_patches/numeric.rb +7 -0
  200. data/lib/chef/monkey_patches/regexp.rb +34 -0
  201. data/lib/chef/monkey_patches/string.rb +28 -0
  202. data/lib/chef/monkey_patches/tempfile.rb +64 -0
  203. data/lib/chef/nil_argument.rb +3 -0
  204. data/lib/chef/node.rb +661 -0
  205. data/lib/chef/node/attribute.rb +487 -0
  206. data/lib/chef/openid_registration.rb +187 -0
  207. data/lib/chef/platform.rb +409 -0
  208. data/lib/chef/provider.rb +124 -0
  209. data/lib/chef/provider/breakpoint.rb +36 -0
  210. data/lib/chef/provider/cookbook_file.rb +101 -0
  211. data/lib/chef/provider/cron.rb +186 -0
  212. data/lib/chef/provider/cron/solaris.rb +195 -0
  213. data/lib/chef/provider/deploy.rb +320 -0
  214. data/lib/chef/provider/deploy/revision.rb +80 -0
  215. data/lib/chef/provider/deploy/timestamped.rb +33 -0
  216. data/lib/chef/provider/directory.rb +72 -0
  217. data/lib/chef/provider/env.rb +152 -0
  218. data/lib/chef/provider/env/windows.rb +75 -0
  219. data/lib/chef/provider/erl_call.rb +100 -0
  220. data/lib/chef/provider/execute.rb +60 -0
  221. data/lib/chef/provider/file.rb +222 -0
  222. data/lib/chef/provider/git.rb +221 -0
  223. data/lib/chef/provider/group.rb +133 -0
  224. data/lib/chef/provider/group/aix.rb +70 -0
  225. data/lib/chef/provider/group/dscl.rb +121 -0
  226. data/lib/chef/provider/group/gpasswd.rb +53 -0
  227. data/lib/chef/provider/group/groupadd.rb +81 -0
  228. data/lib/chef/provider/group/pw.rb +84 -0
  229. data/lib/chef/provider/group/usermod.rb +57 -0
  230. data/lib/chef/provider/group/windows.rb +79 -0
  231. data/lib/chef/provider/http_request.rb +122 -0
  232. data/lib/chef/provider/ifconfig.rb +132 -0
  233. data/lib/chef/provider/link.rb +161 -0
  234. data/lib/chef/provider/log.rb +54 -0
  235. data/lib/chef/provider/mdadm.rb +91 -0
  236. data/lib/chef/provider/mount.rb +117 -0
  237. data/lib/chef/provider/mount/mount.rb +232 -0
  238. data/lib/chef/provider/mount/windows.rb +80 -0
  239. data/lib/chef/provider/ohai.rb +41 -0
  240. data/lib/chef/provider/package.rb +160 -0
  241. data/lib/chef/provider/package/apt.rb +110 -0
  242. data/lib/chef/provider/package/dpkg.rb +112 -0
  243. data/lib/chef/provider/package/easy_install.rb +136 -0
  244. data/lib/chef/provider/package/freebsd.rb +123 -0
  245. data/lib/chef/provider/package/macports.rb +105 -0
  246. data/lib/chef/provider/package/pacman.rb +101 -0
  247. data/lib/chef/provider/package/portage.rb +135 -0
  248. data/lib/chef/provider/package/rpm.rb +101 -0
  249. data/lib/chef/provider/package/rubygems.rb +462 -0
  250. data/lib/chef/provider/package/solaris.rb +127 -0
  251. data/lib/chef/provider/package/yum-dump.py +128 -0
  252. data/lib/chef/provider/package/yum.rb +261 -0
  253. data/lib/chef/provider/package/zypper.rb +133 -0
  254. data/lib/chef/provider/remote_directory.rb +138 -0
  255. data/lib/chef/provider/remote_file.rb +119 -0
  256. data/lib/chef/provider/route.rb +195 -0
  257. data/lib/chef/provider/ruby_block.rb +33 -0
  258. data/lib/chef/provider/script.rb +55 -0
  259. data/lib/chef/provider/service.rb +128 -0
  260. data/lib/chef/provider/service/arch.rb +109 -0
  261. data/lib/chef/provider/service/debian.rb +130 -0
  262. data/lib/chef/provider/service/freebsd.rb +156 -0
  263. data/lib/chef/provider/service/gentoo.rb +54 -0
  264. data/lib/chef/provider/service/init.rb +71 -0
  265. data/lib/chef/provider/service/insserv.rb +52 -0
  266. data/lib/chef/provider/service/redhat.rb +60 -0
  267. data/lib/chef/provider/service/simple.rb +118 -0
  268. data/lib/chef/provider/service/solaris.rb +85 -0
  269. data/lib/chef/provider/service/upstart.rb +192 -0
  270. data/lib/chef/provider/service/windows.rb +146 -0
  271. data/lib/chef/provider/subversion.rb +194 -0
  272. data/lib/chef/provider/template.rb +105 -0
  273. data/lib/chef/provider/user.rb +187 -0
  274. data/lib/chef/provider/user/dscl.rb +280 -0
  275. data/lib/chef/provider/user/pw.rb +113 -0
  276. data/lib/chef/provider/user/useradd.rb +137 -0
  277. data/lib/chef/provider/user/windows.rb +124 -0
  278. data/lib/chef/providers.rb +93 -0
  279. data/lib/chef/recipe.rb +128 -0
  280. data/lib/chef/resource.rb +530 -0
  281. data/lib/chef/resource/apt_package.rb +34 -0
  282. data/lib/chef/resource/bash.rb +33 -0
  283. data/lib/chef/resource/breakpoint.rb +35 -0
  284. data/lib/chef/resource/cookbook_file.rb +45 -0
  285. data/lib/chef/resource/cron.rb +188 -0
  286. data/lib/chef/resource/csh.rb +33 -0
  287. data/lib/chef/resource/deploy.rb +371 -0
  288. data/lib/chef/resource/deploy_revision.rb +35 -0
  289. data/lib/chef/resource/directory.rb +76 -0
  290. data/lib/chef/resource/dpkg_package.rb +34 -0
  291. data/lib/chef/resource/easy_install_package.rb +57 -0
  292. data/lib/chef/resource/env.rb +58 -0
  293. data/lib/chef/resource/erl_call.rb +83 -0
  294. data/lib/chef/resource/execute.rb +127 -0
  295. data/lib/chef/resource/file.rb +99 -0
  296. data/lib/chef/resource/freebsd_package.rb +35 -0
  297. data/lib/chef/resource/gem_package.rb +53 -0
  298. data/lib/chef/resource/git.rb +37 -0
  299. data/lib/chef/resource/group.rb +70 -0
  300. data/lib/chef/resource/http_request.rb +61 -0
  301. data/lib/chef/resource/ifconfig.rb +134 -0
  302. data/lib/chef/resource/link.rb +78 -0
  303. data/lib/chef/resource/log.rb +62 -0
  304. data/lib/chef/resource/macports_package.rb +29 -0
  305. data/lib/chef/resource/mdadm.rb +82 -0
  306. data/lib/chef/resource/mount.rb +135 -0
  307. data/lib/chef/resource/ohai.rb +40 -0
  308. data/lib/chef/resource/package.rb +80 -0
  309. data/lib/chef/resource/pacman_package.rb +33 -0
  310. data/lib/chef/resource/perl.rb +33 -0
  311. data/lib/chef/resource/portage_package.rb +33 -0
  312. data/lib/chef/resource/python.rb +33 -0
  313. data/lib/chef/resource/remote_directory.rb +109 -0
  314. data/lib/chef/resource/remote_file.rb +83 -0
  315. data/lib/chef/resource/route.rb +135 -0
  316. data/lib/chef/resource/rpm_package.rb +34 -0
  317. data/lib/chef/resource/ruby.rb +33 -0
  318. data/lib/chef/resource/ruby_block.rb +40 -0
  319. data/lib/chef/resource/scm.rb +147 -0
  320. data/lib/chef/resource/script.rb +60 -0
  321. data/lib/chef/resource/service.rb +160 -0
  322. data/lib/chef/resource/solaris_package.rb +36 -0
  323. data/lib/chef/resource/subversion.rb +36 -0
  324. data/lib/chef/resource/template.rb +69 -0
  325. data/lib/chef/resource/timestamped_deploy.rb +31 -0
  326. data/lib/chef/resource/user.rb +130 -0
  327. data/lib/chef/resource/yum_package.rb +43 -0
  328. data/lib/chef/resource_collection.rb +217 -0
  329. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  330. data/lib/chef/resource_definition.rb +67 -0
  331. data/lib/chef/resource_definition_list.rb +38 -0
  332. data/lib/chef/resources.rb +64 -0
  333. data/lib/chef/rest.rb +386 -0
  334. data/lib/chef/rest/auth_credentials.rb +71 -0
  335. data/lib/chef/rest/cookie_jar.rb +31 -0
  336. data/lib/chef/rest/rest_request.rb +188 -0
  337. data/lib/chef/role.rb +341 -0
  338. data/lib/chef/run_context.rb +126 -0
  339. data/lib/chef/run_list.rb +165 -0
  340. data/lib/chef/run_list/run_list_expansion.rb +193 -0
  341. data/lib/chef/run_list/run_list_item.rb +92 -0
  342. data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
  343. data/lib/chef/run_status.rb +121 -0
  344. data/lib/chef/runner.rb +99 -0
  345. data/lib/chef/sandbox.rb +153 -0
  346. data/lib/chef/search/query.rb +65 -0
  347. data/lib/chef/shef.rb +326 -0
  348. data/lib/chef/shef/ext.rb +569 -0
  349. data/lib/chef/shef/model_wrapper.rb +120 -0
  350. data/lib/chef/shef/shef_rest.rb +28 -0
  351. data/lib/chef/shef/shef_session.rb +284 -0
  352. data/lib/chef/shell_out.rb +238 -0
  353. data/lib/chef/shell_out/unix.rb +223 -0
  354. data/lib/chef/shell_out/windows.rb +98 -0
  355. data/lib/chef/solr_query.rb +187 -0
  356. data/lib/chef/solr_query/lucene.treetop +150 -0
  357. data/lib/chef/solr_query/lucene_nodes.rb +285 -0
  358. data/lib/chef/solr_query/query_transform.rb +65 -0
  359. data/lib/chef/solr_query/solr_http_request.rb +118 -0
  360. data/lib/chef/streaming_cookbook_uploader.rb +201 -0
  361. data/lib/chef/tasks/chef_repo.rake +256 -0
  362. data/lib/chef/util/file_edit.rb +122 -0
  363. data/lib/chef/util/windows.rb +56 -0
  364. data/lib/chef/util/windows/net_group.rb +101 -0
  365. data/lib/chef/util/windows/net_use.rb +121 -0
  366. data/lib/chef/util/windows/net_user.rb +198 -0
  367. data/lib/chef/util/windows/volume.rb +59 -0
  368. data/lib/chef/version.rb +23 -0
  369. data/lib/chef/version_class.rb +70 -0
  370. data/lib/chef/version_constraint.rb +116 -0
  371. data/lib/chef/webui_user.rb +231 -0
  372. metadata +600 -0
@@ -0,0 +1,161 @@
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/config'
20
+ require 'chef/log'
21
+ require 'chef/mixin/shell_out'
22
+ require 'chef/resource/link'
23
+ require 'chef/provider'
24
+
25
+ class Chef
26
+ class Provider
27
+ class Link < Chef::Provider
28
+ include Chef::Mixin::ShellOut
29
+ #include Chef::Mixin::Command
30
+
31
+ def negative_complement(big)
32
+ if big > 1073741823 # Fixnum max
33
+ big -= (2**32) # diminished radix wrap to negative
34
+ end
35
+ big
36
+ end
37
+
38
+ private :negative_complement
39
+
40
+ def load_current_resource
41
+ @current_resource = Chef::Resource::Link.new(@new_resource.name)
42
+ @current_resource.target_file(@new_resource.target_file)
43
+ @current_resource.link_type(@new_resource.link_type)
44
+ if @new_resource.link_type == :symbolic
45
+ if ::File.exists?(@current_resource.target_file) && ::File.symlink?(@current_resource.target_file)
46
+ @current_resource.to(
47
+ ::File.expand_path(::File.readlink(@current_resource.target_file))
48
+ )
49
+ cstats = ::File.lstat(@current_resource.target_file)
50
+ @current_resource.owner(cstats.uid)
51
+ @current_resource.group(cstats.gid)
52
+ else
53
+ @current_resource.to("")
54
+ end
55
+ elsif @new_resource.link_type == :hard
56
+ if ::File.exists?(@current_resource.target_file) && ::File.exists?(@new_resource.to)
57
+ if ::File.stat(@current_resource.target_file).ino == ::File.stat(@new_resource.to).ino
58
+ @current_resource.to(@new_resource.to)
59
+ else
60
+ @current_resource.to("")
61
+ end
62
+ else
63
+ @current_resource.to("")
64
+ end
65
+ end
66
+ @current_resource
67
+ end
68
+
69
+ # Compare the ownership of a symlink. Returns true if they are the same, false if they are not.
70
+ def compare_owner
71
+ return false if @new_resource.owner.nil?
72
+
73
+ @set_user_id = case @new_resource.owner
74
+ when /^\d+$/, Integer
75
+ @new_resource.owner.to_i
76
+ else
77
+ # This raises an ArgumentError if you can't find the user
78
+ Etc.getpwnam(@new_resource.owner).uid
79
+ end
80
+
81
+ @set_user_id == @current_resource.owner
82
+ end
83
+
84
+ # Set the ownership on the symlink, assuming it is not set correctly already.
85
+ def set_owner
86
+ unless compare_owner
87
+ Chef::Log.info("Setting owner to #{@set_user_id} for #{@new_resource}")
88
+ @set_user_id = negative_complement(@set_user_id)
89
+ ::File.lchown(@set_user_id, nil, @new_resource.target_file)
90
+ @new_resource.updated_by_last_action(true)
91
+ end
92
+ end
93
+
94
+ # Compares the group of a symlink. Returns true if they are the same, false if they are not.
95
+ def compare_group
96
+ return false if @new_resource.group.nil?
97
+
98
+ @set_group_id = case @new_resource.group
99
+ when /^\d+$/, Integer
100
+ @new_resource.group.to_i
101
+ else
102
+ Etc.getgrnam(@new_resource.group).gid
103
+ end
104
+
105
+ @set_group_id == @current_resource.group
106
+ end
107
+
108
+ def set_group
109
+ unless compare_group
110
+ Chef::Log.info("Setting group to #{@set_group_id} for #{@new_resource}")
111
+ @set_group_id = negative_complement(@set_group_id)
112
+ ::File.lchown(nil, @set_group_id, @new_resource.target_file)
113
+ @new_resource.updated_by_last_action(true)
114
+ end
115
+ end
116
+
117
+ def action_create
118
+ if @current_resource.to != ::File.expand_path(@new_resource.to, @new_resource.target_file)
119
+ Chef::Log.info("Creating a #{@new_resource.link_type} link from #{@new_resource.to} -> #{@new_resource.target_file} for #{@new_resource}")
120
+ if @new_resource.link_type == :symbolic
121
+ unless (::File.symlink?(@new_resource.target_file) && ::File.readlink(@new_resource.target_file) == @new_resource.to)
122
+ if ::File.symlink?(@new_resource.target_file) || ::File.exist?(@new_resource.target_file)
123
+ ::File.unlink(@new_resource.target_file)
124
+ end
125
+ ::File.symlink(@new_resource.to,@new_resource.target_file)
126
+ end
127
+ elsif @new_resource.link_type == :hard
128
+ ::File.link(@new_resource.to, @new_resource.target_file)
129
+ end
130
+ @new_resource.updated_by_last_action(true)
131
+ end
132
+ if @new_resource.link_type == :symbolic
133
+ set_owner unless @new_resource.owner.nil?
134
+ set_group unless @new_resource.group.nil?
135
+ end
136
+ end
137
+
138
+ def action_delete
139
+ if @new_resource.link_type == :symbolic
140
+ if ::File.symlink?(@new_resource.target_file)
141
+ Chef::Log.info("Deleting #{@new_resource} at #{@new_resource.target_file}")
142
+ ::File.delete(@new_resource.target_file)
143
+ @new_resource.updated_by_last_action(true)
144
+ elsif ::File.exists?(@new_resource.target_file)
145
+ raise Chef::Exceptions::Link, "Cannot delete #{@new_resource} at #{@new_resource.target_file}! Not a symbolic link."
146
+ end
147
+ elsif @new_resource.link_type == :hard
148
+ if ::File.exists?(@new_resource.target_file)
149
+ if ::File.exists?(@new_resource.to) && ::File.stat(@current_resource.target_file).ino == ::File.stat(@new_resource.to).ino
150
+ Chef::Log.info("Deleting #{@new_resource} at #{@new_resource.target_file}")
151
+ ::File.delete(@new_resource.target_file)
152
+ @new_resource.updated_by_last_action(true)
153
+ else
154
+ raise Chef::Exceptions::Link, "Cannot delete #{@new_resource} at #{@new_resource.target_file}! Not a hard link."
155
+ end
156
+ end
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
@@ -0,0 +1,54 @@
1
+ #
2
+ # Author:: Cary Penniman (<cary@rightscale.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
+ class Chef
20
+
21
+ class Provider
22
+
23
+ class Log
24
+
25
+ # Chef log provider, allows logging to chef's logs from recipes
26
+ class ChefLog < Chef::Provider
27
+
28
+ # No concept of a 'current' resource for logs, this is a no-op
29
+ #
30
+ # === Return
31
+ # true:: Always return true
32
+ def load_current_resource
33
+ true
34
+ end
35
+
36
+ # Write the log to Chef's log
37
+ #
38
+ # === Return
39
+ # true:: Always return true
40
+ def action_write
41
+ Chef::Log.send(@new_resource.level, @new_resource.name)
42
+ @new_resource.updated_by_last_action(true)
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+
53
+
54
+
@@ -0,0 +1,91 @@
1
+ #
2
+ # Author:: Joe Williams (<joe@joetify.com>)
3
+ # Copyright:: Copyright (c) 2009 Joe Williams
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/shell_out'
21
+ require 'chef/provider'
22
+
23
+ class Chef
24
+ class Provider
25
+ class Mdadm < Chef::Provider
26
+
27
+ #include Chef::Mixin::Command
28
+ include Chef::Mixin::ShellOut
29
+
30
+ def popen4
31
+ raise Exception, "deprecated, bitches"
32
+ end
33
+
34
+ def load_current_resource
35
+ @current_resource = Chef::Resource::Mdadm.new(@new_resource.name)
36
+ @current_resource.raid_device(@new_resource.raid_device)
37
+ Chef::Log.debug("Checking for software raid device #{@current_resource.raid_device}")
38
+
39
+ mdadm = shell_out!("mdadm --detail --scan")
40
+ exists = mdadm.stdout.include?(@new_resource.raid_device)
41
+ #exists = false
42
+ # popen4(command) do |pid, stdin, stdout, stderr|
43
+ # stdout.each do |line|
44
+ # if line.include? @new_resource.raid_device
45
+ # exists = true
46
+ # end
47
+ # end
48
+ # end
49
+ @current_resource.exists(exists)
50
+ end
51
+
52
+ def action_create
53
+ unless @current_resource.exists
54
+ command = "yes | mdadm --create #{@new_resource.raid_device} --chunk=#{@new_resource.chunk} --level #{@new_resource.level} --raid-devices #{@new_resource.devices.length} #{@new_resource.devices.join(" ")}"
55
+ Chef::Log.debug("mdadm command: #{command}")
56
+ #pid, stdin, stdout, stderr = popen4(command)
57
+ shell_out!(command)
58
+ Chef::Log.info("Created mdadm raid device (#{@new_resource.raid_device})")
59
+ @new_resource.updated_by_last_action(true)
60
+ else
61
+ Chef::Log.debug("mdadm raid device already exists, skipping create (#{@new_resource.raid_device})")
62
+ end
63
+ end
64
+
65
+ def action_assemble
66
+ unless @current_resource.exists
67
+ command = "yes | mdadm --assemble #{@new_resource.raid_device} #{@new_resource.devices.join(" ")}"
68
+ Chef::Log.debug("mdadm command: #{command}")
69
+ shell_out!(command)
70
+ Chef::Log.info("Assembled mdadm raid device (#{@new_resource.raid_device})")
71
+ @new_resource.updated_by_last_action(true)
72
+ else
73
+ Chef::Log.debug("mdadm raid device already exists, skipping assemble (#{@new_resource.raid_device})")
74
+ end
75
+ end
76
+
77
+ def action_stop
78
+ if @current_resource.exists
79
+ command = "yes | mdadm --stop #{@new_resource.raid_device}"
80
+ Chef::Log.debug("mdadm command: #{command}")
81
+ shell_out!(command)
82
+ Chef::Log.info("Stopped mdadm raid device (#{@new_resource.raid_device})")
83
+ @new_resource.updated_by_last_action(true)
84
+ else
85
+ Chef::Log.debug("mdadm raid device doesn't exist (#{@new_resource.raid_device})")
86
+ end
87
+ end
88
+
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,117 @@
1
+ #
2
+ # Author:: Joshua Timberman (<joshua@opscode.com>)
3
+ # Copyright:: Copyright (c) 2009 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/log'
20
+ require 'chef/mixin/command'
21
+ require 'chef/provider'
22
+
23
+ class Chef
24
+ class Provider
25
+ class Mount < Chef::Provider
26
+
27
+ include Chef::Mixin::Command
28
+
29
+ def action_mount
30
+ unless @current_resource.mounted
31
+ Chef::Log.debug("#{@new_resource}: attempting to mount")
32
+ status = mount_fs()
33
+ if status
34
+ @new_resource.updated_by_last_action(true)
35
+ Chef::Log.info("#{@new_resource}: mounted successfully")
36
+ end
37
+ else
38
+ Chef::Log.debug("#{@new_resource}: not mounting, already mounted")
39
+ end
40
+ end
41
+
42
+ def action_umount
43
+ if @current_resource.mounted
44
+ Chef::Log.debug("#{@new_resource}: attempting to unmount")
45
+ status = umount_fs()
46
+ if status
47
+ @new_resource.updated_by_last_action(true)
48
+ Chef::Log.info("#{@new_resource}: unmounted successfully")
49
+ end
50
+ else
51
+ Chef::Log.debug("#{@new_resource}: not unmounting, already unmounted")
52
+ end
53
+ end
54
+
55
+ def action_remount
56
+ unless @new_resource.supports[:remount]
57
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :remount"
58
+ else
59
+ if @current_resource.mounted
60
+ Chef::Log.debug("#{@new_resource}: attempting to remount")
61
+ status = remount_fs()
62
+ if status
63
+ @new_resource.updated_by_last_action(true)
64
+ Chef::Log.info("#{@new_resource}: remounted successfully")
65
+ end
66
+ else
67
+ Chef::Log.debug("#{@new_resource}: not mounted, not remounting")
68
+ end
69
+ end
70
+ end
71
+
72
+ def action_enable
73
+ unless @current_resource.enabled
74
+ status = enable_fs
75
+ if status
76
+ @new_resource.updated_by_last_action(true)
77
+ Chef::Log.info("#{@new_resource}: enabled successfully")
78
+ else
79
+ Chef::Log.debug("#{@new_resource}: not enabling, already enabled")
80
+ end
81
+ end
82
+ end
83
+
84
+ def action_disable
85
+ if @current_resource.enabled
86
+ status = disable_fs
87
+ if status
88
+ @new_resource.updated_by_last_action(true)
89
+ Chef::Log.info("#{@new_resource}: disabled successfully")
90
+ else
91
+ Chef::Log.debug("#{@new_resource}: not disabling, already disabled")
92
+ end
93
+ end
94
+ end
95
+
96
+ def mount_fs
97
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :mount"
98
+ end
99
+
100
+ def umount_fs
101
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :umount"
102
+ end
103
+
104
+ def remount_fs
105
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :remount"
106
+ end
107
+
108
+ def enable_fs
109
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :enable"
110
+ end
111
+
112
+ def disable_fs
113
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :disable"
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,232 @@
1
+ #
2
+ # Author:: Joshua Timberman (<joshua@opscode.com>)
3
+ # Copyright:: Copyright (c) 2009 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/mount'
20
+ require 'chef/log'
21
+ require 'chef/mixin/shell_out'
22
+
23
+ class Chef
24
+ class Provider
25
+ class Mount
26
+ class Mount < Chef::Provider::Mount
27
+ include Chef::Mixin::ShellOut
28
+
29
+ def initialize(new_resource, run_context)
30
+ super
31
+ @real_device = nil
32
+ end
33
+ attr_accessor :real_device
34
+
35
+ def load_current_resource
36
+ @current_resource = Chef::Resource::Mount.new(@new_resource.name)
37
+ @current_resource.mount_point(@new_resource.mount_point)
38
+ @current_resource.device(@new_resource.device)
39
+ Chef::Log.debug("Checking for mount point #{@current_resource.mount_point}")
40
+
41
+ # only check for existence of non-remote devices
42
+ if (device_should_exist? && !::File.exists?(device_real) )
43
+ raise Chef::Exceptions::Mount, "Device #{@new_resource.device} does not exist"
44
+ elsif( !::File.exists?(@new_resource.mount_point) )
45
+ raise Chef::Exceptions::Mount, "Mount point #{@new_resource.mount_point} does not exist"
46
+ end
47
+
48
+ # Check to see if the volume is mounted. Last volume entry wins.
49
+ mounted = false
50
+ shell_out!("mount").stdout.each_line do |line|
51
+ case line
52
+ when /^#{device_mount_regex}\s+on\s+#{Regexp.escape(@new_resource.mount_point)}/
53
+ mounted = true
54
+ Chef::Log.debug("Special device #{device_logstring} mounted as #{@new_resource.mount_point}")
55
+ when /^([\/\w])+\son\s#{Regexp.escape(@new_resource.mount_point)}\s+/
56
+ mounted = false
57
+ Chef::Log.debug("Special device #{$~[1]} mounted as #{@new_resource.mount_point}")
58
+ end
59
+ end
60
+ @current_resource.mounted(mounted)
61
+
62
+ # Check to see if there is a entry in /etc/fstab. Last entry for a volume wins.
63
+ enabled = false
64
+ ::File.foreach("/etc/fstab") do |line|
65
+ case line
66
+ when /^[#\s]/
67
+ next
68
+ when /^#{device_fstab_regex}\s+#{Regexp.escape(@new_resource.mount_point)}\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/
69
+ enabled = true
70
+ @current_resource.fstype($1)
71
+ @current_resource.options($2)
72
+ @current_resource.dump($3.to_i)
73
+ @current_resource.pass($4.to_i)
74
+ Chef::Log.debug("Found mount #{device_fstab} to #{@new_resource.mount_point} in /etc/fstab")
75
+ when /^[\/\w]+\s+#{Regexp.escape(@new_resource.mount_point)}/
76
+ enabled = false
77
+ Chef::Log.debug("Found conflicting mount point #{@new_resource.mount_point} in /etc/fstab")
78
+ end
79
+ end
80
+ @current_resource.enabled(enabled)
81
+ end
82
+
83
+ def mount_fs
84
+ unless @current_resource.mounted
85
+ command = "mount -t #{@new_resource.fstype}"
86
+ command << " -o #{@new_resource.options.join(',')}" unless @new_resource.options.nil? || @new_resource.options.empty?
87
+ command << case @new_resource.device_type
88
+ when :device
89
+ " #{device_real}"
90
+ when :label
91
+ " -L #{@new_resource.device}"
92
+ when :uuid
93
+ " -U #{@new_resource.device}"
94
+ end
95
+ command << " #{@new_resource.mount_point}"
96
+ shell_out!(command)
97
+ Chef::Log.info("Mounted #{@new_resource.mount_point}")
98
+ else
99
+ Chef::Log.debug("#{@new_resource.mount_point} is already mounted.")
100
+ end
101
+ end
102
+
103
+ def umount_fs
104
+ if @current_resource.mounted
105
+ shell_out!("umount #{@new_resource.mount_point}")
106
+ Chef::Log.info("Unmounted #{@new_resource.mount_point}")
107
+ else
108
+ Chef::Log.debug("#{@new_resource.mount_point} is not mounted.")
109
+ end
110
+ end
111
+
112
+ def remount_fs
113
+ if @current_resource.mounted and @new_resource.supports[:remount]
114
+ shell_out!("mount -o remount #{@new_resource.mount_point}")
115
+
116
+ @new_resource.updated_by_last_action(true)
117
+ Chef::Log.info("Remounted #{@new_resource.mount_point}")
118
+ elsif @current_resource.mounted
119
+ umount_fs
120
+ sleep 1
121
+ mount_fs
122
+ else
123
+ Chef::Log.debug("#{@new_resource.mount_point} is not mounted.")
124
+ end
125
+ end
126
+
127
+ def enable_fs
128
+ if @current_resource.enabled && mount_options_unchanged?
129
+ Chef::Log.debug("#{@new_resource.mount_point} is already enabled.")
130
+ return nil
131
+ end
132
+
133
+ if @current_resource.enabled
134
+ # The current options don't match what we have, so
135
+ # disable, then enable.
136
+ disable_fs
137
+ end
138
+ ::File.open("/etc/fstab", "a") do |fstab|
139
+ fstab.puts("#{device_fstab} #{@new_resource.mount_point} #{@new_resource.fstype} #{@new_resource.options.nil? ? "defaults" : @new_resource.options.join(",")} #{@new_resource.dump} #{@new_resource.pass}")
140
+ Chef::Log.info("Enabled #{@new_resource.mount_point}")
141
+ end
142
+ end
143
+
144
+ def disable_fs
145
+ if @current_resource.enabled
146
+ contents = []
147
+
148
+ found = false
149
+ ::File.readlines("/etc/fstab").reverse_each do |line|
150
+ if !found && line =~ /^#{device_fstab_regex}\s+#{Regexp.escape(@new_resource.mount_point)}/
151
+ found = true
152
+ Chef::Log.debug("Removing #{@new_resource.mount_point} from fstab")
153
+ next
154
+ else
155
+ contents << line
156
+ end
157
+ end
158
+
159
+ ::File.open("/etc/fstab", "w") do |fstab|
160
+ contents.reverse_each { |line| fstab.puts line}
161
+ end
162
+ else
163
+ Chef::Log.debug("#{@new_resource.mount_point} is not enabled")
164
+ end
165
+ end
166
+
167
+ def device_should_exist?
168
+ @new_resource.device !~ /:/ && @new_resource.device !~ /\/\// && @new_resource.device != "tmpfs"
169
+ end
170
+
171
+ private
172
+
173
+ def device_fstab
174
+ case @new_resource.device_type
175
+ when :device
176
+ @new_resource.device
177
+ when :label
178
+ "LABEL=#{@new_resource.device}"
179
+ when :uuid
180
+ "UUID=#{@new_resource.device}"
181
+ end
182
+ end
183
+
184
+ def device_real
185
+ if @real_device == nil
186
+ if @new_resource.device_type == :device
187
+ @real_device = @new_resource.device
188
+ else
189
+ @real_device = ""
190
+ status = popen4("/sbin/findfs #{device_fstab}") do |pid, stdin, stdout, stderr|
191
+ device_line = stdout.first # stdout.first consumes
192
+ @real_device = device_line.chomp unless device_line.nil?
193
+ end
194
+ end
195
+ end
196
+ @real_device
197
+ end
198
+
199
+ def device_logstring
200
+ case @new_resource.device_type
201
+ when :device
202
+ "#{device_real}"
203
+ when :label
204
+ "#{device_real} with label #{@new_resource.device}"
205
+ when :uuid
206
+ "#{device_real} with uuid #{@new_resource.device}"
207
+ end
208
+ end
209
+
210
+ def device_mount_regex
211
+ ::File.symlink?(device_real) ? "(?:#{Regexp.escape(device_real)})|(?:#{Regexp.escape(::File.readlink(device_real))})" : Regexp.escape(device_real)
212
+ end
213
+
214
+ def device_fstab_regex
215
+ if @new_resource.device_type == :device
216
+ device_mount_regex
217
+ else
218
+ device_fstab
219
+ end
220
+ end
221
+
222
+ def mount_options_unchanged?
223
+ @current_resource.fstype == @new_resource.fstype and
224
+ @current_resource.options == @new_resource.options and
225
+ @current_resource.dump == @new_resource.dump and
226
+ @current_resource.pass == @new_resource.pass
227
+ end
228
+
229
+ end
230
+ end
231
+ end
232
+ end