chef 11.4.4 → 11.6.0.hotfix.1

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 (504) hide show
  1. data/README.md +1 -1
  2. data/Rakefile +18 -1
  3. data/bin/chef-service-manager +37 -0
  4. data/distro/common/html/chef-client.8.html +4 -4
  5. data/distro/common/html/chef-expander.8.html +4 -4
  6. data/distro/common/html/chef-expanderctl.8.html +4 -4
  7. data/distro/common/html/chef-server-webui.8.html +4 -4
  8. data/distro/common/html/chef-server.8.html +4 -4
  9. data/distro/common/html/chef-shell.1.html +4 -4
  10. data/distro/common/html/chef-solo.8.html +12 -18
  11. data/distro/common/html/chef-solr.8.html +4 -4
  12. data/distro/common/html/knife-bootstrap.1.html +4 -4
  13. data/distro/common/html/knife-client.1.html +4 -4
  14. data/distro/common/html/knife-configure.1.html +4 -4
  15. data/distro/common/html/knife-cookbook-site.1.html +4 -4
  16. data/distro/common/html/knife-cookbook.1.html +7 -10
  17. data/distro/common/html/knife-data-bag.1.html +7 -10
  18. data/distro/common/html/knife-environment.1.html +6 -8
  19. data/distro/common/html/knife-exec.1.html +4 -4
  20. data/distro/common/html/knife-index.1.html +4 -4
  21. data/distro/common/html/knife-node.1.html +4 -4
  22. data/distro/common/html/knife-role.1.html +4 -4
  23. data/distro/common/html/knife-search.1.html +4 -4
  24. data/distro/common/html/knife-ssh.1.html +4 -4
  25. data/distro/common/html/knife-status.1.html +4 -4
  26. data/distro/common/html/knife-tag.1.html +4 -4
  27. data/distro/common/html/knife.1.html +4 -4
  28. data/distro/common/man/man1/chef-shell.1 +1 -1
  29. data/distro/common/man/man1/knife-bootstrap.1 +1 -1
  30. data/distro/common/man/man1/knife-client.1 +1 -1
  31. data/distro/common/man/man1/knife-configure.1 +1 -1
  32. data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
  33. data/distro/common/man/man1/knife-cookbook.1 +2 -15
  34. data/distro/common/man/man1/knife-data-bag.1 +2 -15
  35. data/distro/common/man/man1/knife-environment.1 +2 -12
  36. data/distro/common/man/man1/knife-exec.1 +1 -1
  37. data/distro/common/man/man1/knife-index.1 +1 -1
  38. data/distro/common/man/man1/knife-node.1 +1 -1
  39. data/distro/common/man/man1/knife-role.1 +1 -1
  40. data/distro/common/man/man1/knife-search.1 +1 -1
  41. data/distro/common/man/man1/knife-ssh.1 +1 -1
  42. data/distro/common/man/man1/knife-status.1 +1 -1
  43. data/distro/common/man/man1/knife-tag.1 +1 -1
  44. data/distro/common/man/man1/knife.1 +1 -1
  45. data/distro/common/man/man8/chef-client.8 +1 -1
  46. data/distro/common/man/man8/chef-expander.8 +1 -1
  47. data/distro/common/man/man8/chef-expanderctl.8 +1 -1
  48. data/distro/common/man/man8/chef-server-webui.8 +1 -1
  49. data/distro/common/man/man8/chef-server.8 +1 -1
  50. data/distro/common/man/man8/chef-solo.8 +4 -36
  51. data/distro/common/man/man8/chef-solr.8 +1 -1
  52. data/distro/debian/etc/init.d/chef-client +4 -2
  53. data/distro/windows/service_manager.rb +2 -146
  54. data/lib/chef.rb +1 -1
  55. data/lib/chef/application.rb +5 -12
  56. data/lib/chef/application/apply.rb +2 -0
  57. data/lib/chef/application/client.rb +12 -12
  58. data/lib/chef/application/knife.rb +2 -2
  59. data/lib/chef/application/solo.rb +4 -5
  60. data/lib/chef/application/windows_service.rb +113 -56
  61. data/lib/chef/application/windows_service_manager.rb +179 -0
  62. data/lib/chef/chef_fs.rb +2 -4
  63. data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
  64. data/lib/chef/chef_fs/command_line.rb +145 -93
  65. data/lib/chef/chef_fs/config.rb +205 -0
  66. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -0
  67. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +38 -0
  68. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +29 -0
  69. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -0
  70. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +56 -0
  71. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +128 -0
  72. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -0
  73. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +51 -0
  74. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -0
  75. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -0
  76. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +27 -0
  77. data/lib/chef/chef_fs/file_system.rb +195 -127
  78. data/lib/chef/chef_fs/file_system/acl_dir.rb +64 -0
  79. data/lib/chef/chef_fs/file_system/acl_entry.rb +58 -0
  80. data/lib/chef/chef_fs/file_system/acls_dir.rb +68 -0
  81. data/lib/chef/chef_fs/file_system/already_exists_error.rb +31 -0
  82. data/lib/chef/chef_fs/file_system/base_fs_object.rb +98 -39
  83. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +85 -0
  84. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +71 -0
  85. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +55 -0
  86. data/lib/chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +36 -0
  87. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +14 -63
  88. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +93 -3
  89. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +35 -9
  90. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +67 -32
  91. data/lib/chef/chef_fs/file_system/cookbook_file.rb +13 -6
  92. data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
  93. data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
  94. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +102 -21
  95. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +12 -21
  96. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +14 -8
  97. data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +36 -0
  98. data/lib/chef/chef_fs/file_system/environments_dir.rb +60 -0
  99. data/lib/chef/chef_fs/file_system/file_system_entry.rb +8 -8
  100. data/lib/chef/chef_fs/file_system/file_system_error.rb +3 -1
  101. data/lib/chef/chef_fs/file_system/memory_dir.rb +52 -0
  102. data/lib/chef/chef_fs/file_system/memory_file.rb +17 -0
  103. data/lib/chef/chef_fs/file_system/memory_root.rb +21 -0
  104. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +48 -0
  105. data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +2 -2
  106. data/lib/chef/chef_fs/file_system/nodes_dir.rb +17 -9
  107. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +0 -4
  108. data/lib/chef/chef_fs/file_system/not_found_error.rb +2 -2
  109. data/lib/chef/chef_fs/file_system/operation_failed_error.rb +34 -0
  110. data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +48 -0
  111. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +42 -13
  112. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +81 -27
  113. data/lib/chef/chef_fs/knife.rb +68 -29
  114. data/lib/chef/chef_fs/parallelizer.rb +129 -0
  115. data/lib/chef/chef_fs/path_utils.rb +29 -3
  116. data/lib/chef/chef_fs/raw_request.rb +79 -0
  117. data/lib/chef/client.rb +46 -20
  118. data/lib/chef/config.rb +59 -61
  119. data/lib/chef/cookbook/chefignore.rb +2 -1
  120. data/lib/chef/cookbook/synchronizer.rb +8 -6
  121. data/lib/chef/cookbook/syntax_check.rb +17 -2
  122. data/lib/chef/cookbook_uploader.rb +10 -1
  123. data/lib/chef/cookbook_version.rb +0 -109
  124. data/lib/chef/data_bag.rb +15 -6
  125. data/lib/chef/deprecation/mixin/template.rb +49 -0
  126. data/lib/chef/deprecation/provider/cookbook_file.rb +55 -0
  127. data/lib/chef/deprecation/provider/file.rb +197 -0
  128. data/lib/chef/deprecation/provider/remote_file.rb +86 -0
  129. data/lib/chef/deprecation/provider/template.rb +63 -0
  130. data/lib/chef/deprecation/warnings.rb +38 -0
  131. data/lib/chef/encrypted_data_bag_item.rb +153 -61
  132. data/lib/chef/environment.rb +34 -3
  133. data/lib/chef/event_dispatch/base.rb +3 -0
  134. data/lib/chef/exceptions.rb +27 -2
  135. data/lib/chef/file_access_control/unix.rb +64 -7
  136. data/lib/chef/file_access_control/windows.rb +22 -11
  137. data/lib/chef/file_content_management/content_base.rb +56 -0
  138. data/lib/chef/file_content_management/deploy.rb +38 -0
  139. data/lib/chef/file_content_management/deploy/cp.rb +48 -0
  140. data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -0
  141. data/lib/chef/file_content_management/deploy/mv_windows.rb +95 -0
  142. data/lib/chef/file_content_management/tempfile.rb +61 -0
  143. data/lib/chef/formatters/doc.rb +1 -1
  144. data/lib/chef/formatters/error_descriptor.rb +5 -4
  145. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +23 -3
  146. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +4 -0
  147. data/lib/chef/json_compat.rb +3 -0
  148. data/lib/chef/knife.rb +12 -3
  149. data/lib/chef/knife/bootstrap.rb +46 -2
  150. data/lib/chef/knife/bootstrap/archlinux-gems.erb +3 -3
  151. data/lib/chef/knife/bootstrap/centos5-gems.erb +3 -3
  152. data/lib/chef/knife/bootstrap/chef-full.erb +4 -4
  153. data/lib/chef/knife/bootstrap/fedora13-gems.erb +3 -3
  154. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +3 -3
  155. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +3 -3
  156. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +3 -3
  157. data/lib/chef/knife/client_show.rb +2 -5
  158. data/lib/chef/knife/configure.rb +3 -3
  159. data/lib/chef/knife/cookbook_create.rb +6 -5
  160. data/lib/chef/knife/cookbook_download.rb +13 -5
  161. data/lib/chef/knife/cookbook_site_share.rb +1 -0
  162. data/lib/chef/knife/cookbook_test.rb +1 -0
  163. data/lib/chef/knife/cookbook_upload.rb +4 -9
  164. data/lib/chef/knife/core/bootstrap_context.rb +10 -4
  165. data/lib/chef/knife/core/generic_presenter.rb +16 -0
  166. data/lib/chef/knife/core/node_editor.rb +1 -1
  167. data/lib/chef/knife/core/subcommand_loader.rb +43 -12
  168. data/lib/chef/knife/core/ui.rb +19 -4
  169. data/lib/chef/knife/delete.rb +76 -9
  170. data/lib/chef/knife/deps.rb +139 -0
  171. data/lib/chef/knife/diff.rb +22 -5
  172. data/lib/chef/knife/download.rb +16 -3
  173. data/lib/chef/knife/edit.rb +76 -0
  174. data/lib/chef/knife/environment_show.rb +2 -7
  175. data/lib/chef/knife/list.rb +91 -47
  176. data/lib/chef/knife/node_run_list_set.rb +66 -0
  177. data/lib/chef/knife/node_show.rb +1 -7
  178. data/lib/chef/knife/raw.rb +20 -64
  179. data/lib/chef/knife/role_show.rb +2 -4
  180. data/lib/chef/knife/search.rb +5 -6
  181. data/lib/chef/knife/show.rb +34 -11
  182. data/lib/chef/knife/ssh.rb +8 -0
  183. data/lib/chef/knife/upload.rb +23 -4
  184. data/lib/chef/knife/user_show.rb +2 -5
  185. data/lib/chef/knife/xargs.rb +265 -0
  186. data/lib/chef/log.rb +2 -2
  187. data/lib/chef/mixin/file_class.rb +0 -9
  188. data/lib/chef/mixin/language_include_recipe.rb +1 -1
  189. data/lib/chef/mixin/params_validate.rb +19 -9
  190. data/lib/chef/mixin/template.rb +126 -36
  191. data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
  192. data/lib/chef/monkey_patches/file.rb +26 -0
  193. data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
  194. data/lib/chef/monkey_patches/securerandom.rb +44 -0
  195. data/lib/chef/monologger.rb +93 -0
  196. data/lib/chef/node.rb +4 -0
  197. data/lib/chef/platform.rb +4 -490
  198. data/lib/chef/platform/provider_mapping.rb +529 -0
  199. data/lib/chef/{monkey_patches/dir.rb → platform/query_helpers.rb} +25 -19
  200. data/lib/chef/provider.rb +12 -9
  201. data/lib/chef/provider/batch.rb +35 -0
  202. data/lib/chef/provider/cookbook_file.rb +9 -78
  203. data/lib/chef/provider/cookbook_file/content.rb +49 -0
  204. data/lib/chef/provider/deploy.rb +24 -20
  205. data/lib/chef/provider/deploy/revision.rb +27 -0
  206. data/lib/chef/provider/directory.rb +19 -22
  207. data/lib/chef/provider/execute.rb +22 -5
  208. data/lib/chef/provider/file.rb +299 -217
  209. data/lib/chef/provider/file/content.rb +39 -0
  210. data/lib/chef/provider/git.rb +76 -43
  211. data/lib/chef/provider/group/usermod.rb +2 -2
  212. data/lib/chef/provider/ifconfig.rb +25 -35
  213. data/lib/chef/provider/ifconfig/debian.rb +71 -0
  214. data/lib/chef/provider/ifconfig/redhat.rb +47 -0
  215. data/lib/chef/provider/link.rb +10 -3
  216. data/lib/chef/provider/mount.rb +1 -1
  217. data/lib/chef/provider/mount/mount.rb +8 -3
  218. data/lib/chef/provider/mount/windows.rb +4 -1
  219. data/lib/chef/provider/package/portage.rb +9 -4
  220. data/lib/chef/provider/package/rubygems.rb +45 -10
  221. data/lib/chef/provider/package/smartos.rb +47 -36
  222. data/lib/chef/provider/package/yum.rb +19 -12
  223. data/lib/chef/provider/package/zypper.rb +45 -55
  224. data/lib/chef/provider/powershell_script.rb +77 -0
  225. data/lib/chef/provider/remote_directory.rb +5 -6
  226. data/lib/chef/provider/remote_file.rb +12 -108
  227. data/lib/chef/provider/remote_file/cache_control_data.rb +165 -0
  228. data/lib/chef/provider/remote_file/content.rb +75 -0
  229. data/lib/chef/provider/remote_file/fetcher.rb +43 -0
  230. data/lib/chef/provider/remote_file/ftp.rb +183 -0
  231. data/lib/chef/provider/remote_file/http.rb +124 -0
  232. data/lib/chef/provider/remote_file/local_file.rb +47 -0
  233. data/lib/chef/provider/route.rb +6 -2
  234. data/lib/chef/provider/script.rb +14 -2
  235. data/lib/chef/provider/service/macosx.rb +16 -10
  236. data/lib/chef/provider/service/solaris.rb +6 -5
  237. data/lib/chef/provider/template.rb +16 -78
  238. data/lib/chef/provider/template/content.rb +61 -0
  239. data/lib/chef/provider/user/solaris.rb +90 -0
  240. data/lib/chef/provider/user/useradd.rb +76 -63
  241. data/lib/chef/provider/windows_script.rb +73 -0
  242. data/lib/chef/providers.rb +16 -0
  243. data/lib/chef/resource.rb +23 -2
  244. data/lib/chef/resource/batch.rb +31 -0
  245. data/lib/chef/resource/conditional.rb +4 -0
  246. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -0
  247. data/lib/chef/resource/file.rb +31 -3
  248. data/lib/chef/resource/link.rb +17 -0
  249. data/lib/chef/resource/lwrp_base.rb +1 -1
  250. data/lib/chef/resource/mount.rb +29 -2
  251. data/lib/chef/resource/powershell_script.rb +31 -0
  252. data/lib/chef/resource/remote_file.rb +47 -1
  253. data/lib/chef/resource/route.rb +1 -1
  254. data/lib/chef/resource/template.rb +145 -0
  255. data/lib/chef/resource/windows_script.rb +62 -0
  256. data/lib/chef/resource_collection.rb +45 -11
  257. data/lib/chef/resource_reporter.rb +81 -52
  258. data/lib/chef/resources.rb +2 -0
  259. data/lib/chef/rest.rb +13 -4
  260. data/lib/chef/rest/rest_request.rb +5 -1
  261. data/lib/chef/run_context/cookbook_compiler.rb +3 -3
  262. data/lib/chef/run_list/run_list_expansion.rb +1 -1
  263. data/lib/chef/run_lock.rb +7 -1
  264. data/lib/chef/runner.rb +0 -1
  265. data/lib/chef/scan_access_control.rb +6 -1
  266. data/lib/chef/search/query.rb +2 -2
  267. data/lib/chef/shell/shell_session.rb +2 -2
  268. data/lib/chef/util/backup.rb +84 -0
  269. data/lib/chef/util/diff.rb +145 -0
  270. data/lib/chef/util/file_edit.rb +1 -1
  271. data/lib/chef/util/selinux.rb +100 -0
  272. data/lib/chef/util/windows/net_user.rb +14 -1
  273. data/lib/chef/util/windows/volume.rb +2 -2
  274. data/lib/chef/version.rb +1 -1
  275. data/lib/chef/version/platform.rb +42 -0
  276. data/lib/chef/version_class.rb +1 -1
  277. data/lib/chef/version_constraint.rb +6 -5
  278. data/lib/chef/version_constraint/platform.rb +26 -0
  279. data/lib/chef/win32/api/file.rb +8 -2
  280. data/lib/chef/win32/version.rb +25 -8
  281. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -0
  282. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -0
  283. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -0
  284. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -0
  285. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -0
  286. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -0
  287. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -0
  288. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -0
  289. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -0
  290. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -0
  291. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -0
  292. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -0
  293. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -0
  294. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -0
  295. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -0
  296. data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
  297. data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
  298. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -0
  299. data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
  300. data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
  301. data/spec/data/apt/var/www/apt/conf/distributions +7 -0
  302. data/spec/data/apt/var/www/apt/conf/incoming +4 -0
  303. data/spec/data/apt/var/www/apt/conf/pulls +3 -0
  304. data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
  305. data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
  306. data/spec/data/apt/var/www/apt/db/packages.db +0 -0
  307. data/spec/data/apt/var/www/apt/db/references.db +0 -0
  308. data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
  309. data/spec/data/apt/var/www/apt/db/version +4 -0
  310. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -0
  311. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -0
  312. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
  313. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -0
  314. data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
  315. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
  316. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
  317. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -0
  318. data/spec/data/bootstrap/secret.erb +9 -0
  319. data/spec/data/cookbooks/ignorken/recipes/default.rb +1 -0
  320. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +2 -0
  321. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -0
  322. data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +1 -0
  323. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -0
  324. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -0
  325. data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +4 -0
  326. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -0
  327. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -0
  328. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -0
  329. data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +4 -0
  330. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -0
  331. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -0
  332. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -0
  333. data/spec/data/git_bundles/example-repo.gitbundle +0 -0
  334. data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
  335. data/spec/data/knife_subcommand/test_yourself.rb +8 -0
  336. data/spec/data/null_config.rb +1 -0
  337. data/spec/data/partial_one.erb +1 -1
  338. data/spec/data/remote_file/nyan_cat.png.gz +0 -0
  339. data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
  340. data/spec/functional/knife/exec_spec.rb +2 -2
  341. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +101 -0
  342. data/spec/functional/resource/batch_spec.rb +64 -0
  343. data/spec/functional/resource/cookbook_file_spec.rb +2 -3
  344. data/spec/functional/resource/deploy_revision_spec.rb +180 -0
  345. data/spec/functional/resource/directory_spec.rb +2 -2
  346. data/spec/functional/resource/file_spec.rb +17 -1
  347. data/spec/functional/resource/git_spec.rb +259 -0
  348. data/spec/functional/resource/link_spec.rb +422 -388
  349. data/spec/functional/resource/package_spec.rb +297 -0
  350. data/spec/functional/resource/powershell_spec.rb +188 -0
  351. data/spec/functional/resource/registry_spec.rb +8 -4
  352. data/spec/functional/resource/remote_directory_spec.rb +2 -2
  353. data/spec/functional/resource/remote_file_spec.rb +97 -29
  354. data/spec/functional/resource/template_spec.rb +173 -17
  355. data/spec/functional/resource/user_spec.rb +547 -0
  356. data/spec/functional/run_lock_spec.rb +5 -0
  357. data/spec/functional/shell_spec.rb +2 -1
  358. data/spec/functional/win32/service_manager_spec.rb +269 -0
  359. data/spec/functional/win32/versions_spec.rb +78 -0
  360. data/spec/integration/knife/chef_repo_path_spec.rb +805 -0
  361. data/spec/integration/knife/chef_repository_file_system_spec.rb +276 -0
  362. data/spec/integration/knife/chefignore_spec.rb +271 -0
  363. data/spec/integration/knife/delete_spec.rb +944 -0
  364. data/spec/integration/knife/deps_spec.rb +648 -0
  365. data/spec/integration/knife/diff_spec.rb +536 -0
  366. data/spec/integration/knife/download_spec.rb +962 -0
  367. data/spec/integration/knife/list_spec.rb +633 -0
  368. data/spec/integration/knife/raw_spec.rb +166 -0
  369. data/spec/integration/knife/redirection_spec.rb +57 -0
  370. data/spec/integration/knife/show_spec.rb +158 -0
  371. data/spec/integration/knife/upload_spec.rb +1060 -0
  372. data/spec/integration/solo/solo_spec.rb +41 -0
  373. data/spec/spec_helper.rb +55 -1
  374. data/spec/support/chef_helpers.rb +32 -0
  375. data/spec/support/platform_helpers.rb +40 -0
  376. data/spec/support/platforms/win32/spec_service.rb +59 -0
  377. data/spec/support/shared/functional/directory_resource.rb +43 -16
  378. data/spec/support/shared/functional/file_resource.rb +661 -20
  379. data/spec/support/shared/functional/securable_resource.rb +109 -8
  380. data/spec/support/shared/functional/securable_resource_with_reporting.rb +39 -31
  381. data/spec/support/shared/integration/integration_helper.rb +166 -0
  382. data/spec/support/shared/integration/knife_support.rb +171 -0
  383. data/spec/support/shared/unit/execute_resource.rb +125 -0
  384. data/spec/support/shared/unit/file_system_support.rb +8 -48
  385. data/spec/support/shared/unit/provider/file.rb +609 -0
  386. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +407 -0
  387. data/spec/support/shared/unit/script_resource.rb +52 -0
  388. data/spec/support/shared/unit/windows_script_resource.rb +48 -0
  389. data/spec/tiny_server.rb +13 -11
  390. data/spec/unit/application/client_spec.rb +39 -1
  391. data/spec/unit/application/knife_spec.rb +12 -0
  392. data/spec/unit/application/solo_spec.rb +1 -1
  393. data/spec/unit/application_spec.rb +57 -2
  394. data/spec/unit/chef_fs/diff_spec.rb +30 -31
  395. data/spec/unit/chef_fs/file_pattern_spec.rb +2 -2
  396. data/spec/unit/chef_fs/file_system_spec.rb +2 -3
  397. data/spec/unit/client_spec.rb +20 -1
  398. data/spec/unit/config_spec.rb +70 -52
  399. data/spec/unit/cookbook/synchronizer_spec.rb +49 -1
  400. data/spec/unit/cookbook/syntax_check_spec.rb +28 -3
  401. data/spec/unit/cookbook_loader_spec.rb +3 -2
  402. data/spec/unit/daemon_spec.rb +7 -7
  403. data/spec/unit/data_bag_spec.rb +7 -0
  404. data/spec/unit/deprecation_spec.rb +86 -0
  405. data/spec/unit/encrypted_data_bag_item_spec.rb +183 -88
  406. data/spec/unit/environment_spec.rb +98 -0
  407. data/spec/unit/exceptions_spec.rb +6 -1
  408. data/spec/unit/file_access_control_spec.rb +21 -1
  409. data/spec/unit/file_content_management/deploy/cp_spec.rb +46 -0
  410. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +103 -0
  411. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +179 -0
  412. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +38 -2
  413. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +3 -2
  414. data/spec/unit/knife/bootstrap_spec.rb +128 -29
  415. data/spec/unit/knife/configure_spec.rb +42 -26
  416. data/spec/unit/knife/cookbook_download_spec.rb +24 -3
  417. data/spec/unit/knife/cookbook_upload_spec.rb +8 -4
  418. data/spec/unit/knife/core/bootstrap_context_spec.rb +78 -61
  419. data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
  420. data/spec/unit/knife/core/ui_spec.rb +41 -0
  421. data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
  422. data/spec/unit/knife_spec.rb +21 -0
  423. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +1 -0
  424. data/spec/unit/mixin/params_validate_spec.rb +35 -0
  425. data/spec/unit/mixin/template_spec.rb +69 -57
  426. data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
  427. data/spec/unit/node_spec.rb +7 -0
  428. data/spec/unit/platform_spec.rb +15 -1
  429. data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
  430. data/spec/unit/provider/cookbook_file_spec.rb +26 -183
  431. data/spec/unit/provider/cron/solaris_spec.rb +1 -1
  432. data/spec/unit/provider/deploy/revision_spec.rb +19 -11
  433. data/spec/unit/provider/deploy_spec.rb +2 -2
  434. data/spec/unit/provider/directory_spec.rb +23 -23
  435. data/spec/unit/provider/execute_spec.rb +27 -1
  436. data/spec/unit/provider/file/content_spec.rb +101 -0
  437. data/spec/unit/provider/file_spec.rb +25 -484
  438. data/spec/unit/provider/git_spec.rb +224 -28
  439. data/spec/unit/provider/group/usermod_spec.rb +3 -1
  440. data/spec/unit/provider/ifconfig/debian_spec.rb +89 -0
  441. data/spec/unit/provider/ifconfig/redhat_spec.rb +71 -0
  442. data/spec/unit/provider/ifconfig_spec.rb +0 -33
  443. data/spec/unit/provider/mount/mount_spec.rb +33 -2
  444. data/spec/unit/provider/mount/windows_spec.rb +4 -1
  445. data/spec/unit/provider/mount_spec.rb +16 -6
  446. data/spec/unit/provider/package/portage_spec.rb +44 -0
  447. data/spec/unit/provider/package/rubygems_spec.rb +44 -1
  448. data/spec/unit/provider/package/smartos_spec.rb +3 -2
  449. data/spec/unit/provider/package/yum_spec.rb +36 -39
  450. data/spec/unit/provider/package/zypper_spec.rb +84 -22
  451. data/spec/unit/provider/package_spec.rb +0 -4
  452. data/spec/unit/provider/powershell_spec.rb +38 -0
  453. data/spec/unit/provider/remote_directory_spec.rb +0 -4
  454. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +211 -0
  455. data/spec/unit/provider/remote_file/content_spec.rb +230 -0
  456. data/spec/unit/provider/remote_file/fetcher_spec.rb +75 -0
  457. data/spec/unit/provider/remote_file/ftp_spec.rb +224 -0
  458. data/spec/unit/provider/remote_file/http_spec.rb +319 -0
  459. data/spec/unit/provider/remote_file/local_file_spec.rb +60 -0
  460. data/spec/unit/provider/remote_file_spec.rb +33 -295
  461. data/spec/unit/provider/route_spec.rb +25 -9
  462. data/spec/unit/provider/service/macosx_spec.rb +176 -152
  463. data/spec/unit/provider/service/solaris_smf_service_spec.rb +21 -18
  464. data/spec/unit/provider/service/systemd_service_spec.rb +2 -2
  465. data/spec/unit/provider/service/upstart_service_spec.rb +2 -2
  466. data/spec/unit/provider/service_spec.rb +3 -3
  467. data/spec/unit/provider/template/content_spec.rb +78 -0
  468. data/spec/unit/provider/template_spec.rb +52 -184
  469. data/spec/unit/provider/user/solaris_spec.rb +80 -0
  470. data/spec/unit/provider/user/useradd_spec.rb +12 -358
  471. data/spec/unit/resource/batch_spec.rb +48 -0
  472. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -0
  473. data/spec/unit/resource/execute_spec.rb +3 -101
  474. data/spec/unit/resource/file_spec.rb +0 -5
  475. data/spec/unit/resource/group_spec.rb +9 -0
  476. data/spec/unit/resource/ifconfig_spec.rb +60 -1
  477. data/spec/unit/resource/link_spec.rb +1 -0
  478. data/spec/unit/resource/mount_spec.rb +37 -0
  479. data/spec/unit/resource/powershell_spec.rb +48 -0
  480. data/spec/unit/resource/remote_file_spec.rb +44 -4
  481. data/spec/unit/resource/route_spec.rb +1 -1
  482. data/spec/unit/resource/script_spec.rb +13 -36
  483. data/spec/unit/resource/template_spec.rb +111 -8
  484. data/spec/unit/resource/user_spec.rb +7 -0
  485. data/spec/unit/resource_collection_spec.rb +61 -32
  486. data/spec/unit/resource_reporter_spec.rb +115 -102
  487. data/spec/unit/resource_spec.rb +170 -1
  488. data/spec/unit/rest/auth_credentials_spec.rb +2 -2
  489. data/spec/unit/rest_spec.rb +6 -2
  490. data/spec/unit/run_context/cookbook_compiler_spec.rb +9 -0
  491. data/spec/unit/runner_spec.rb +1 -1
  492. data/spec/unit/scan_access_control_spec.rb +4 -2
  493. data/spec/unit/shell/shell_session_spec.rb +15 -2
  494. data/spec/unit/util/backup_spec.rb +149 -0
  495. data/spec/unit/util/diff_spec.rb +596 -0
  496. data/spec/unit/util/selinux_spec.rb +172 -0
  497. data/spec/unit/version/platform_spec.rb +61 -0
  498. data/spec/unit/version_constraint/platform_spec.rb +46 -0
  499. data/spec/unit/version_constraint_spec.rb +5 -0
  500. metadata +233 -10
  501. data/lib/chef/chef_fs/file_system/data_bag_item.rb +0 -59
  502. data/spec/unit/chef_fs/file_system/chef_server_root_dir_spec.rb +0 -237
  503. data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +0 -568
  504. data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +0 -220
