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,85 @@
1
+ #
2
+ # Author:: Toomas Pelberg (<toomasp@gmx.net>)
3
+ # Copyright:: Copyright (c) 2010 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/service'
20
+ require 'chef/mixin/command'
21
+
22
+ class Chef
23
+ class Provider
24
+ class Service
25
+ class Solaris < Chef::Provider::Service
26
+
27
+ def initialize(new_resource, run_context=nil)
28
+ super
29
+ @init_command = "/usr/sbin/svcadm"
30
+ @status_command = "/bin/svcs -l"
31
+ end
32
+
33
+ def load_current_resource
34
+ @current_resource = Chef::Resource::Service.new(@new_resource.name)
35
+ @current_resource.service_name(@new_resource.service_name)
36
+ unless ::File.exists? "/bin/svcs"
37
+ raise Chef::Exceptions::Service, "/bin/svcs does not exist!"
38
+ end
39
+ @status = service_status.enabled
40
+ @current_resource
41
+ end
42
+
43
+ def enable_service
44
+ run_command(:command => "#{@init_command} enable #{@new_resource.service_name}")
45
+ return service_status.enabled
46
+ end
47
+
48
+ def disable_service
49
+ run_command(:command => "#{@init_command} disable #{@new_resource.service_name}")
50
+ return service_status.enabled
51
+ end
52
+
53
+ alias_method :stop_service, :disable_service
54
+ alias_method :start_service, :enable_service
55
+
56
+ def reload_service
57
+ run_command(:command => "#{@init_command} refresh #{@new_resource.service_name}")
58
+ end
59
+
60
+ def restart_service
61
+ disable_service
62
+ return enable_service
63
+ end
64
+
65
+ def service_status
66
+ status = popen4("#{@status_command} #{@current_resource.service_name}") do |pid, stdin, stdout, stderr|
67
+ stdout.each do |line|
68
+ case line
69
+ when /state\s+online/
70
+ @current_resource.enabled(true)
71
+ @current_resource.running(true)
72
+ end
73
+ end
74
+ end
75
+ unless @current_resource.enabled
76
+ @current_resource.enabled(false)
77
+ @current_resource.running(false)
78
+ end
79
+ @current_resource
80
+ end
81
+
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,192 @@
1
+ #
2
+ # Author:: Bryan McLellan <btm@loftninjas.org>
3
+ # Copyright:: Copyright (c) 2010 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/provider/service'
20
+ require 'chef/provider/service/simple'
21
+ require 'chef/mixin/command'
22
+ require 'chef/util/file_edit'
23
+
24
+ class Chef
25
+ class Provider
26
+ class Service
27
+ class Upstart < Chef::Provider::Service::Simple
28
+ UPSTART_STATE_FORMAT = /\w+ \(?(\w+)\)?[\/ ](\w+)/
29
+
30
+ # Upstart does more than start or stop a service, creating multiple 'states' [1] that a service can be in.
31
+ # In chef, when we ask a service to start, we expect it to have started before performing the next step
32
+ # since we have top down dependencies. Which is to say we may follow witha resource next that requires
33
+ # that service to be running. According to [2] we can trust that sending a 'goal' such as start will not
34
+ # return until that 'goal' is reached, or some error has occured.
35
+ #
36
+ # [1] http://upstart.ubuntu.com/wiki/JobStates
37
+ # [2] http://www.netsplit.com/2008/04/27/upstart-05-events/
38
+
39
+ def initialize(new_resource, run_context)
40
+ # TODO: re-evaluate if this is needed after integrating cookbook fix
41
+ raise ArgumentError, "run_context cannot be nil" unless run_context
42
+ super
43
+
44
+ run_context.node
45
+
46
+ platform, version = Chef::Platform.find_platform_and_version(run_context.node)
47
+ if platform == "ubuntu" && (8.04..9.04).include?(version.to_f)
48
+ @upstart_job_dir = "/etc/event.d"
49
+ @upstart_conf_suffix = ""
50
+ else
51
+ @upstart_job_dir = "/etc/init"
52
+ @upstart_conf_suffix = ".conf"
53
+ end
54
+ end
55
+
56
+ def load_current_resource
57
+ @current_resource = Chef::Resource::Service.new(@new_resource.name)
58
+ @current_resource.service_name(@new_resource.service_name)
59
+
60
+ # Get running/stopped state
61
+ # We do not support searching for a service via ps when using upstart since status is a native
62
+ # upstart function. We will however support status_command in case someone wants to do something special.
63
+ if @new_resource.status_command
64
+ Chef::Log.debug("#{@new_resource} you have specified a status command, running..")
65
+
66
+ begin
67
+ if run_command_with_systems_locale(:command => @new_resource.status_command) == 0
68
+ @current_resource.running true
69
+ end
70
+ rescue Chef::Exceptions::Exec
71
+ @current_resource.running false
72
+ nil
73
+ end
74
+ else
75
+ begin
76
+ if upstart_state == "running"
77
+ @current_resource.running true
78
+ else
79
+ @current_resource.running false
80
+ end
81
+ rescue Chef::Exceptions::Exec
82
+ @current_resource.running false
83
+ nil
84
+ end
85
+ end
86
+
87
+ # Get enabled/disabled state by reading job configuration file
88
+ if ::File.exists?("#{@upstart_job_dir}/#{@new_resource.service_name}#{@upstart_conf_suffix}")
89
+ Chef::Log.debug("#{@new_resource}: found #{@upstart_job_dir}/#{@new_resource.service_name}#{@upstart_conf_suffix}")
90
+ ::File.open("#{@upstart_job_dir}/#{@new_resource.service_name}#{@upstart_conf_suffix}",'r') do |file|
91
+ while line = file.gets
92
+ case line
93
+ when /^start on/
94
+ Chef::Log.debug("#{@new_resource}: enabled: #{line.chomp}")
95
+ @current_resource.enabled true
96
+ break
97
+ when /^#start on/
98
+ Chef::Log.debug("#{@new_resource}: disabled: #{line.chomp}")
99
+ @current_resource.enabled false
100
+ break
101
+ end
102
+ end
103
+ end
104
+ else
105
+ Chef::Log.debug("#{@new_resource}: did not find #{@upstart_job_dir}/#{@new_resource.service_name}#{@upstart_conf_suffix}")
106
+ @current_resource.enabled false
107
+ end
108
+
109
+ @current_resource
110
+ end
111
+
112
+ def start_service
113
+ # Calling start on a service that is already started will return 1
114
+ # Our 'goal' when we call start is to ensure the service is started
115
+ if @current_resource.running
116
+ Chef::Log.debug("#{@new_resource}: Already running, not starting")
117
+ else
118
+ if @new_resource.start_command
119
+ super
120
+ else
121
+ run_command_with_systems_locale(:command => "/sbin/start #{@new_resource.service_name}")
122
+ end
123
+ end
124
+ end
125
+
126
+ def stop_service
127
+ # Calling stop on a service that is already stopped will return 1
128
+ # Our 'goal' when we call stop is to ensure the service is stopped
129
+ unless @current_resource.running
130
+ Chef::Log.debug("#{@new_resource}: Not running, not stopping")
131
+ else
132
+ if @new_resource.stop_command
133
+ super
134
+ else
135
+ run_command_with_systems_locale(:command => "/sbin/stop #{@new_resource.service_name}")
136
+ end
137
+ end
138
+ end
139
+
140
+ def restart_service
141
+ if @new_resource.restart_command
142
+ super
143
+ else
144
+ run_command_with_systems_locale(:command => "/sbin/restart #{@new_resource.service_name}")
145
+ end
146
+ end
147
+
148
+ def reload_service
149
+ if @new_resource.reload_command
150
+ super
151
+ else
152
+ # upstart >= 0.6.3-4 supports reload (HUP)
153
+ run_command_with_systems_locale(:command => "/sbin/reload #{@new_resource.service_name}")
154
+ end
155
+ end
156
+
157
+ # https://bugs.launchpad.net/upstart/+bug/94065
158
+
159
+ def enable_service
160
+ Chef::Log.warn("#{@new_resource}: upstart lacks inherent support for enabling services, editing job config file")
161
+ conf = Chef::Util::FileEdit.new("#{@upstart_job_dir}/#{@new_resource.service_name}#{@upstart_conf_suffix}")
162
+ conf.search_file_replace(/^#start on/, "start on")
163
+ conf.write_file
164
+ end
165
+
166
+ def disable_service
167
+ Chef::Log.warn("#{@new_resource}: upstart lacks inherent support for disabling services, editing job config file")
168
+ conf = Chef::Util::FileEdit.new("#{@upstart_job_dir}/#{@new_resource.service_name}#{@upstart_conf_suffix}")
169
+ conf.search_file_replace(/^start on/, "#start on")
170
+ conf.write_file
171
+ end
172
+
173
+ def upstart_state
174
+ command = "/sbin/status #{@new_resource.service_name}"
175
+ status = popen4(command) do |pid, stdin, stdout, stderr|
176
+ stdout.each_line do |line|
177
+ # rsyslog stop/waiting
178
+ # service goal/state
179
+ # OR
180
+ # rsyslog (stop) waiting
181
+ # service (goal) state
182
+ line =~ UPSTART_STATE_FORMAT
183
+ data = Regexp.last_match
184
+ return data[2]
185
+ end
186
+ end
187
+ end
188
+
189
+ end
190
+ end
191
+ end
192
+ end
@@ -0,0 +1,146 @@
1
+ #
2
+ # Author:: Nuo Yan <nuo@opscode.com>
3
+ # Author:: Bryan McLellan <btm@loftninjas.org>
4
+ # Copyright:: Copyright (c) 2010 Opscode, Inc
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ # pick up popen4 from chef/mixin/command/windows
21
+ require 'chef/mixin/command'
22
+ require 'chef/provider/service/simple'
23
+
24
+ class Chef::Provider::Service::Windows < Chef::Provider::Service::Simple
25
+
26
+ def initialize(new_resource, run_context)
27
+ super
28
+ @init_command = "sc"
29
+ end
30
+
31
+ def io_popen(command)
32
+ io = IO.popen(command)
33
+ entries = io.readlines
34
+ io.close
35
+ entries
36
+ end
37
+
38
+ def load_current_resource
39
+ @current_resource = Chef::Resource::Service.new(@new_resource.name)
40
+ @current_resource.service_name(@new_resource.service_name)
41
+ begin
42
+ # Check if service is running
43
+ status = popen4("#{@init_command} query #{@new_resource.service_name}") do |pid, stdin, stdout, stderr|
44
+ stdout.each_line do |line|
45
+ raise Chef::Exceptions::Service, "Service #{@new_resource.service_name} does not exist.\n#{stdout}\n" if line =~ /FAILED 1060/
46
+ @current_resource.running true if line =~/RUNNING/
47
+ end
48
+ end
49
+
50
+ # Check if service is enabled
51
+ status = popen4("#{@init_command} qc #{@new_resource.service_name}") do |pid, stdin, stdout, stderr|
52
+ stdout.each_line do |line|
53
+ raise Chef::Exceptions::Service, "Service #{@new_resource.service_name} does not exist.\n#{stdout}\n" if line =~ /FAILED 1060/
54
+ @current_resource.enabled true if line =~/AUTO_START/
55
+ end
56
+ end
57
+
58
+ Chef::Log.debug "#{@new_resource}: running: #{@current_resource.running}"
59
+ rescue Exception => e
60
+ raise Chef::Exceptions::Service, "Exception determining state of service #{@new_resource.service_name}: #{e.message}"
61
+ end
62
+ @current_resource
63
+ end
64
+
65
+ def start_service
66
+ begin
67
+ if @new_resource.start_command
68
+ popen4(@new_resource.start_command) do |pid, stdin, stdout, stderr|
69
+ Chef::Log.debug stdout.readlines
70
+ end
71
+ else
72
+ popen4("#{@init_command} start #{@new_resource.service_name}") do |pid, stdin, stdout, stderr|
73
+ output = stdout.readlines
74
+ Chef::Log.debug output.join
75
+ output.join =~ /RUNNING/ || output.join =~ /START_PENDING/ ? true : false
76
+ end
77
+ end
78
+ rescue Exception => e
79
+ raise Chef::Exceptions::Service, "Failed to start service #{@new_resource.service_name}: #{e.message}"
80
+ end
81
+ end
82
+
83
+ def stop_service
84
+ begin
85
+ if @new_resource.stop_command
86
+ Chef::Log.debug "stopping service using the given stop_command"
87
+ popen4(@new_resource.stop_command) do |pid, stdin, stdout, stderr|
88
+ Chef::Log.debug stdout.readlines
89
+ end
90
+ else
91
+ popen4("#{@init_command} stop #{@new_resource.service_name}") do |pid, stdin, stdout, stderr|
92
+ output = stdout.readlines
93
+ Chef::Log.debug output.join
94
+ raise Chef::Exceptions::Service, "Service #{@new_resource.service_name} has dependencies and cannot be stopped.\n" if output.join =~ /FAILED 1051/
95
+ output.join =~ /1/
96
+ end
97
+ end
98
+ rescue Exception => e
99
+ raise Chef::Exceptions::Service, "Failed to start service #{@new_resource.service_name}: #{e.message}"
100
+ end
101
+ end
102
+
103
+ def restart_service
104
+ begin
105
+ if @new_resource.restart_command
106
+ Chef::Log.debug "restarting service using the given restart_command"
107
+ popen4(@new_resource.restart_command) do |pid, stdin, stdout, stderr|
108
+ Chef::Log.debug stdout.readlines
109
+ end
110
+ else
111
+ stop_service
112
+ sleep 1
113
+ start_service
114
+ end
115
+ rescue Exception => e
116
+ raise Chef::Exceptions::Service, "Failed to start service #{@new_resource.service_name}: #{e.message}"
117
+ end
118
+ end
119
+
120
+ def enable_service()
121
+ begin
122
+ popen4("#{@init_command} config #{@new_resource.service_name} start= #{determine_startup_type}") do |pid, stdin, stdout, stderr|
123
+ stdout.readlines.join =~ /SUCCESS/
124
+ end
125
+ rescue Exception => e
126
+ raise Chef::Exceptions::Service, "Failed to start service #{@new_resource.service_name}: #{e.message}"
127
+ end
128
+ end
129
+
130
+ def disable_service()
131
+ begin
132
+ popen4("#{@init_command} config #{@new_resource.service_name} start= disabled") do |pid, stdin, stdout, stderr|
133
+ stdout.readlines.join =~ /SUCCESS/
134
+ end
135
+ rescue Exception => e
136
+ raise Chef::Exceptions::Service, "Failed to start service #{@new_resource.service_name}: #{e.message}"
137
+ end
138
+ end
139
+
140
+ private
141
+
142
+ def determine_startup_type
143
+ {:automatic => 'auto', :mannual => 'demand'}[@new_resource.startup_type]
144
+ end
145
+
146
+ end
@@ -0,0 +1,194 @@
1
+ #
2
+ # Author:: Daniel DeLeo (<dan@kallistec.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
+
20
+ require 'chef/log'
21
+ require 'chef/provider'
22
+ require 'chef/mixin/command'
23
+ require 'fileutils'
24
+
25
+ class Chef
26
+ class Provider
27
+ class Subversion < Chef::Provider
28
+
29
+ include Chef::Mixin::Command
30
+
31
+ def load_current_resource
32
+ @current_resource = Chef::Resource::Subversion.new(@new_resource.name)
33
+
34
+ unless [:export, :force_export].include?(@new_resource.action.first)
35
+ if current_revision = find_current_revision
36
+ @current_resource.revision current_revision
37
+ end
38
+ end
39
+ end
40
+
41
+ def action_checkout
42
+ assert_target_directory_valid!
43
+ if target_dir_non_existant_or_empty?
44
+ run_command(run_options(:command => checkout_command))
45
+ @new_resource.updated_by_last_action(true)
46
+ else
47
+ Chef::Log.info "Taking no action, checkout destination #{@new_resource.destination} already exists or is a non-empty directory"
48
+ end
49
+ end
50
+
51
+ def action_export
52
+ assert_target_directory_valid!
53
+ if target_dir_non_existant_or_empty?
54
+ run_command(run_options(:command => export_command))
55
+ @new_resource.updated_by_last_action(true)
56
+ else
57
+ Chef::Log.info "Taking no action, export destination #{@new_resource.destination} already exists or is a non-empty directory"
58
+ end
59
+ end
60
+
61
+ def action_force_export
62
+ assert_target_directory_valid!
63
+ run_command(run_options(:command => export_command))
64
+ @new_resource.updated_by_last_action(true)
65
+ end
66
+
67
+ def action_sync
68
+ assert_target_directory_valid!
69
+ if ::File.exist?(::File.join(@new_resource.destination, ".svn"))
70
+ current_rev = find_current_revision
71
+ Chef::Log.debug "#{@new_resource} current revision: #{current_rev} target revision: #{revision_int}"
72
+ unless current_revision_matches_target_revision?
73
+ run_command(run_options(:command => sync_command))
74
+ Chef::Log.info "#{@new_resource} updated to revision: #{revision_int}"
75
+ @new_resource.updated_by_last_action(true)
76
+ end
77
+ else
78
+ action_checkout
79
+ @new_resource.updated_by_last_action(true)
80
+ end
81
+ end
82
+
83
+ def sync_command
84
+ Chef::Log.info "Updating working copy #{@new_resource.destination} to revision #{@new_resource.revision}"
85
+ scm :update, @new_resource.svn_arguments, verbose, authentication, "-r#{revision_int}", @new_resource.destination
86
+ end
87
+
88
+ def checkout_command
89
+ Chef::Log.info "checking out #{@new_resource.repository} at revision #{@new_resource.revision} to #{@new_resource.destination}"
90
+ scm :checkout, @new_resource.svn_arguments, verbose, authentication,
91
+ "-r#{revision_int}", @new_resource.repository, @new_resource.destination
92
+ end
93
+
94
+ def export_command
95
+ Chef::Log.info "exporting #{@new_resource.repository} at revision #{@new_resource.revision} to #{@new_resource.destination}"
96
+ args = ["--force"]
97
+ args << @new_resource.svn_arguments << verbose << authentication <<
98
+ "-r#{revision_int}" << @new_resource.repository << @new_resource.destination
99
+ scm :export, *args
100
+ end
101
+
102
+ # If the specified revision isn't an integer ("HEAD" for example), look
103
+ # up the revision id by asking the server
104
+ # If the specified revision is an integer, trust it.
105
+ def revision_int
106
+ @revision_int ||= begin
107
+ if @new_resource.revision =~ /^\d+$/
108
+ @new_resource.revision
109
+ else
110
+ command = scm(:info, @new_resource.repository, @new_resource.svn_info_args, authentication, "-r#{@new_resource.revision}")
111
+ status, svn_info, error_message = output_of_command(command, run_options)
112
+ handle_command_failures(status, "STDOUT: #{svn_info}\nSTDERR: #{error_message}")
113
+ extract_revision_info(svn_info)
114
+ end
115
+ end
116
+ end
117
+
118
+ alias :revision_slug :revision_int
119
+
120
+ def find_current_revision
121
+ return nil unless ::File.exist?(::File.join(@new_resource.destination, ".svn"))
122
+ command = scm(:info)
123
+ status, svn_info, error_message = output_of_command(command, run_options(:cwd => cwd))
124
+
125
+ unless [0,1].include?(status.exitstatus)
126
+ handle_command_failures(status, "STDOUT: #{svn_info}\nSTDERR: #{error_message}")
127
+ end
128
+ extract_revision_info(svn_info)
129
+ end
130
+
131
+ def current_revision_matches_target_revision?
132
+ (!@current_resource.revision.nil?) && (revision_int.strip.to_i == @current_resource.revision.strip.to_i)
133
+ end
134
+
135
+ def run_options(run_opts={})
136
+ run_opts[:user] = @new_resource.user if @new_resource.user
137
+ run_opts[:group] = @new_resource.group if @new_resource.group
138
+ run_opts
139
+ end
140
+
141
+ private
142
+
143
+ def cwd
144
+ @new_resource.destination
145
+ end
146
+
147
+ def verbose
148
+ "-q"
149
+ end
150
+
151
+ def extract_revision_info(svn_info)
152
+ begin
153
+ repo_attrs = YAML.load(svn_info)
154
+ rescue ArgumentError
155
+ # YAML doesn't appreciate input like "svn: '/tmp/deploydir' is not a working copy\n"
156
+ return nil
157
+ end
158
+ raise "Could not parse `svn info` data: #{svn_info}" unless repo_attrs.kind_of?(Hash)
159
+ rev = (repo_attrs['Last Changed Rev'] || repo_attrs['Revision']).to_s
160
+ Chef::Log.debug "Resolved revision #{@new_resource.revision} to #{rev}"
161
+ rev
162
+ end
163
+
164
+ # If a username is configured for the SCM, return the command-line
165
+ # switches for that. Note that we don't need to return the password
166
+ # switch, since Capistrano will check for that prompt in the output
167
+ # and will respond appropriately.
168
+ def authentication
169
+ return "" unless @new_resource.svn_username
170
+ result = "--username #{@new_resource.svn_username} "
171
+ result << "--password #{@new_resource.svn_password} "
172
+ result
173
+ end
174
+
175
+ def scm(*args)
176
+ ['svn', *args].compact.join(" ")
177
+ end
178
+
179
+ # TODO these methods are the same as the git provider...need to REFACTOR
180
+ # ...the subversion and git providers should extend from the same parent
181
+ def assert_target_directory_valid!
182
+ target_parent_directory = ::File.dirname(@new_resource.destination)
183
+ unless ::File.directory?(target_parent_directory)
184
+ msg = "Cannot clone #{@new_resource} to #{@new_resource.destination}, the enclosing directory #{target_parent_directory} does not exist"
185
+ raise Chef::Exceptions::MissingParentDirectory, msg
186
+ end
187
+ end
188
+
189
+ def target_dir_non_existant_or_empty?
190
+ !::File.exist?(@new_resource.destination) || Dir.entries(@new_resource.destination).sort == ['.','..']
191
+ end
192
+ end
193
+ end
194
+ end