@@ -0,0 +1,39 @@
1
+ #
2
+ # Author:: Lamont Granquist (<lamont@opscode.com>)
3
+ # Copyright:: Copyright (c) 2013 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/file_content_management/content_base'
20
+ require 'chef/file_content_management/tempfile'
21
+
22
+ class Chef
23
+ class Provider
24
+ class File
25
+ class Content < Chef::FileContentManagement::ContentBase
26
+ def file_for_provider
27
+ if @new_resource.content
28
+ tempfile = Chef::FileContentManagement::Tempfile.new(@new_resource).tempfile
29
+ tempfile.write(@new_resource.content)
30
+ tempfile.close
31
+ tempfile
32
+ else
33
+ nil
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -21,14 +21,13 @@ require 'chef/log'
21
21
  require 'chef/provider'
22
22
  require 'chef/mixin/shell_out'
23
23
  require 'fileutils'
24
- require 'shellwords'
25
24
 
26
25
  class Chef
27
26
  class Provider
28
27
  class Git < Chef::Provider
29
28
 
30
29
  include Chef::Mixin::ShellOut
31
-
30
+
32
31
  def whyrun_supported?
33
32
  true
34
33
  end
@@ -42,7 +41,7 @@ class Chef
42
41
  end
43
42
 
44
43
  def define_resource_requirements
45
- # Parent directory of the target must exist.
44
+ # Parent directory of the target must exist.
46
45
  requirements.assert(:checkout, :sync) do |a|
47
46
  dirname = ::File.dirname(@new_resource.destination)
48
47
  a.assertion { ::File.directory?(dirname) }
@@ -62,16 +61,16 @@ class Chef
62
61
  end
63
62
 
64
63
  requirements.assert(:all_actions) do |a|
65
- # this can't be recovered from in why-run mode, because nothing that
66
- # we do in the course of a run is likely to create a valid target_revision
64
+ # this can't be recovered from in why-run mode, because nothing that
65
+ # we do in the course of a run is likely to create a valid target_revision
67
66
  # if we can't resolve it up front.
68
67
  a.assertion { target_revision != nil }
69
- a.failure_message Chef::Exceptions::UnresolvableGitReference,
68
+ a.failure_message Chef::Exceptions::UnresolvableGitReference,
70
69
  "Unable to parse SHA reference for '#{@new_resource.revision}' in repository '#{@new_resource.repository}'. " +
71
- "Verify your (case-sensitive) repository URL and revision.\n" +
70
+ "Verify your (case-sensitive) repository URL and revision.\n" +
72
71
  "`git ls-remote` output: #{@resolved_reference}"
73
72
  end
74
- end
73
+ end
75
74
 
76
75
  def action_checkout
77
76
  if target_dir_non_existent_or_empty?
@@ -86,7 +85,7 @@ class Chef
86
85
 
87
86
  def action_export
88
87
  action_checkout
89
- converge_by("complete the export by removing #{@new_resource.destination}.git after checkout") do
88
+ converge_by("complete the export by removing #{@new_resource.destination}.git after checkout") do
90
89
  FileUtils.rm_rf(::File.join(@new_resource.destination,".git"))
91
90
  end
92
91
  end
@@ -129,16 +128,13 @@ class Chef
129
128
  @new_resource.additional_remotes.each_pair do |remote_name, remote_url|
130
129
  converge_by("add remote #{remote_name} from #{remote_url}") do
131
130
  Chef::Log.info "#{@new_resource} adding git remote #{remote_name} = #{remote_url}"
132
- command = "git remote add #{remote_name} #{remote_url}"
133
- if shell_out(command, run_options(:cwd => @new_resource.destination, :log_level => :info)).exitstatus != 0
134
- @new_resource.updated_by_last_action(true)
135
- end
131
+ setup_remote_tracking_branches(remote_name, remote_url)
136
132
  end
137
133
  end
138
134
  end
139
135
  end
140
136
 
141
- def clone
137
+ def clone
142
138
  converge_by("clone from #{@new_resource.repository} into #{@new_resource.destination}") do
143
139
  remote = @new_resource.remote
144
140
 
@@ -148,8 +144,8 @@ class Chef
148
144
 
149
145
  Chef::Log.info "#{@new_resource} cloning repo #{@new_resource.repository} to #{@new_resource.destination}"
150
146
 
151
- clone_cmd = "git clone #{args.join(' ')} #{@new_resource.repository} #{Shellwords.escape @new_resource.destination}"
152
- shell_out!(clone_cmd, run_options(:log_level => :info))
147
+ clone_cmd = "git clone #{args.join(' ')} \"#{@new_resource.repository}\" \"#{@new_resource.destination}\""
148
+ shell_out!(clone_cmd, run_options)
153
149
  end
154
150
  end
155
151
 
@@ -164,17 +160,20 @@ class Chef
164
160
 
165
161
  def enable_submodules
166
162
  if @new_resource.enable_submodules
167
- converge_by("enable git submodules for #{@new_resource}") do
163
+ converge_by("enable git submodules for #{@new_resource}") do
164
+ Chef::Log.info "#{@new_resource} synchronizing git submodules"
165
+ command = "git submodule sync"
166
+ shell_out!(command, run_options(:cwd => @new_resource.destination))
168
167
  Chef::Log.info "#{@new_resource} enabling git submodules"
169
168
  # the --recursive flag means we require git 1.6.5+ now, see CHEF-1827
170
169
  command = "git submodule update --init --recursive"
171
- shell_out!(command, run_options(:cwd => @new_resource.destination, :log_level => :info))
170
+ shell_out!(command, run_options(:cwd => @new_resource.destination))
172
171
  end
173
172
  end
174
173
  end
175
174
 
176
175
  def fetch_updates
177
- setup_remote_tracking_branches if @new_resource.remote != 'origin'
176
+ setup_remote_tracking_branches(@new_resource.remote, @new_resource.repository)
178
177
  converge_by("fetch updates for #{@new_resource.remote}") do
179
178
  # since we're in a local branch already, just reset to specified revision rather than merge
180
179
  fetch_command = "git fetch #{@new_resource.remote} && git fetch #{@new_resource.remote} --tags && git reset --hard #{target_revision}"
@@ -183,23 +182,38 @@ class Chef
183
182
  end
184
183
  end
185
184
 
186
- # Use git-config to setup a remote tracking branches. Could use
187
- # git-remote but it complains when a remote of the same name already
188
- # exists, git-config will just silenty overwrite the setting every
189
- # time. This could cause wierd-ness in the remote cache if the url
190
- # changes between calls, but as long as the repositories are all
191
- # based from each other it should still work fine.
192
- def setup_remote_tracking_branches
193
- command = []
194
- converge_by("set up remote tracking branches for #{@new_resource.repository} at #{@new_resource.remote}") do
195
- Chef::Log.debug "#{@new_resource} configuring remote tracking branches for repository #{@new_resource.repository} "+
196
- "at remote #{@new_resource.remote}"
197
- command << "git config remote.#{@new_resource.remote}.url #{@new_resource.repository}"
198
- command << "git config remote.#{@new_resource.remote}.fetch +refs/heads/*:refs/remotes/#{@new_resource.remote}/*"
199
- shell_out!(command.join(" && "), run_options(:cwd => @new_resource.destination))
185
+ def setup_remote_tracking_branches(remote_name, remote_url)
186
+ converge_by("set up remote tracking branches for #{remote_url} at #{remote_name}") do
187
+ Chef::Log.debug "#{@new_resource} configuring remote tracking branches for repository #{remote_url} "+
188
+ "at remote #{remote_name}"
189
+ check_remote_command = "git config --get remote.#{remote_name}.url"
190
+ remote_status = shell_out!(check_remote_command, run_options(:cwd => @new_resource.destination, :returns => [0,1,2]))
191
+ case remote_status.exitstatus
192
+ when 0, 2
193
+ # * Status 0 means that we already have a remote with this name, so we should update the url
194
+ # if it doesn't match the url we want.
195
+ # * Status 2 means that we have multiple urls assigned to the same remote (not a good idea)
196
+ # which we can fix by replacing them all with our target url (hence the --replace-all option)
197
+
198
+ if multiple_remotes?(remote_status) || !remote_matches?(remote_url,remote_status)
199
+ update_remote_url_command = "git config --replace-all remote.#{remote_name}.url #{remote_url}"
200
+ shell_out!(update_remote_url_command, run_options(:cwd => @new_resource.destination))
201
+ end
202
+ when 1
203
+ add_remote_command = "git remote add #{remote_name} #{remote_url}"
204
+ shell_out!(add_remote_command, run_options(:cwd => @new_resource.destination))
205
+ end
200
206
  end
201
207
  end
202
208
 
209
+ def multiple_remotes?(check_remote_command_result)
210
+ check_remote_command_result.exitstatus == 2
211
+ end
212
+
213
+ def remote_matches?(remote_url, check_remote_command_result)
214
+ check_remote_command_result.stdout.strip.eql?(remote_url)
215
+ end
216
+
203
217
  def current_revision_matches_target_revision?
204
218
  (!@current_resource.revision.nil?) && (target_revision.strip.to_i(16) == @current_resource.revision.strip.to_i(16))
205
219
  end
@@ -218,12 +232,37 @@ class Chef
218
232
 
219
233
  def remote_resolve_reference
220
234
  Chef::Log.debug("#{@new_resource} resolving remote reference")
221
- command = git('ls-remote', @new_resource.repository, @new_resource.revision)
235
+ # The sha pointed to by an annotated tag is identified by the
236
+ # '^{}' suffix appended to the tag. In order to resolve
237
+ # annotated tags, we have to search for "revision*" and
238
+ # post-process. Special handling for 'HEAD' to ignore a tag
239
+ # named 'HEAD'.
240
+ rev_pattern = case @new_resource.revision
241
+ when '', 'HEAD'
242
+ 'HEAD'
243
+ else
244
+ @new_resource.revision + '*'
245
+ end
246
+ command = git("ls-remote \"#{@new_resource.repository}\"", rev_pattern)
222
247
  @resolved_reference = shell_out!(command, run_options).stdout
223
- if @resolved_reference =~ /^([0-9a-f]{40})\s+(\S+)/
224
- $1
248
+ ref_lines = @resolved_reference.split("\n")
249
+ refs = ref_lines.map { |line| line.split("\t") }
250
+ # first try for ^{} indicating the commit pointed to by an
251
+ # annotated tag
252
+ tagged_commit = refs.find { |m| m[1].end_with?("#{@new_resource.revision}^{}") }
253
+ # It is possible for a user to create a tag named 'HEAD'.
254
+ # Using such a degenerate annotated tag would be very
255
+ # confusing. We avoid the issue by disallowing the use of
256
+ # annotated tags named 'HEAD'.
257
+ if tagged_commit && rev_pattern != 'HEAD'
258
+ tagged_commit[0]
225
259
  else
226
- nil
260
+ found = refs.find { |m| m[1].end_with?(@new_resource.revision) }
261
+ if found
262
+ found[0]
263
+ else
264
+ nil
265
+ end
227
266
  end
228
267
  end
229
268
 
@@ -234,12 +273,6 @@ class Chef
234
273
  run_opts[:group] = @new_resource.group if @new_resource.group
235
274
  run_opts[:environment] = {"GIT_SSH" => @new_resource.ssh_wrapper} if @new_resource.ssh_wrapper
236
275
  run_opts[:log_tag] = @new_resource.to_s
237
- run_opts[:log_level] ||= :debug
238
- if run_opts[:log_level] == :info
239
- if STDOUT.tty? && !Chef::Config[:daemon] && Chef::Log.info?
240
- run_opts[:live_stream] = STDOUT
241
- end
242
- end
243
276
  run_opts
244
277
  end
245
278
 
@@ -45,9 +45,9 @@ class Chef
45
45
 
46
46
  def modify_group_members
47
47
  case node[:platform]
48
- when "openbsd", "netbsd", "aix", "solaris2"
48
+ when "openbsd", "netbsd", "aix", "solaris2", "smartos"
49
49
  append_flags = "-G"
50
- when "solaris"
50
+ when "solaris", "suse"
51
51
  append_flags = "-a -G"
52
52
  end
53
53
 
@@ -39,6 +39,15 @@ class Chef
39
39
  class Ifconfig < Chef::Provider
40
40
  include Chef::Mixin::Command
41
41
 
42
+ attr_accessor :config_template
43
+ attr_accessor :config_path
44
+
45
+ def initialize(new_resource, run_context)
46
+ super(new_resource, run_context)
47
+ @config_template = nil
48
+ @config_path = nil
49
+ end
50
+
42
51
  def whyrun_supported?
43
52
  true
44
53
  end
@@ -163,50 +172,31 @@ class Chef
163
172
  end
164
173
  end
165
174
 
175
+ def can_generate_config?
176
+ ! @config_template.nil? and ! @config_path.nil?
177
+ end
178
+
166
179
  def generate_config
180
+ return unless can_generate_config?
167
181
  b = binding
168
- case node[:platform]
169
- when "centos","redhat","fedora"
170
- content = %{
171
- <% if @new_resource.device %>DEVICE=<%= @new_resource.device %><% end %>
172
- <% if @new_resource.onboot %>ONBOOT=<%= @new_resource.onboot %><% end %>
173
- <% if @new_resource.bootproto %>BOOTPROTO=<%= @new_resource.bootproto %><% end %>
174
- <% if @new_resource.target %>IPADDR=<%= @new_resource.target %><% end %>
175
- <% if @new_resource.mask %>NETMASK=<%= @new_resource.mask %><% end %>
176
- <% if @new_resource.network %>NETWORK=<%= @new_resource.network %><% end %>
177
- <% if @new_resource.bcast %>BROADCAST=<%= @new_resource.bcast %><% end %>
178
- <% if @new_resource.onparent %>ONPARENT=<%= @new_resource.onparent %><% end %>
179
- }
180
- template = ::ERB.new(content)
181
- network_file_name = "/etc/sysconfig/network-scripts/ifcfg-#{@new_resource.device}"
182
- converge_by ("generate configuration file : #{network_file_name}") do
183
- network_file = ::File.new(network_file_name, "w")
184
- network_file.puts(template.result(b))
185
- network_file.close
186
- end
187
- Chef::Log.info("#{@new_resource} created configuration file")
188
- when "debian","ubuntu"
189
- # template
190
- when "slackware"
191
- # template
182
+ template = ::ERB.new(@config_template)
183
+ converge_by ("generate configuration file : #{@config_path}") do
184
+ network_file = ::File.new(@config_path, "w")
185
+ network_file.puts(template.result(b))
186
+ network_file.close
192
187
  end
188
+ Chef::Log.info("#{@new_resource} created configuration file")
193
189
  end
194
190
 
195
191
  def delete_config
192
+ return unless can_generate_config?
196
193
  require 'fileutils'
197
- case node[:platform]
198
- when "centos","redhat","fedora"
199
- ifcfg_file = "/etc/sysconfig/network-scripts/ifcfg-#{@new_resource.device}"
200
- if ::File.exist?(ifcfg_file)
201
- converge_by ("delete the #{ifcfg_file}") do
202
- FileUtils.rm_f(ifcfg_file, :verbose => false)
203
- end
194
+ if ::File.exist?(@config_path)
195
+ converge_by ("delete the #{@config_path}") do
196
+ FileUtils.rm_f(@config_path, :verbose => false)
204
197
  end
205
- when "debian","ubuntu"
206
- # delete configs
207
- when "slackware"
208
- # delete configs
209
198
  end
199
+ Chef::Log.info("#{@new_resource} deleted configuration file")
210
200
  end
211
201
 
212
202
  end
@@ -0,0 +1,71 @@
1
+ #
2
+ # Author:: Xabier de Zuazo (xabier@onddo.com)
3
+ # Copyright:: Copyright (c) 2013 Onddo Labs, SL.
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/ifconfig'
20
+ require 'chef/util/file_edit'
21
+
22
+ class Chef
23
+ class Provider
24
+ class Ifconfig
25
+ class Debian < Chef::Provider::Ifconfig
26
+
27
+ def initialize(new_resource, run_context)
28
+ super(new_resource, run_context)
29
+ @config_template = %{
30
+ <% if @new_resource.device %>
31
+ <% if @new_resource.onboot == "yes" %>auto <%= @new_resource.device %><% end %>
32
+ <% case @new_resource.bootproto
33
+ when "dhcp" %>
34
+ iface <%= @new_resource.device %> inet dhcp
35
+ <% when "bootp" %>
36
+ iface <%= @new_resource.device %> inet bootp
37
+ <% else %>
38
+ iface <%= @new_resource.device %> inet static
39
+ <% if @new_resource.target %>address <%= @new_resource.target %><% end %>
40
+ <% if @new_resource.mask %>netmask <%= @new_resource.mask %><% end %>
41
+ <% if @new_resource.network %>network <%= @new_resource.network %><% end %>
42
+ <% if @new_resource.bcast %>broadcast <%= @new_resource.bcast %><% end %>
43
+ <% if @new_resource.metric %>metric <%= @new_resource.metric %><% end %>
44
+ <% if @new_resource.hwaddr %>hwaddress <%= @new_resource.hwaddr %><% end %>
45
+ <% if @new_resource.mtu %>mtu <%= @new_resource.mtu %><% end %>
46
+ <% end %>
47
+ <% end %>
48
+ }
49
+ @config_path = "/etc/network/interfaces.d/ifcfg-#{@new_resource.device}"
50
+ end
51
+
52
+ def generate_config
53
+ check_interfaces_config
54
+ super
55
+ end
56
+
57
+ protected
58
+
59
+ def check_interfaces_config
60
+ converge_by ('modify configuration file : /etc/network/interfaces') do
61
+ Dir.mkdir('/etc/network/interfaces.d') unless ::File.directory?('/etc/network/interfaces.d')
62
+ conf = Chef::Util::FileEdit.new('/etc/network/interfaces')
63
+ conf.insert_line_if_no_match('^\s*source\s+/etc/network/interfaces[.]d/[*]\s*$', 'source /etc/network/interfaces.d/*')
64
+ conf.write_file
65
+ end
66
+ end
67
+
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,47 @@
1
+ #
2
+ # Author:: Xabier de Zuazo (xabier@onddo.com)
3
+ # Copyright:: Copyright (c) 2013 Onddo Labs, SL.
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/ifconfig'
20
+
21
+ class Chef
22
+ class Provider
23
+ class Ifconfig
24
+ class Redhat < Chef::Provider::Ifconfig
25
+
26
+ def initialize(new_resource, run_context)
27
+ super(new_resource, run_context)
28
+ @config_template = %{
29
+ <% if @new_resource.device %>DEVICE=<%= @new_resource.device %><% end %>
30
+ <% if @new_resource.onboot == "yes" %>ONBOOT=<%= @new_resource.onboot %><% end %>
31
+ <% if @new_resource.bootproto %>BOOTPROTO=<%= @new_resource.bootproto %><% end %>
32
+ <% if @new_resource.target %>IPADDR=<%= @new_resource.target %><% end %>
33
+ <% if @new_resource.mask %>NETMASK=<%= @new_resource.mask %><% end %>
34
+ <% if @new_resource.network %>NETWORK=<%= @new_resource.network %><% end %>
35
+ <% if @new_resource.bcast %>BROADCAST=<%= @new_resource.bcast %><% end %>
36
+ <% if @new_resource.onparent %>ONPARENT=<%= @new_resource.onparent %><% end %>
37
+ <% if @new_resource.hwaddr %>HWADDR=<%= @new_resource.hwaddr %><% end %>
38
+ <% if @new_resource.metric %>METRIC=<%= @new_resource.metric %><% end %>
39
+ <% if @new_resource.mtu %>MTU=<%= @new_resource.mtu %><% end %>
40
+ }
41
+ @config_path = "/etc/sysconfig/network-scripts/ifcfg-#{@new_resource.device}"
42
+ end
43
+
44
+ end
45
+ end
46
+ end
47
+ end