chef 12.22.1 → 12.22.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 (2061) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +151 -151
  3. data/Gemfile +95 -95
  4. data/LICENSE +201 -201
  5. data/README.md +309 -309
  6. data/Rakefile +104 -104
  7. data/VERSION +1 -1
  8. data/acceptance/.gitignore +3 -3
  9. data/acceptance/.shared/kitchen_acceptance/.kitchen.digitalocean.yml +33 -33
  10. data/acceptance/.shared/kitchen_acceptance/.kitchen.ec2.yml +283 -283
  11. data/acceptance/.shared/kitchen_acceptance/.kitchen.vagrant.yml +59 -59
  12. data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +68 -68
  13. data/acceptance/.shared/kitchen_acceptance/metadata.rb +1 -1
  14. data/acceptance/Gemfile +16 -16
  15. data/acceptance/Gemfile.lock +258 -258
  16. data/acceptance/README.md +137 -137
  17. data/acceptance/basics/.acceptance/acceptance-cookbook/.gitignore +2 -2
  18. data/acceptance/basics/.acceptance/acceptance-cookbook/metadata.rb +3 -3
  19. data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  20. data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  21. data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  22. data/acceptance/basics/.kitchen.yml +4 -4
  23. data/acceptance/basics/test/integration/chef-current-install/serverspec/chef_client_spec.rb +19 -19
  24. data/acceptance/basics/test/integration/chef-current-install/serverspec/spec_helper.rb +6 -6
  25. data/acceptance/basics/test/integration/helpers/serverspec/Gemfile +8 -8
  26. data/acceptance/data-collector/.acceptance/acceptance-cookbook/.gitignore +2 -2
  27. data/acceptance/data-collector/.acceptance/acceptance-cookbook/metadata.rb +3 -3
  28. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/destroy.rb +2 -2
  29. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/provision.rb +2 -2
  30. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/verify.rb +2 -2
  31. data/acceptance/data-collector/.acceptance/data-collector-test/.gitignore +16 -16
  32. data/acceptance/data-collector/.acceptance/data-collector-test/Berksfile +3 -3
  33. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb +85 -85
  34. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/apigemfile +3 -3
  35. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-both-mode.rb +4 -4
  36. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-client-mode.rb +4 -4
  37. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-no-endpoint.rb +2 -2
  38. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-solo-mode.rb +4 -4
  39. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/config.ru +2 -2
  40. data/acceptance/data-collector/.acceptance/data-collector-test/metadata.rb +7 -7
  41. data/acceptance/data-collector/.acceptance/data-collector-test/recipes/default.rb +38 -38
  42. data/acceptance/data-collector/.kitchen.yml +9 -9
  43. data/acceptance/data-collector/Berksfile +3 -3
  44. data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +204 -204
  45. data/acceptance/data-collector/test/integration/helpers/serverspec/Gemfile +8 -8
  46. data/acceptance/fips/.acceptance/acceptance-cookbook/.gitignore +2 -2
  47. data/acceptance/fips/.acceptance/acceptance-cookbook/metadata.rb +2 -2
  48. data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  49. data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  50. data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  51. data/acceptance/fips/.kitchen.yml +8 -8
  52. data/acceptance/fips/test/integration/fips-integration/serverspec/Gemfile +9 -9
  53. data/acceptance/fips/test/integration/fips-integration/serverspec/fips-integration_spec.rb +52 -52
  54. data/acceptance/fips/test/integration/fips-unit-functional/serverspec/Gemfile +7 -7
  55. data/acceptance/fips/test/integration/fips-unit-functional/serverspec/fips-unit-functional_spec.rb +56 -56
  56. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/.gitignore +2 -2
  57. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/metadata.rb +1 -1
  58. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  59. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  60. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/verify.rb +61 -61
  61. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/.gitignore +2 -2
  62. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/cookbook_kitchen.rb +43 -43
  63. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +39 -39
  64. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/metadata.rb +3 -3
  65. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  66. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  67. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  68. data/acceptance/top-cookbooks/.gitignore +1 -1
  69. data/acceptance/top-cookbooks/.kitchen.chocolatey.yml +6 -6
  70. data/acceptance/top-cookbooks/.kitchen.iis.yml +4 -4
  71. data/acceptance/top-cookbooks/.kitchen.learn-the-basics-rhel.yml +7 -7
  72. data/acceptance/top-cookbooks/.kitchen.learn-the-basics-ubuntu.yml +7 -7
  73. data/acceptance/top-cookbooks/.kitchen.learn-the-basics-windows.yml +7 -7
  74. data/acceptance/top-cookbooks/.kitchen.powershell.yml +4 -4
  75. data/acceptance/top-cookbooks/.kitchen.sql_server.yml +5 -5
  76. data/acceptance/top-cookbooks/.kitchen.winbox.yml +8 -8
  77. data/acceptance/top-cookbooks/.kitchen.windows.yml +38 -38
  78. data/acceptance/trivial/.acceptance/acceptance-cookbook/.gitignore +2 -2
  79. data/acceptance/trivial/.acceptance/acceptance-cookbook/metadata.rb +2 -2
  80. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  81. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  82. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  83. data/acceptance/trivial/.kitchen.yml +7 -7
  84. data/acceptance/trivial/test/integration/chef-current-install/inspec/chef_client_spec.rb +5 -5
  85. data/acceptance/windows-service/.acceptance/acceptance-cookbook/.gitignore +2 -2
  86. data/acceptance/windows-service/.acceptance/acceptance-cookbook/metadata.rb +2 -2
  87. data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  88. data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  89. data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  90. data/acceptance/windows-service/.kitchen.yml +7 -7
  91. data/acceptance/windows-service/test/integration/chef-windows-service/inspec/chef_windows_service_spec.rb +58 -58
  92. data/bin/chef-apply +25 -25
  93. data/bin/chef-client +26 -26
  94. data/bin/chef-shell +34 -34
  95. data/bin/chef-solo +25 -25
  96. data/bin/knife +25 -25
  97. data/chef-universal-mingw32.gemspec +23 -23
  98. data/chef.gemspec +61 -61
  99. data/distro/common/html/_sources/ctl_chef_client.txt +35 -35
  100. data/distro/common/html/_sources/ctl_chef_server.txt +341 -341
  101. data/distro/common/html/_sources/ctl_chef_shell.txt +15 -15
  102. data/distro/common/html/_sources/ctl_chef_solo.txt +25 -25
  103. data/distro/common/html/_sources/index.txt +135 -135
  104. data/distro/common/html/_sources/knife.txt +74 -74
  105. data/distro/common/html/_sources/knife_bootstrap.txt +56 -56
  106. data/distro/common/html/_sources/knife_client.txt +150 -150
  107. data/distro/common/html/_sources/knife_common_options.txt +6 -6
  108. data/distro/common/html/_sources/knife_configure.txt +29 -29
  109. data/distro/common/html/_sources/knife_cookbook.txt +236 -236
  110. data/distro/common/html/_sources/knife_cookbook_site.txt +157 -157
  111. data/distro/common/html/_sources/knife_data_bag.txt +159 -159
  112. data/distro/common/html/_sources/knife_delete.txt +26 -26
  113. data/distro/common/html/_sources/knife_deps.txt +61 -61
  114. data/distro/common/html/_sources/knife_diff.txt +34 -34
  115. data/distro/common/html/_sources/knife_download.txt +44 -44
  116. data/distro/common/html/_sources/knife_edit.txt +26 -26
  117. data/distro/common/html/_sources/knife_environment.txt +158 -158
  118. data/distro/common/html/_sources/knife_exec.txt +47 -47
  119. data/distro/common/html/_sources/knife_index_rebuild.txt +20 -20
  120. data/distro/common/html/_sources/knife_list.txt +33 -33
  121. data/distro/common/html/_sources/knife_node.txt +250 -250
  122. data/distro/common/html/_sources/knife_raw.txt +35 -35
  123. data/distro/common/html/_sources/knife_recipe_list.txt +23 -23
  124. data/distro/common/html/_sources/knife_role.txt +157 -157
  125. data/distro/common/html/_sources/knife_search.txt +53 -53
  126. data/distro/common/html/_sources/knife_serve.txt +18 -18
  127. data/distro/common/html/_sources/knife_show.txt +26 -26
  128. data/distro/common/html/_sources/knife_ssh.txt +43 -43
  129. data/distro/common/html/_sources/knife_ssl_check.txt +41 -41
  130. data/distro/common/html/_sources/knife_ssl_fetch.txt +41 -41
  131. data/distro/common/html/_sources/knife_status.txt +37 -37
  132. data/distro/common/html/_sources/knife_tag.txt +69 -69
  133. data/distro/common/html/_sources/knife_upload.txt +49 -49
  134. data/distro/common/html/_sources/knife_user.txt +127 -127
  135. data/distro/common/html/_sources/knife_using.txt +43 -43
  136. data/distro/common/html/_sources/knife_xargs.txt +30 -30
  137. data/distro/common/html/_static/basic.css +536 -536
  138. data/distro/common/html/_static/doctools.js +238 -238
  139. data/distro/common/html/_static/guide.css +504 -504
  140. data/distro/common/html/_static/pygments.css +61 -61
  141. data/distro/common/html/_static/searchtools.js +621 -621
  142. data/distro/common/html/_static/underscore.js +31 -31
  143. data/distro/common/html/_static/websupport.js +808 -808
  144. data/distro/common/html/ctl_chef_client.html +269 -269
  145. data/distro/common/html/ctl_chef_server.html +727 -727
  146. data/distro/common/html/ctl_chef_shell.html +162 -162
  147. data/distro/common/html/ctl_chef_solo.html +193 -193
  148. data/distro/common/html/index.html +201 -201
  149. data/distro/common/html/knife.html +169 -169
  150. data/distro/common/html/knife_bootstrap.html +284 -284
  151. data/distro/common/html/knife_client.html +284 -284
  152. data/distro/common/html/knife_common_options.html +95 -95
  153. data/distro/common/html/knife_configure.html +104 -104
  154. data/distro/common/html/knife_cookbook.html +486 -486
  155. data/distro/common/html/knife_cookbook_site.html +375 -375
  156. data/distro/common/html/knife_data_bag.html +373 -373
  157. data/distro/common/html/knife_delete.html +92 -92
  158. data/distro/common/html/knife_deps.html +142 -142
  159. data/distro/common/html/knife_diff.html +122 -122
  160. data/distro/common/html/knife_download.html +144 -144
  161. data/distro/common/html/knife_edit.html +88 -88
  162. data/distro/common/html/knife_environment.html +322 -322
  163. data/distro/common/html/knife_exec.html +219 -219
  164. data/distro/common/html/knife_index_rebuild.html +82 -82
  165. data/distro/common/html/knife_list.html +113 -113
  166. data/distro/common/html/knife_node.html +457 -457
  167. data/distro/common/html/knife_raw.html +109 -109
  168. data/distro/common/html/knife_recipe_list.html +90 -90
  169. data/distro/common/html/knife_role.html +294 -294
  170. data/distro/common/html/knife_search.html +202 -202
  171. data/distro/common/html/knife_serve.html +78 -78
  172. data/distro/common/html/knife_show.html +103 -103
  173. data/distro/common/html/knife_ssh.html +176 -176
  174. data/distro/common/html/knife_ssl_check.html +150 -150
  175. data/distro/common/html/knife_ssl_fetch.html +150 -150
  176. data/distro/common/html/knife_status.html +143 -143
  177. data/distro/common/html/knife_tag.html +137 -137
  178. data/distro/common/html/knife_upload.html +152 -152
  179. data/distro/common/html/knife_user.html +241 -241
  180. data/distro/common/html/knife_using.html +209 -209
  181. data/distro/common/html/knife_xargs.html +121 -121
  182. data/distro/common/html/search.html +81 -81
  183. data/distro/common/man/man1/README.md +58 -58
  184. data/distro/common/man/man1/chef-shell.1 +194 -194
  185. data/distro/common/man/man1/knife-bootstrap.1 +215 -215
  186. data/distro/common/man/man1/knife-client.1 +443 -443
  187. data/distro/common/man/man1/knife-configure.1 +161 -161
  188. data/distro/common/man/man1/knife-cookbook-site.1 +552 -552
  189. data/distro/common/man/man1/knife-cookbook.1 +770 -770
  190. data/distro/common/man/man1/knife-data-bag.1 +617 -617
  191. data/distro/common/man/man1/knife-delete.1 +127 -127
  192. data/distro/common/man/man1/knife-deps.1 +246 -246
  193. data/distro/common/man/man1/knife-diff.1 +226 -226
  194. data/distro/common/man/man1/knife-download.1 +258 -258
  195. data/distro/common/man/man1/knife-edit.1 +121 -121
  196. data/distro/common/man/man1/knife-environment.1 +496 -496
  197. data/distro/common/man/man1/knife-exec.1 +362 -362
  198. data/distro/common/man/man1/knife-index-rebuild.1 +63 -63
  199. data/distro/common/man/man1/knife-list.1 +174 -174
  200. data/distro/common/man/man1/knife-node.1 +716 -716
  201. data/distro/common/man/man1/knife-raw.1 +172 -172
  202. data/distro/common/man/man1/knife-recipe-list.1 +85 -85
  203. data/distro/common/man/man1/knife-role.1 +426 -426
  204. data/distro/common/man/man1/knife-search.1 +359 -359
  205. data/distro/common/man/man1/knife-serve.1 +109 -109
  206. data/distro/common/man/man1/knife-show.1 +160 -160
  207. data/distro/common/man/man1/knife-ssh.1 +284 -284
  208. data/distro/common/man/man1/knife-ssl-check.1 +207 -207
  209. data/distro/common/man/man1/knife-ssl-fetch.1 +207 -207
  210. data/distro/common/man/man1/knife-status.1 +234 -234
  211. data/distro/common/man/man1/knife-tag.1 +189 -189
  212. data/distro/common/man/man1/knife-upload.1 +280 -280
  213. data/distro/common/man/man1/knife-user.1 +356 -356
  214. data/distro/common/man/man1/knife-xargs.1 +189 -189
  215. data/distro/common/man/man1/knife.1 +332 -332
  216. data/distro/common/man/man8/chef-apply.8 +86 -86
  217. data/distro/common/man/man8/chef-client.8 +398 -398
  218. data/distro/common/man/man8/chef-solo.8 +260 -260
  219. data/distro/common/markdown/README +3 -3
  220. data/distro/common/markdown/man1/chef-shell.mkd +195 -195
  221. data/distro/common/markdown/man1/knife-bootstrap.mkd +141 -141
  222. data/distro/common/markdown/man1/knife-client.mkd +103 -103
  223. data/distro/common/markdown/man1/knife-configure.mkd +71 -71
  224. data/distro/common/markdown/man1/knife-cookbook-site.mkd +123 -123
  225. data/distro/common/markdown/man1/knife-cookbook.mkd +263 -263
  226. data/distro/common/markdown/man1/knife-data-bag.mkd +121 -121
  227. data/distro/common/markdown/man1/knife-environment.mkd +151 -151
  228. data/distro/common/markdown/man1/knife-exec.mkd +42 -42
  229. data/distro/common/markdown/man1/knife-index.mkd +30 -30
  230. data/distro/common/markdown/man1/knife-node.mkd +130 -130
  231. data/distro/common/markdown/man1/knife-role.mkd +85 -85
  232. data/distro/common/markdown/man1/knife-search.mkd +180 -180
  233. data/distro/common/markdown/man1/knife-ssh.mkd +69 -69
  234. data/distro/common/markdown/man1/knife-status.mkd +36 -36
  235. data/distro/common/markdown/man1/knife-tag.mkd +39 -39
  236. data/distro/common/markdown/man1/knife.mkd +213 -213
  237. data/distro/common/markdown/man8/chef-client.mkd +75 -75
  238. data/distro/common/markdown/man8/chef-expander.mkd +81 -81
  239. data/distro/common/markdown/man8/chef-expanderctl.mkd +57 -57
  240. data/distro/common/markdown/man8/chef-server-webui.mkd +121 -121
  241. data/distro/common/markdown/man8/chef-server.mkd +120 -120
  242. data/distro/common/markdown/man8/chef-solo.mkd +107 -107
  243. data/distro/common/markdown/man8/chef-solr.mkd +89 -89
  244. data/distro/powershell/chef/chef.psm1 +442 -442
  245. data/lib-backcompat/chef/chef_fs/file_system/acl_entry.rb +5 -5
  246. data/lib-backcompat/chef/chef_fs/file_system/already_exists_error.rb +20 -20
  247. data/lib-backcompat/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +5 -5
  248. data/lib-backcompat/chef/chef_fs/file_system/chef_server_root_dir.rb +5 -5
  249. data/lib-backcompat/chef/chef_fs/file_system/cookbook_frozen_error.rb +20 -20
  250. data/lib-backcompat/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +20 -20
  251. data/lib-backcompat/chef/chef_fs/file_system/file_system_error.rb +20 -20
  252. data/lib-backcompat/chef/chef_fs/file_system/must_delete_recursively_error.rb +20 -20
  253. data/lib-backcompat/chef/chef_fs/file_system/not_found_error.rb +20 -20
  254. data/lib-backcompat/chef/chef_fs/file_system/operation_failed_error.rb +20 -20
  255. data/lib-backcompat/chef/chef_fs/file_system/operation_not_allowed_error.rb +20 -20
  256. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_acls_dir.rb +5 -5
  257. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_client_keys_dir.rb +5 -5
  258. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_entry.rb +6 -6
  259. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_policies_dir.rb +5 -5
  260. data/lib-backcompat/chef/chef_fs/file_system/repository/file_system_root_dir.rb +34 -34
  261. data/lib/chef.rb +35 -35
  262. data/lib/chef/api_client.rb +231 -231
  263. data/lib/chef/api_client/registration.rb +192 -192
  264. data/lib/chef/api_client_v1.rb +323 -323
  265. data/lib/chef/application.rb +378 -378
  266. data/lib/chef/application/apply.rb +219 -219
  267. data/lib/chef/application/client.rb +528 -528
  268. data/lib/chef/application/exit_code.rb +233 -233
  269. data/lib/chef/application/knife.rb +216 -216
  270. data/lib/chef/application/solo.rb +379 -379
  271. data/lib/chef/application/windows_service.rb +337 -337
  272. data/lib/chef/application/windows_service_manager.rb +204 -204
  273. data/lib/chef/applications.rb +4 -4
  274. data/lib/chef/audit/audit_event_proxy.rb +93 -93
  275. data/lib/chef/audit/audit_reporter.rb +176 -176
  276. data/lib/chef/audit/control_group_data.rb +139 -139
  277. data/lib/chef/audit/logger.rb +36 -36
  278. data/lib/chef/audit/rspec_formatter.rb +37 -37
  279. data/lib/chef/audit/runner.rb +196 -196
  280. data/lib/chef/chef_class.rb +240 -240
  281. data/lib/chef/chef_fs.rb +59 -59
  282. data/lib/chef/chef_fs/chef_fs_data_store.rb +870 -870
  283. data/lib/chef/chef_fs/command_line.rb +292 -292
  284. data/lib/chef/chef_fs/config.rb +284 -284
  285. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -26
  286. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +39 -39
  287. data/lib/chef/chef_fs/data_handler/client_key_data_handler.rb +11 -11
  288. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +35 -35
  289. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -38
  290. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +62 -62
  291. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +205 -205
  292. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -40
  293. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +55 -55
  294. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -36
  295. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +36 -36
  296. data/lib/chef/chef_fs/data_handler/organization_invites_data_handler.rb +17 -17
  297. data/lib/chef/chef_fs/data_handler/organization_members_data_handler.rb +17 -17
  298. data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +48 -48
  299. data/lib/chef/chef_fs/data_handler/policy_group_data_handler.rb +33 -33
  300. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -40
  301. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +29 -29
  302. data/lib/chef/chef_fs/file_pattern.rb +301 -301
  303. data/lib/chef/chef_fs/file_system.rb +431 -431
  304. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -47
  305. data/lib/chef/chef_fs/file_system/base_fs_object.rb +187 -187
  306. data/lib/chef/chef_fs/file_system/chef_server/acl_dir.rb +65 -65
  307. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +67 -67
  308. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +75 -75
  309. data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +196 -196
  310. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifact_dir.rb +38 -38
  311. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +102 -102
  312. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +221 -221
  313. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +78 -78
  314. data/lib/chef/chef_fs/file_system/chef_server/cookbook_subdir.rb +61 -61
  315. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_acl_dir.rb +42 -42
  316. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +101 -101
  317. data/lib/chef/chef_fs/file_system/chef_server/data_bag_dir.rb +76 -76
  318. data/lib/chef/chef_fs/file_system/chef_server/data_bag_entry.rb +19 -19
  319. data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +67 -67
  320. data/lib/chef/chef_fs/file_system/chef_server/environments_dir.rb +56 -56
  321. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +51 -51
  322. data/lib/chef/chef_fs/file_system/chef_server/org_entry.rb +35 -35
  323. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +65 -65
  324. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +64 -64
  325. data/lib/chef/chef_fs/file_system/chef_server/policies_acl_dir.rb +41 -41
  326. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +158 -158
  327. data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +135 -135
  328. data/lib/chef/chef_fs/file_system/chef_server/policy_groups_dir.rb +43 -43
  329. data/lib/chef/chef_fs/file_system/chef_server/policy_revision_entry.rb +38 -38
  330. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +176 -176
  331. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +198 -198
  332. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbook_dir.rb +45 -45
  333. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +107 -107
  334. data/lib/chef/chef_fs/file_system/exceptions.rb +105 -105
  335. data/lib/chef/chef_fs/file_system/memory/memory_dir.rb +53 -53
  336. data/lib/chef/chef_fs/file_system/memory/memory_file.rb +20 -20
  337. data/lib/chef/chef_fs/file_system/memory/memory_root.rb +23 -23
  338. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +62 -62
  339. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +32 -32
  340. data/lib/chef/chef_fs/file_system/repository/acl.rb +45 -45
  341. data/lib/chef/chef_fs/file_system/repository/acls_dir.rb +50 -50
  342. data/lib/chef/chef_fs/file_system/repository/acls_sub_dir.rb +38 -38
  343. data/lib/chef/chef_fs/file_system/repository/base_file.rb +155 -155
  344. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_artifact_dir.rb +41 -41
  345. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +144 -144
  346. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +177 -177
  347. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +231 -231
  348. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_versioned_cookbook_dir.rb +42 -42
  349. data/lib/chef/chef_fs/file_system/repository/client.rb +38 -38
  350. data/lib/chef/chef_fs/file_system/repository/client_key.rb +38 -38
  351. data/lib/chef/chef_fs/file_system/repository/client_keys_dir.rb +42 -42
  352. data/lib/chef/chef_fs/file_system/repository/client_keys_sub_dir.rb +38 -38
  353. data/lib/chef/chef_fs/file_system/repository/clients_dir.rb +37 -37
  354. data/lib/chef/chef_fs/file_system/repository/container.rb +38 -38
  355. data/lib/chef/chef_fs/file_system/repository/containers_dir.rb +37 -37
  356. data/lib/chef/chef_fs/file_system/repository/cookbook_artifacts_dir.rb +36 -36
  357. data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +51 -51
  358. data/lib/chef/chef_fs/file_system/repository/data_bag.rb +39 -39
  359. data/lib/chef/chef_fs/file_system/repository/data_bag_item.rb +38 -38
  360. data/lib/chef/chef_fs/file_system/repository/data_bags_dir.rb +39 -39
  361. data/lib/chef/chef_fs/file_system/repository/directory.rb +167 -167
  362. data/lib/chef/chef_fs/file_system/repository/environment.rb +38 -38
  363. data/lib/chef/chef_fs/file_system/repository/environments_dir.rb +37 -37
  364. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +151 -151
  365. data/lib/chef/chef_fs/file_system/repository/group.rb +38 -38
  366. data/lib/chef/chef_fs/file_system/repository/groups_dir.rb +37 -37
  367. data/lib/chef/chef_fs/file_system/repository/node.rb +38 -38
  368. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +59 -59
  369. data/lib/chef/chef_fs/file_system/repository/policies_dir.rb +42 -42
  370. data/lib/chef/chef_fs/file_system/repository/policy.rb +38 -38
  371. data/lib/chef/chef_fs/file_system/repository/policy_group.rb +38 -38
  372. data/lib/chef/chef_fs/file_system/repository/policy_groups_dir.rb +37 -37
  373. data/lib/chef/chef_fs/file_system/repository/role.rb +38 -38
  374. data/lib/chef/chef_fs/file_system/repository/roles_dir.rb +37 -37
  375. data/lib/chef/chef_fs/file_system/repository/user.rb +38 -38
  376. data/lib/chef/chef_fs/file_system/repository/users_dir.rb +37 -37
  377. data/lib/chef/chef_fs/file_system/repository/versioned_cookbooks_dir.rb +34 -34
  378. data/lib/chef/chef_fs/file_system_cache.rb +80 -80
  379. data/lib/chef/chef_fs/knife.rb +161 -161
  380. data/lib/chef/chef_fs/parallelizer.rb +103 -103
  381. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +35 -35
  382. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +277 -277
  383. data/lib/chef/chef_fs/path_utils.rb +127 -127
  384. data/lib/chef/client.rb +1023 -1023
  385. data/lib/chef/config.rb +85 -85
  386. data/lib/chef/config_fetcher.rb +72 -72
  387. data/lib/chef/constants.rb +28 -28
  388. data/lib/chef/cookbook/chefignore.rb +74 -74
  389. data/lib/chef/cookbook/cookbook_collection.rb +63 -63
  390. data/lib/chef/cookbook/cookbook_version_loader.rb +351 -351
  391. data/lib/chef/cookbook/file_system_file_vendor.rb +58 -58
  392. data/lib/chef/cookbook/file_vendor.rb +71 -71
  393. data/lib/chef/cookbook/gem_installer.rb +84 -84
  394. data/lib/chef/cookbook/metadata.rb +912 -912
  395. data/lib/chef/cookbook/remote_file_vendor.rb +87 -87
  396. data/lib/chef/cookbook/synchronizer.rb +298 -298
  397. data/lib/chef/cookbook/syntax_check.rb +260 -260
  398. data/lib/chef/cookbook_loader.rb +200 -200
  399. data/lib/chef/cookbook_manifest.rb +290 -290
  400. data/lib/chef/cookbook_site_streaming_uploader.rb +243 -243
  401. data/lib/chef/cookbook_uploader.rb +157 -157
  402. data/lib/chef/cookbook_version.rb +637 -637
  403. data/lib/chef/daemon.rb +131 -131
  404. data/lib/chef/data_bag.rb +176 -176
  405. data/lib/chef/data_bag_item.rb +218 -218
  406. data/lib/chef/data_collector.rb +489 -489
  407. data/lib/chef/data_collector/messages.rb +98 -98
  408. data/lib/chef/data_collector/messages/helpers.rb +161 -161
  409. data/lib/chef/data_collector/resource_report.rb +123 -123
  410. data/lib/chef/decorator.rb +81 -81
  411. data/lib/chef/decorator/lazy.rb +60 -60
  412. data/lib/chef/decorator/lazy_array.rb +59 -59
  413. data/lib/chef/decorator/unchain.rb +59 -59
  414. data/lib/chef/delayed_evaluator.rb +21 -21
  415. data/lib/chef/deprecated.rb +250 -250
  416. data/lib/chef/deprecation/mixin/template.rb +48 -48
  417. data/lib/chef/deprecation/provider/cookbook_file.rb +54 -54
  418. data/lib/chef/deprecation/provider/file.rb +198 -198
  419. data/lib/chef/deprecation/provider/remote_directory.rb +52 -52
  420. data/lib/chef/deprecation/provider/remote_file.rb +85 -85
  421. data/lib/chef/deprecation/provider/template.rb +63 -63
  422. data/lib/chef/deprecation/warnings.rb +36 -36
  423. data/lib/chef/digester.rb +74 -74
  424. data/lib/chef/dsl.rb +6 -6
  425. data/lib/chef/dsl/audit.rb +51 -51
  426. data/lib/chef/dsl/chef_provisioning.rb +57 -57
  427. data/lib/chef/dsl/cheffish.rb +65 -65
  428. data/lib/chef/dsl/core.rb +52 -52
  429. data/lib/chef/dsl/data_query.rb +89 -89
  430. data/lib/chef/dsl/declare_resource.rb +295 -295
  431. data/lib/chef/dsl/definitions.rb +43 -43
  432. data/lib/chef/dsl/include_attribute.rb +61 -61
  433. data/lib/chef/dsl/include_recipe.rb +44 -44
  434. data/lib/chef/dsl/method_missing.rb +75 -75
  435. data/lib/chef/dsl/platform_introspection.rb +268 -268
  436. data/lib/chef/dsl/powershell.rb +29 -29
  437. data/lib/chef/dsl/reboot_pending.rb +64 -64
  438. data/lib/chef/dsl/recipe.rb +95 -95
  439. data/lib/chef/dsl/registry_helper.rb +63 -63
  440. data/lib/chef/dsl/resources.rb +56 -56
  441. data/lib/chef/dsl/universal.rb +50 -50
  442. data/lib/chef/encrypted_data_bag_item.rb +155 -155
  443. data/lib/chef/encrypted_data_bag_item/assertions.rb +54 -54
  444. data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -56
  445. data/lib/chef/encrypted_data_bag_item/decryption_failure.rb +22 -22
  446. data/lib/chef/encrypted_data_bag_item/decryptor.rb +227 -227
  447. data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +37 -37
  448. data/lib/chef/encrypted_data_bag_item/encryption_failure.rb +22 -22
  449. data/lib/chef/encrypted_data_bag_item/encryptor.rb +225 -225
  450. data/lib/chef/encrypted_data_bag_item/unacceptable_encrypted_data_bag_item_format.rb +22 -22
  451. data/lib/chef/encrypted_data_bag_item/unsupported_cipher.rb +22 -22
  452. data/lib/chef/encrypted_data_bag_item/unsupported_encrypted_data_bag_item_format.rb +22 -22
  453. data/lib/chef/environment.rb +324 -324
  454. data/lib/chef/event_dispatch/base.rb +429 -429
  455. data/lib/chef/event_dispatch/dispatcher.rb +62 -62
  456. data/lib/chef/event_dispatch/dsl.rb +65 -65
  457. data/lib/chef/event_dispatch/events_output_stream.rb +37 -37
  458. data/lib/chef/event_loggers/base.rb +62 -62
  459. data/lib/chef/event_loggers/windows_eventlog.rb +101 -101
  460. data/lib/chef/exceptions.rb +532 -532
  461. data/lib/chef/file_access_control.rb +75 -75
  462. data/lib/chef/file_access_control/unix.rb +290 -290
  463. data/lib/chef/file_access_control/windows.rb +335 -335
  464. data/lib/chef/file_cache.rb +221 -221
  465. data/lib/chef/file_content_management/content_base.rb +56 -56
  466. data/lib/chef/file_content_management/deploy.rb +37 -37
  467. data/lib/chef/file_content_management/deploy/cp.rb +48 -48
  468. data/lib/chef/file_content_management/deploy/mv_unix.rb +76 -76
  469. data/lib/chef/file_content_management/deploy/mv_windows.rb +103 -103
  470. data/lib/chef/file_content_management/tempfile.rb +107 -107
  471. data/lib/chef/formatters/base.rb +247 -247
  472. data/lib/chef/formatters/doc.rb +447 -447
  473. data/lib/chef/formatters/error_description.rb +86 -86
  474. data/lib/chef/formatters/error_inspectors.rb +19 -19
  475. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +183 -183
  476. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +154 -154
  477. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +168 -168
  478. data/lib/chef/formatters/error_inspectors/cookbook_sync_error_inspector.rb +82 -82
  479. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +128 -128
  480. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +147 -147
  481. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +124 -124
  482. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +121 -121
  483. data/lib/chef/formatters/error_mapper.rb +85 -85
  484. data/lib/chef/formatters/indentable_output_stream.rb +170 -170
  485. data/lib/chef/formatters/minimal.rb +233 -233
  486. data/lib/chef/guard_interpreter.rb +32 -32
  487. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +43 -43
  488. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +138 -138
  489. data/lib/chef/handler.rb +268 -268
  490. data/lib/chef/handler/error_report.rb +33 -33
  491. data/lib/chef/handler/json_file.rb +63 -63
  492. data/lib/chef/http.rb +489 -489
  493. data/lib/chef/http/api_versions.rb +50 -50
  494. data/lib/chef/http/auth_credentials.rb +57 -57
  495. data/lib/chef/http/authenticator.rb +106 -106
  496. data/lib/chef/http/basic_client.rb +158 -158
  497. data/lib/chef/http/cookie_jar.rb +31 -31
  498. data/lib/chef/http/cookie_manager.rb +59 -59
  499. data/lib/chef/http/decompressor.rb +142 -142
  500. data/lib/chef/http/http_request.rb +186 -186
  501. data/lib/chef/http/json_input.rb +73 -73
  502. data/lib/chef/http/json_output.rb +78 -78
  503. data/lib/chef/http/json_to_model_output.rb +34 -34
  504. data/lib/chef/http/remote_request_id.rb +46 -46
  505. data/lib/chef/http/simple.rb +40 -40
  506. data/lib/chef/http/simple_json.rb +43 -43
  507. data/lib/chef/http/socketless_chef_zero_client.rb +208 -208
  508. data/lib/chef/http/ssl_policies.rb +130 -130
  509. data/lib/chef/http/validate_content_length.rb +114 -114
  510. data/lib/chef/json_compat.rb +160 -160
  511. data/lib/chef/key.rb +272 -272
  512. data/lib/chef/knife.rb +613 -613
  513. data/lib/chef/knife/bootstrap.rb +489 -489
  514. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +159 -159
  515. data/lib/chef/knife/bootstrap/client_builder.rb +208 -208
  516. data/lib/chef/knife/bootstrap/templates/README.md +11 -11
  517. data/lib/chef/knife/bootstrap/templates/chef-full.erb +236 -236
  518. data/lib/chef/knife/client_bulk_delete.rb +104 -104
  519. data/lib/chef/knife/client_create.rb +111 -111
  520. data/lib/chef/knife/client_delete.rb +63 -63
  521. data/lib/chef/knife/client_edit.rb +53 -53
  522. data/lib/chef/knife/client_key_create.rb +67 -67
  523. data/lib/chef/knife/client_key_delete.rb +76 -76
  524. data/lib/chef/knife/client_key_edit.rb +79 -79
  525. data/lib/chef/knife/client_key_list.rb +69 -69
  526. data/lib/chef/knife/client_key_show.rb +76 -76
  527. data/lib/chef/knife/client_list.rb +42 -42
  528. data/lib/chef/knife/client_reregister.rb +59 -59
  529. data/lib/chef/knife/client_show.rb +49 -49
  530. data/lib/chef/knife/configure.rb +171 -171
  531. data/lib/chef/knife/configure_client.rb +50 -50
  532. data/lib/chef/knife/cookbook_bulk_delete.rb +71 -71
  533. data/lib/chef/knife/cookbook_create.rb +462 -462
  534. data/lib/chef/knife/cookbook_delete.rb +151 -151
  535. data/lib/chef/knife/cookbook_download.rb +143 -143
  536. data/lib/chef/knife/cookbook_list.rb +47 -47
  537. data/lib/chef/knife/cookbook_metadata.rb +107 -107
  538. data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -44
  539. data/lib/chef/knife/cookbook_show.rb +94 -94
  540. data/lib/chef/knife/cookbook_site_download.rb +116 -116
  541. data/lib/chef/knife/cookbook_site_install.rb +196 -196
  542. data/lib/chef/knife/cookbook_site_list.rb +65 -65
  543. data/lib/chef/knife/cookbook_site_search.rb +53 -53
  544. data/lib/chef/knife/cookbook_site_share.rb +170 -170
  545. data/lib/chef/knife/cookbook_site_show.rb +66 -66
  546. data/lib/chef/knife/cookbook_site_unshare.rb +63 -63
  547. data/lib/chef/knife/cookbook_site_vendor.rb +46 -46
  548. data/lib/chef/knife/cookbook_test.rb +95 -95
  549. data/lib/chef/knife/cookbook_upload.rb +308 -308
  550. data/lib/chef/knife/core/bootstrap_context.rb +267 -267
  551. data/lib/chef/knife/core/cookbook_scm_repo.rb +159 -159
  552. data/lib/chef/knife/core/custom_manifest_loader.rb +69 -69
  553. data/lib/chef/knife/core/gem_glob_loader.rb +138 -138
  554. data/lib/chef/knife/core/generic_presenter.rb +232 -232
  555. data/lib/chef/knife/core/hashed_command_loader.rb +99 -99
  556. data/lib/chef/knife/core/node_editor.rb +130 -130
  557. data/lib/chef/knife/core/node_presenter.rb +159 -159
  558. data/lib/chef/knife/core/object_loader.rb +115 -115
  559. data/lib/chef/knife/core/status_presenter.rb +157 -157
  560. data/lib/chef/knife/core/subcommand_loader.rb +212 -212
  561. data/lib/chef/knife/core/text_formatter.rb +85 -85
  562. data/lib/chef/knife/core/ui.rb +278 -278
  563. data/lib/chef/knife/data_bag_create.rb +80 -80
  564. data/lib/chef/knife/data_bag_delete.rb +49 -49
  565. data/lib/chef/knife/data_bag_edit.rb +74 -74
  566. data/lib/chef/knife/data_bag_from_file.rb +114 -114
  567. data/lib/chef/knife/data_bag_list.rb +42 -42
  568. data/lib/chef/knife/data_bag_secret_options.rb +142 -142
  569. data/lib/chef/knife/data_bag_show.rb +69 -69
  570. data/lib/chef/knife/delete.rb +107 -107
  571. data/lib/chef/knife/deps.rb +138 -138
  572. data/lib/chef/knife/diff.rb +68 -68
  573. data/lib/chef/knife/download.rb +68 -68
  574. data/lib/chef/knife/edit.rb +72 -72
  575. data/lib/chef/knife/environment_compare.rb +127 -127
  576. data/lib/chef/knife/environment_create.rb +53 -53
  577. data/lib/chef/knife/environment_delete.rb +45 -45
  578. data/lib/chef/knife/environment_edit.rb +45 -45
  579. data/lib/chef/knife/environment_from_file.rb +82 -82
  580. data/lib/chef/knife/environment_list.rb +42 -42
  581. data/lib/chef/knife/environment_show.rb +48 -48
  582. data/lib/chef/knife/exec.rb +87 -87
  583. data/lib/chef/knife/help.rb +101 -101
  584. data/lib/chef/knife/help_topics.rb +4 -4
  585. data/lib/chef/knife/index_rebuild.rb +133 -133
  586. data/lib/chef/knife/key_create.rb +112 -112
  587. data/lib/chef/knife/key_create_base.rb +50 -50
  588. data/lib/chef/knife/key_delete.rb +55 -55
  589. data/lib/chef/knife/key_edit.rb +118 -118
  590. data/lib/chef/knife/key_edit_base.rb +55 -55
  591. data/lib/chef/knife/key_list.rb +88 -88
  592. data/lib/chef/knife/key_list_base.rb +45 -45
  593. data/lib/chef/knife/key_show.rb +53 -53
  594. data/lib/chef/knife/list.rb +156 -156
  595. data/lib/chef/knife/node_bulk_delete.rb +74 -74
  596. data/lib/chef/knife/node_create.rb +47 -47
  597. data/lib/chef/knife/node_delete.rb +46 -46
  598. data/lib/chef/knife/node_edit.rb +70 -70
  599. data/lib/chef/knife/node_environment_set.rb +54 -54
  600. data/lib/chef/knife/node_from_file.rb +51 -51
  601. data/lib/chef/knife/node_list.rb +44 -44
  602. data/lib/chef/knife/node_run_list_add.rb +104 -104
  603. data/lib/chef/knife/node_run_list_remove.rb +67 -67
  604. data/lib/chef/knife/node_run_list_set.rb +66 -66
  605. data/lib/chef/knife/node_show.rb +61 -61
  606. data/lib/chef/knife/null.rb +10 -10
  607. data/lib/chef/knife/osc_user_create.rb +97 -97
  608. data/lib/chef/knife/osc_user_delete.rb +51 -51
  609. data/lib/chef/knife/osc_user_edit.rb +58 -58
  610. data/lib/chef/knife/osc_user_list.rb +47 -47
  611. data/lib/chef/knife/osc_user_reregister.rb +64 -64
  612. data/lib/chef/knife/osc_user_show.rb +53 -53
  613. data/lib/chef/knife/raw.rb +103 -103
  614. data/lib/chef/knife/recipe_list.rb +32 -32
  615. data/lib/chef/knife/rehash.rb +65 -65
  616. data/lib/chef/knife/role_bulk_delete.rb +65 -65
  617. data/lib/chef/knife/role_create.rb +53 -53
  618. data/lib/chef/knife/role_delete.rb +46 -46
  619. data/lib/chef/knife/role_edit.rb +45 -45
  620. data/lib/chef/knife/role_env_run_list_add.rb +86 -86
  621. data/lib/chef/knife/role_env_run_list_clear.rb +55 -55
  622. data/lib/chef/knife/role_env_run_list_remove.rb +57 -57
  623. data/lib/chef/knife/role_env_run_list_replace.rb +59 -59
  624. data/lib/chef/knife/role_env_run_list_set.rb +70 -70
  625. data/lib/chef/knife/role_from_file.rb +51 -51
  626. data/lib/chef/knife/role_list.rb +42 -42
  627. data/lib/chef/knife/role_run_list_add.rb +86 -86
  628. data/lib/chef/knife/role_run_list_clear.rb +55 -55
  629. data/lib/chef/knife/role_run_list_remove.rb +57 -57
  630. data/lib/chef/knife/role_run_list_replace.rb +59 -59
  631. data/lib/chef/knife/role_run_list_set.rb +70 -70
  632. data/lib/chef/knife/role_show.rb +49 -49
  633. data/lib/chef/knife/search.rb +201 -201
  634. data/lib/chef/knife/serve.rb +48 -48
  635. data/lib/chef/knife/show.rb +56 -56
  636. data/lib/chef/knife/ssh.rb +591 -591
  637. data/lib/chef/knife/ssl_check.rb +283 -283
  638. data/lib/chef/knife/ssl_fetch.rb +161 -161
  639. data/lib/chef/knife/status.rb +110 -110
  640. data/lib/chef/knife/supermarket_download.rb +33 -33
  641. data/lib/chef/knife/supermarket_install.rb +33 -33
  642. data/lib/chef/knife/supermarket_list.rb +33 -33
  643. data/lib/chef/knife/supermarket_search.rb +33 -33
  644. data/lib/chef/knife/supermarket_share.rb +33 -33
  645. data/lib/chef/knife/supermarket_show.rb +33 -33
  646. data/lib/chef/knife/supermarket_unshare.rb +33 -33
  647. data/lib/chef/knife/tag_create.rb +52 -52
  648. data/lib/chef/knife/tag_delete.rb +60 -60
  649. data/lib/chef/knife/tag_list.rb +47 -47
  650. data/lib/chef/knife/upload.rb +70 -70
  651. data/lib/chef/knife/user_create.rb +150 -150
  652. data/lib/chef/knife/user_delete.rb +95 -95
  653. data/lib/chef/knife/user_edit.rb +81 -81
  654. data/lib/chef/knife/user_key_create.rb +69 -69
  655. data/lib/chef/knife/user_key_delete.rb +76 -76
  656. data/lib/chef/knife/user_key_edit.rb +79 -79
  657. data/lib/chef/knife/user_key_list.rb +69 -69
  658. data/lib/chef/knife/user_key_show.rb +76 -76
  659. data/lib/chef/knife/user_list.rb +45 -45
  660. data/lib/chef/knife/user_reregister.rb +89 -89
  661. data/lib/chef/knife/user_show.rb +78 -78
  662. data/lib/chef/knife/xargs.rb +266 -266
  663. data/lib/chef/local_mode.rb +128 -128
  664. data/lib/chef/log.rb +68 -68
  665. data/lib/chef/log/syslog.rb +45 -45
  666. data/lib/chef/log/winevt.rb +99 -99
  667. data/lib/chef/mash.rb +232 -232
  668. data/lib/chef/mixin/api_version_request_handling.rb +66 -66
  669. data/lib/chef/mixin/checksum.rb +37 -37
  670. data/lib/chef/mixin/command.rb +194 -194
  671. data/lib/chef/mixin/command/unix.rb +220 -220
  672. data/lib/chef/mixin/command/windows.rb +71 -71
  673. data/lib/chef/mixin/convert_to_class_name.rb +126 -126
  674. data/lib/chef/mixin/create_path.rb +71 -71
  675. data/lib/chef/mixin/deep_merge.rb +140 -140
  676. data/lib/chef/mixin/deprecation.rb +117 -117
  677. data/lib/chef/mixin/descendants_tracker.rb +81 -81
  678. data/lib/chef/mixin/enforce_ownership_and_permissions.rb +39 -39
  679. data/lib/chef/mixin/file_class.rb +35 -35
  680. data/lib/chef/mixin/from_file.rb +50 -50
  681. data/lib/chef/mixin/get_source_from_package.rb +47 -47
  682. data/lib/chef/mixin/homebrew_user.rb +68 -68
  683. data/lib/chef/mixin/language.rb +48 -48
  684. data/lib/chef/mixin/language_include_attribute.rb +34 -34
  685. data/lib/chef/mixin/language_include_recipe.rb +31 -31
  686. data/lib/chef/mixin/lazy_module_include.rb +77 -77
  687. data/lib/chef/mixin/notifying_block.rb +51 -51
  688. data/lib/chef/mixin/params_validate.rb +489 -489
  689. data/lib/chef/mixin/path_sanity.rb +68 -68
  690. data/lib/chef/mixin/powershell_out.rb +98 -98
  691. data/lib/chef/mixin/powershell_type_coercions.rb +84 -84
  692. data/lib/chef/mixin/properties.rb +306 -306
  693. data/lib/chef/mixin/provides.rb +28 -28
  694. data/lib/chef/mixin/proxified_socket.rb +42 -42
  695. data/lib/chef/mixin/recipe_definition_dsl_core.rb +35 -35
  696. data/lib/chef/mixin/securable.rb +196 -196
  697. data/lib/chef/mixin/shell_out.rb +211 -211
  698. data/lib/chef/mixin/subclass_directive.rb +37 -37
  699. data/lib/chef/mixin/template.rb +262 -262
  700. data/lib/chef/mixin/unformatter.rb +32 -32
  701. data/lib/chef/mixin/uris.rb +42 -42
  702. data/lib/chef/mixin/versioned_api.rb +69 -69
  703. data/lib/chef/mixin/which.rb +50 -50
  704. data/lib/chef/mixin/why_run.rb +331 -331
  705. data/lib/chef/mixin/wide_string.rb +72 -72
  706. data/lib/chef/mixin/windows_architecture_helper.rb +113 -113
  707. data/lib/chef/mixin/windows_env_helper.rb +67 -67
  708. data/lib/chef/mixin/xml_escape.rb +138 -138
  709. data/lib/chef/mixins.rb +13 -13
  710. data/lib/chef/monkey_patches/net_http.rb +60 -60
  711. data/lib/chef/monkey_patches/webrick-utils.rb +51 -51
  712. data/lib/chef/monkey_patches/win32/registry.rb +86 -86
  713. data/lib/chef/monologger.rb +88 -88
  714. data/lib/chef/nil_argument.rb +3 -3
  715. data/lib/chef/node.rb +677 -677
  716. data/lib/chef/node/attribute.rb +673 -673
  717. data/lib/chef/node/attribute_collections.rb +231 -231
  718. data/lib/chef/node/common_api.rb +121 -121
  719. data/lib/chef/node/immutable_collections.rb +180 -180
  720. data/lib/chef/node/mixin/deep_merge_cache.rb +61 -61
  721. data/lib/chef/node/mixin/immutablize_array.rb +67 -67
  722. data/lib/chef/node/mixin/immutablize_hash.rb +54 -54
  723. data/lib/chef/node/mixin/state_tracking.rb +96 -96
  724. data/lib/chef/node_map.rb +238 -238
  725. data/lib/chef/null_logger.rb +72 -72
  726. data/lib/chef/org.rb +147 -147
  727. data/lib/chef/platform.rb +30 -30
  728. data/lib/chef/platform/priority_map.rb +41 -41
  729. data/lib/chef/platform/provider_handler_map.rb +29 -29
  730. data/lib/chef/platform/provider_mapping.rb +222 -222
  731. data/lib/chef/platform/provider_priority_map.rb +11 -11
  732. data/lib/chef/platform/query_helpers.rb +112 -112
  733. data/lib/chef/platform/rebooter.rb +67 -67
  734. data/lib/chef/platform/resource_handler_map.rb +29 -29
  735. data/lib/chef/platform/resource_priority_map.rb +11 -11
  736. data/lib/chef/platform/service_helpers.rb +122 -122
  737. data/lib/chef/policy_builder.rb +42 -42
  738. data/lib/chef/policy_builder/dynamic.rb +185 -185
  739. data/lib/chef/policy_builder/expand_node_object.rb +278 -278
  740. data/lib/chef/policy_builder/policyfile.rb +550 -550
  741. data/lib/chef/property.rb +731 -731
  742. data/lib/chef/provider.rb +458 -458
  743. data/lib/chef/provider/apt_repository.rb +258 -258
  744. data/lib/chef/provider/apt_update.rb +87 -87
  745. data/lib/chef/provider/batch.rb +45 -45
  746. data/lib/chef/provider/breakpoint.rb +38 -38
  747. data/lib/chef/provider/cookbook_file.rb +53 -53
  748. data/lib/chef/provider/cookbook_file/content.rb +49 -49
  749. data/lib/chef/provider/cron.rb +262 -262
  750. data/lib/chef/provider/cron/aix.rb +50 -50
  751. data/lib/chef/provider/cron/solaris.rb +22 -22
  752. data/lib/chef/provider/cron/unix.rb +83 -83
  753. data/lib/chef/provider/deploy.rb +476 -476
  754. data/lib/chef/provider/deploy/revision.rb +107 -107
  755. data/lib/chef/provider/deploy/timestamped.rb +34 -34
  756. data/lib/chef/provider/directory.rb +168 -168
  757. data/lib/chef/provider/dsc_resource.rb +213 -213
  758. data/lib/chef/provider/dsc_script.rb +189 -189
  759. data/lib/chef/provider/env.rb +169 -169
  760. data/lib/chef/provider/env/windows.rb +72 -72
  761. data/lib/chef/provider/erl_call.rb +108 -108
  762. data/lib/chef/provider/execute.rb +128 -128
  763. data/lib/chef/provider/file.rb +488 -488
  764. data/lib/chef/provider/file/content.rb +39 -39
  765. data/lib/chef/provider/git.rb +334 -334
  766. data/lib/chef/provider/group.rb +185 -185
  767. data/lib/chef/provider/group/aix.rb +79 -79
  768. data/lib/chef/provider/group/dscl.rb +173 -173
  769. data/lib/chef/provider/group/gpasswd.rb +58 -58
  770. data/lib/chef/provider/group/groupadd.rb +133 -133
  771. data/lib/chef/provider/group/groupmod.rb +123 -123
  772. data/lib/chef/provider/group/pw.rb +137 -137
  773. data/lib/chef/provider/group/suse.rb +83 -83
  774. data/lib/chef/provider/group/usermod.rb +90 -90
  775. data/lib/chef/provider/group/windows.rb +109 -109
  776. data/lib/chef/provider/http_request.rb +122 -122
  777. data/lib/chef/provider/ifconfig.rb +283 -283
  778. data/lib/chef/provider/ifconfig/aix.rb +94 -94
  779. data/lib/chef/provider/ifconfig/debian.rb +85 -85
  780. data/lib/chef/provider/ifconfig/redhat.rb +48 -48
  781. data/lib/chef/provider/launchd.rb +208 -208
  782. data/lib/chef/provider/link.rb +172 -172
  783. data/lib/chef/provider/log.rb +57 -57
  784. data/lib/chef/provider/lwrp_base.rb +98 -98
  785. data/lib/chef/provider/mdadm.rb +93 -93
  786. data/lib/chef/provider/mount.rb +171 -171
  787. data/lib/chef/provider/mount/aix.rb +180 -180
  788. data/lib/chef/provider/mount/mount.rb +270 -270
  789. data/lib/chef/provider/mount/solaris.rb +271 -271
  790. data/lib/chef/provider/mount/windows.rb +92 -92
  791. data/lib/chef/provider/noop.rb +37 -37
  792. data/lib/chef/provider/ohai.rb +51 -51
  793. data/lib/chef/provider/osx_profile.rb +257 -257
  794. data/lib/chef/provider/package.rb +656 -656
  795. data/lib/chef/provider/package/aix.rb +143 -143
  796. data/lib/chef/provider/package/apt.rb +201 -201
  797. data/lib/chef/provider/package/cab.rb +179 -179
  798. data/lib/chef/provider/package/chocolatey.rb +275 -275
  799. data/lib/chef/provider/package/dnf.rb +192 -192
  800. data/lib/chef/provider/package/dnf/dnf_helper.py +91 -91
  801. data/lib/chef/provider/package/dnf/python_helper.rb +157 -157
  802. data/lib/chef/provider/package/dnf/version.rb +56 -56
  803. data/lib/chef/provider/package/dpkg.rb +225 -225
  804. data/lib/chef/provider/package/easy_install.rb +135 -135
  805. data/lib/chef/provider/package/freebsd/base.rb +89 -89
  806. data/lib/chef/provider/package/freebsd/pkg.rb +114 -114
  807. data/lib/chef/provider/package/freebsd/pkgng.rb +76 -76
  808. data/lib/chef/provider/package/freebsd/port.rb +60 -60
  809. data/lib/chef/provider/package/homebrew.rb +138 -138
  810. data/lib/chef/provider/package/ips.rb +86 -86
  811. data/lib/chef/provider/package/macports.rb +101 -101
  812. data/lib/chef/provider/package/msu.rb +162 -162
  813. data/lib/chef/provider/package/openbsd.rb +139 -139
  814. data/lib/chef/provider/package/pacman.rb +104 -104
  815. data/lib/chef/provider/package/paludis.rb +85 -85
  816. data/lib/chef/provider/package/portage.rb +140 -140
  817. data/lib/chef/provider/package/powershell.rb +114 -114
  818. data/lib/chef/provider/package/rpm.rb +123 -123
  819. data/lib/chef/provider/package/rubygems.rb +591 -591
  820. data/lib/chef/provider/package/smartos.rb +92 -92
  821. data/lib/chef/provider/package/solaris.rb +138 -138
  822. data/lib/chef/provider/package/windows.rb +271 -271
  823. data/lib/chef/provider/package/windows/exe.rb +115 -115
  824. data/lib/chef/provider/package/windows/msi.rb +94 -94
  825. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +87 -87
  826. data/lib/chef/provider/package/yum.rb +536 -536
  827. data/lib/chef/provider/package/yum/rpm_utils.rb +642 -642
  828. data/lib/chef/provider/package/yum/yum-dump.py +307 -307
  829. data/lib/chef/provider/package/yum/yum_cache.rb +376 -376
  830. data/lib/chef/provider/package/zypper.rb +163 -163
  831. data/lib/chef/provider/powershell_script.rb +223 -223
  832. data/lib/chef/provider/reboot.rb +70 -70
  833. data/lib/chef/provider/registry_key.rb +182 -182
  834. data/lib/chef/provider/remote_directory.rb +283 -283
  835. data/lib/chef/provider/remote_file.rb +53 -53
  836. data/lib/chef/provider/remote_file/cache_control_data.rb +195 -195
  837. data/lib/chef/provider/remote_file/content.rb +81 -81
  838. data/lib/chef/provider/remote_file/fetcher.rb +57 -57
  839. data/lib/chef/provider/remote_file/ftp.rb +172 -172
  840. data/lib/chef/provider/remote_file/http.rb +135 -135
  841. data/lib/chef/provider/remote_file/local_file.rb +60 -60
  842. data/lib/chef/provider/remote_file/network_file.rb +48 -48
  843. data/lib/chef/provider/remote_file/sftp.rb +105 -105
  844. data/lib/chef/provider/resource_update.rb +52 -52
  845. data/lib/chef/provider/route.rb +231 -231
  846. data/lib/chef/provider/ruby_block.rb +44 -44
  847. data/lib/chef/provider/script.rb +121 -121
  848. data/lib/chef/provider/service.rb +259 -259
  849. data/lib/chef/provider/service/aix.rb +129 -129
  850. data/lib/chef/provider/service/aixinit.rb +117 -117
  851. data/lib/chef/provider/service/arch.rb +118 -118
  852. data/lib/chef/provider/service/debian.rb +182 -182
  853. data/lib/chef/provider/service/freebsd.rb +195 -195
  854. data/lib/chef/provider/service/gentoo.rb +71 -71
  855. data/lib/chef/provider/service/init.rb +94 -94
  856. data/lib/chef/provider/service/insserv.rb +59 -59
  857. data/lib/chef/provider/service/invokercd.rb +41 -41
  858. data/lib/chef/provider/service/macosx.rb +250 -250
  859. data/lib/chef/provider/service/openbsd.rb +217 -217
  860. data/lib/chef/provider/service/redhat.rb +126 -126
  861. data/lib/chef/provider/service/simple.rb +176 -176
  862. data/lib/chef/provider/service/solaris.rb +122 -122
  863. data/lib/chef/provider/service/systemd.rb +188 -188
  864. data/lib/chef/provider/service/upstart.rb +261 -261
  865. data/lib/chef/provider/service/windows.rb +313 -313
  866. data/lib/chef/provider/subversion.rb +233 -233
  867. data/lib/chef/provider/support/yum_repo.erb +132 -132
  868. data/lib/chef/provider/systemd_unit.rb +240 -240
  869. data/lib/chef/provider/template.rb +65 -65
  870. data/lib/chef/provider/template/content.rb +70 -70
  871. data/lib/chef/provider/template_finder.rb +62 -62
  872. data/lib/chef/provider/user.rb +220 -220
  873. data/lib/chef/provider/user/aix.rb +99 -99
  874. data/lib/chef/provider/user/dscl.rb +719 -719
  875. data/lib/chef/provider/user/linux.rb +125 -125
  876. data/lib/chef/provider/user/pw.rb +111 -111
  877. data/lib/chef/provider/user/solaris.rb +129 -129
  878. data/lib/chef/provider/user/useradd.rb +158 -158
  879. data/lib/chef/provider/user/windows.rb +125 -125
  880. data/lib/chef/provider/whyrun_safe_ruby_block.rb +32 -32
  881. data/lib/chef/provider/windows_script.rb +75 -75
  882. data/lib/chef/provider/yum_repository.rb +120 -120
  883. data/lib/chef/provider_resolver.rb +172 -172
  884. data/lib/chef/providers.rb +152 -152
  885. data/lib/chef/recipe.rb +108 -108
  886. data/lib/chef/request_id.rb +37 -37
  887. data/lib/chef/reserved_names.rb +9 -9
  888. data/lib/chef/resource.rb +1626 -1626
  889. data/lib/chef/resource/action_class.rb +94 -94
  890. data/lib/chef/resource/apt_package.rb +32 -32
  891. data/lib/chef/resource/apt_repository.rb +46 -46
  892. data/lib/chef/resource/apt_update.rb +33 -33
  893. data/lib/chef/resource/bash.rb +33 -33
  894. data/lib/chef/resource/batch.rb +33 -33
  895. data/lib/chef/resource/bff_package.rb +27 -27
  896. data/lib/chef/resource/breakpoint.rb +32 -32
  897. data/lib/chef/resource/cab_package.rb +44 -44
  898. data/lib/chef/resource/chef_gem.rb +50 -50
  899. data/lib/chef/resource/chocolatey_package.rb +40 -40
  900. data/lib/chef/resource/conditional.rb +135 -135
  901. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -48
  902. data/lib/chef/resource/cookbook_file.rb +49 -49
  903. data/lib/chef/resource/cron.rb +216 -216
  904. data/lib/chef/resource/csh.rb +33 -33
  905. data/lib/chef/resource/deploy.rb +443 -443
  906. data/lib/chef/resource/deploy_revision.rb +31 -31
  907. data/lib/chef/resource/directory.rb +62 -62
  908. data/lib/chef/resource/dnf_package.rb +74 -74
  909. data/lib/chef/resource/dpkg_package.rb +30 -30
  910. data/lib/chef/resource/dsc_resource.rb +129 -129
  911. data/lib/chef/resource/dsc_script.rb +140 -140
  912. data/lib/chef/resource/easy_install_package.rb +32 -32
  913. data/lib/chef/resource/env.rb +65 -65
  914. data/lib/chef/resource/erl_call.rb +85 -85
  915. data/lib/chef/resource/execute.rb +236 -236
  916. data/lib/chef/resource/file.rb +88 -88
  917. data/lib/chef/resource/file/verification.rb +130 -130
  918. data/lib/chef/resource/file/verification/systemd_unit.rb +67 -67
  919. data/lib/chef/resource/freebsd_package.rb +62 -62
  920. data/lib/chef/resource/gem_package.rb +41 -41
  921. data/lib/chef/resource/git.rb +44 -44
  922. data/lib/chef/resource/group.rb +102 -102
  923. data/lib/chef/resource/homebrew_package.rb +34 -34
  924. data/lib/chef/resource/http_request.rb +66 -66
  925. data/lib/chef/resource/ifconfig.rb +147 -147
  926. data/lib/chef/resource/ips_package.rb +34 -34
  927. data/lib/chef/resource/ksh.rb +32 -32
  928. data/lib/chef/resource/launchd.rb +156 -156
  929. data/lib/chef/resource/link.rb +107 -107
  930. data/lib/chef/resource/log.rb +76 -76
  931. data/lib/chef/resource/lwrp_base.rb +124 -124
  932. data/lib/chef/resource/macosx_service.rb +58 -58
  933. data/lib/chef/resource/macports_package.rb +27 -27
  934. data/lib/chef/resource/mdadm.rb +112 -112
  935. data/lib/chef/resource/mount.rb +187 -187
  936. data/lib/chef/resource/msu_package.rb +47 -47
  937. data/lib/chef/resource/ohai.rb +33 -33
  938. data/lib/chef/resource/openbsd_package.rb +35 -35
  939. data/lib/chef/resource/osx_profile.rb +74 -74
  940. data/lib/chef/resource/package.rb +47 -47
  941. data/lib/chef/resource/pacman_package.rb +28 -28
  942. data/lib/chef/resource/paludis_package.rb +33 -33
  943. data/lib/chef/resource/perl.rb +32 -32
  944. data/lib/chef/resource/portage_package.rb +32 -32
  945. data/lib/chef/resource/powershell_package.rb +41 -41
  946. data/lib/chef/resource/powershell_script.rb +50 -50
  947. data/lib/chef/resource/python.rb +31 -31
  948. data/lib/chef/resource/reboot.rb +48 -48
  949. data/lib/chef/resource/registry_key.rb +144 -144
  950. data/lib/chef/resource/remote_directory.rb +122 -122
  951. data/lib/chef/resource/remote_file.rb +158 -158
  952. data/lib/chef/resource/resource_notification.rb +122 -122
  953. data/lib/chef/resource/route.rb +137 -137
  954. data/lib/chef/resource/rpm_package.rb +32 -32
  955. data/lib/chef/resource/ruby.rb +31 -31
  956. data/lib/chef/resource/ruby_block.rb +53 -53
  957. data/lib/chef/resource/scm.rb +179 -179
  958. data/lib/chef/resource/script.rb +74 -74
  959. data/lib/chef/resource/service.rb +217 -217
  960. data/lib/chef/resource/smartos_package.rb +29 -29
  961. data/lib/chef/resource/solaris_package.rb +31 -31
  962. data/lib/chef/resource/subversion.rb +44 -44
  963. data/lib/chef/resource/systemd_unit.rb +63 -63
  964. data/lib/chef/resource/template.rb +215 -215
  965. data/lib/chef/resource/timestamped_deploy.rb +26 -26
  966. data/lib/chef/resource/user.rb +174 -174
  967. data/lib/chef/resource/user/aix_user.rb +31 -31
  968. data/lib/chef/resource/user/dscl_user.rb +31 -31
  969. data/lib/chef/resource/user/linux_user.rb +41 -41
  970. data/lib/chef/resource/user/pw_user.rb +31 -31
  971. data/lib/chef/resource/user/solaris_user.rb +31 -31
  972. data/lib/chef/resource/user/windows_user.rb +31 -31
  973. data/lib/chef/resource/whyrun_safe_ruby_block.rb +24 -24
  974. data/lib/chef/resource/windows_package.rb +55 -55
  975. data/lib/chef/resource/windows_script.rb +65 -65
  976. data/lib/chef/resource/windows_service.rb +71 -71
  977. data/lib/chef/resource/yum_package.rb +61 -61
  978. data/lib/chef/resource/yum_repository.rb +78 -78
  979. data/lib/chef/resource/zypper_package.rb +28 -28
  980. data/lib/chef/resource_builder.rb +156 -156
  981. data/lib/chef/resource_collection.rb +136 -136
  982. data/lib/chef/resource_collection/resource_collection_serialization.rb +59 -59
  983. data/lib/chef/resource_collection/resource_list.rb +100 -100
  984. data/lib/chef/resource_collection/resource_set.rb +173 -173
  985. data/lib/chef/resource_collection/stepable_iterator.rb +122 -122
  986. data/lib/chef/resource_definition.rb +68 -68
  987. data/lib/chef/resource_definition_list.rb +38 -38
  988. data/lib/chef/resource_reporter.rb +338 -338
  989. data/lib/chef/resource_resolver.rb +184 -184
  990. data/lib/chef/resources.rb +101 -101
  991. data/lib/chef/rest.rb +210 -210
  992. data/lib/chef/role.rb +280 -280
  993. data/lib/chef/run_context.rb +681 -681
  994. data/lib/chef/run_context/cookbook_compiler.rb +291 -291
  995. data/lib/chef/run_list.rb +168 -168
  996. data/lib/chef/run_list/run_list_expansion.rb +234 -234
  997. data/lib/chef/run_list/run_list_item.rb +98 -98
  998. data/lib/chef/run_list/versioned_recipe_list.rb +102 -102
  999. data/lib/chef/run_lock.rb +197 -197
  1000. data/lib/chef/run_status.rb +125 -125
  1001. data/lib/chef/runner.rb +143 -143
  1002. data/lib/chef/sandbox.rb +20 -20
  1003. data/lib/chef/scan_access_control.rb +138 -138
  1004. data/lib/chef/search/query.rb +183 -183
  1005. data/lib/chef/server_api.rb +80 -80
  1006. data/lib/chef/server_api_versions.rb +40 -40
  1007. data/lib/chef/shell.rb +327 -327
  1008. data/lib/chef/shell/ext.rb +593 -593
  1009. data/lib/chef/shell/model_wrapper.rb +120 -120
  1010. data/lib/chef/shell/shell_session.rb +299 -299
  1011. data/lib/chef/shell_out.rb +13 -13
  1012. data/lib/chef/tasks/chef_repo.rake +200 -200
  1013. data/lib/chef/user.rb +197 -197
  1014. data/lib/chef/user_v1.rb +328 -328
  1015. data/lib/chef/util/backup.rb +94 -94
  1016. data/lib/chef/util/diff.rb +184 -184
  1017. data/lib/chef/util/dsc/configuration_generator.rb +139 -139
  1018. data/lib/chef/util/dsc/lcm_output_parser.rb +192 -192
  1019. data/lib/chef/util/dsc/local_configuration_manager.rb +151 -151
  1020. data/lib/chef/util/dsc/resource_info.rb +26 -26
  1021. data/lib/chef/util/dsc/resource_store.rb +109 -109
  1022. data/lib/chef/util/editor.rb +91 -91
  1023. data/lib/chef/util/file_edit.rb +100 -100
  1024. data/lib/chef/util/path_helper.rb +25 -25
  1025. data/lib/chef/util/powershell/cmdlet.rb +173 -173
  1026. data/lib/chef/util/powershell/cmdlet_result.rb +61 -61
  1027. data/lib/chef/util/powershell/ps_credential.rb +41 -41
  1028. data/lib/chef/util/selinux.rb +92 -92
  1029. data/lib/chef/util/threaded_job_queue.rb +61 -61
  1030. data/lib/chef/util/windows.rb +24 -24
  1031. data/lib/chef/util/windows/net_group.rb +72 -72
  1032. data/lib/chef/util/windows/net_use.rb +81 -81
  1033. data/lib/chef/util/windows/net_user.rb +164 -164
  1034. data/lib/chef/util/windows/volume.rb +53 -53
  1035. data/lib/chef/version.rb +34 -34
  1036. data/lib/chef/version/platform.rb +44 -44
  1037. data/lib/chef/version_class.rb +75 -75
  1038. data/lib/chef/version_constraint.rb +118 -118
  1039. data/lib/chef/version_constraint/platform.rb +26 -26
  1040. data/lib/chef/whitelist.rb +86 -86
  1041. data/lib/chef/win32/api.rb +372 -372
  1042. data/lib/chef/win32/api/crypto.rb +63 -63
  1043. data/lib/chef/win32/api/error.rb +953 -953
  1044. data/lib/chef/win32/api/file.rb +619 -619
  1045. data/lib/chef/win32/api/installer.rb +165 -165
  1046. data/lib/chef/win32/api/memory.rb +105 -105
  1047. data/lib/chef/win32/api/net.rb +312 -312
  1048. data/lib/chef/win32/api/process.rb +42 -42
  1049. data/lib/chef/win32/api/psapi.rb +51 -51
  1050. data/lib/chef/win32/api/registry.rb +51 -51
  1051. data/lib/chef/win32/api/security.rb +460 -460
  1052. data/lib/chef/win32/api/synchronization.rb +89 -89
  1053. data/lib/chef/win32/api/system.rb +238 -238
  1054. data/lib/chef/win32/api/unicode.rb +135 -135
  1055. data/lib/chef/win32/crypto.rb +50 -50
  1056. data/lib/chef/win32/error.rb +86 -86
  1057. data/lib/chef/win32/eventlog.rb +31 -31
  1058. data/lib/chef/win32/file.rb +216 -216
  1059. data/lib/chef/win32/file/info.rb +99 -99
  1060. data/lib/chef/win32/file/version_info.rb +93 -93
  1061. data/lib/chef/win32/handle.rb +55 -55
  1062. data/lib/chef/win32/memory.rb +101 -101
  1063. data/lib/chef/win32/mutex.rb +116 -116
  1064. data/lib/chef/win32/net.rb +311 -311
  1065. data/lib/chef/win32/process.rb +97 -97
  1066. data/lib/chef/win32/registry.rb +374 -374
  1067. data/lib/chef/win32/security.rb +663 -665
  1068. data/lib/chef/win32/security/ace.rb +123 -123
  1069. data/lib/chef/win32/security/acl.rb +103 -103
  1070. data/lib/chef/win32/security/securable_object.rb +109 -109
  1071. data/lib/chef/win32/security/security_descriptor.rb +93 -93
  1072. data/lib/chef/win32/security/sid.rb +304 -304
  1073. data/lib/chef/win32/security/token.rb +72 -72
  1074. data/lib/chef/win32/system.rb +62 -62
  1075. data/lib/chef/win32/unicode.rb +60 -60
  1076. data/lib/chef/win32/version.rb +158 -158
  1077. data/lib/chef/workstation_config_loader.rb +23 -23
  1078. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -5
  1079. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -1
  1080. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -13
  1081. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -34
  1082. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -1
  1083. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -13
  1084. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -1
  1085. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -11
  1086. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -1
  1087. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -13
  1088. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -34
  1089. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -1
  1090. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -13
  1091. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -1
  1092. data/spec/data/apt/chef-integration-test2-1.0/debian/changelog +5 -5
  1093. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log +45 -45
  1094. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars +1 -1
  1095. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles +1 -1
  1096. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control +10 -10
  1097. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums +1 -1
  1098. data/spec/data/apt/chef-integration-test2-1.0/debian/compat +1 -1
  1099. data/spec/data/apt/chef-integration-test2-1.0/debian/conffiles +1 -1
  1100. data/spec/data/apt/chef-integration-test2-1.0/debian/control +13 -13
  1101. data/spec/data/apt/chef-integration-test2-1.0/debian/copyright +34 -34
  1102. data/spec/data/apt/chef-integration-test2-1.0/debian/files +1 -1
  1103. data/spec/data/apt/chef-integration-test2-1.0/debian/rules +13 -13
  1104. data/spec/data/apt/chef-integration-test2-1.0/debian/source/format +1 -1
  1105. data/spec/data/apt/chef-integration-test2_1.0-1.dsc +18 -18
  1106. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.build +91 -91
  1107. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes +31 -31
  1108. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -22
  1109. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -22
  1110. data/spec/data/apt/var/www/apt/conf/distributions +7 -7
  1111. data/spec/data/apt/var/www/apt/conf/incoming +4 -4
  1112. data/spec/data/apt/var/www/apt/conf/pulls +3 -3
  1113. data/spec/data/apt/var/www/apt/db/version +4 -4
  1114. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -19
  1115. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -16
  1116. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -5
  1117. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -1
  1118. data/spec/data/bootstrap/no_proxy.erb +2 -2
  1119. data/spec/data/bootstrap/secret.erb +9 -9
  1120. data/spec/data/bootstrap/test-hints.erb +12 -12
  1121. data/spec/data/bootstrap/test.erb +1 -1
  1122. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +2 -2
  1123. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -1
  1124. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -1
  1125. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -1
  1126. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -1
  1127. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -1
  1128. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -1
  1129. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -1
  1130. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -1
  1131. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -1
  1132. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -1
  1133. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -1
  1134. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -1
  1135. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -1
  1136. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -1
  1137. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -1
  1138. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -1
  1139. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -1
  1140. data/spec/data/client.d_00/00-foo.rb +2 -2
  1141. data/spec/data/client.d_00/01-bar.rb +1 -1
  1142. data/spec/data/client.d_00/bar +1 -1
  1143. data/spec/data/client.d_01/foo/bar.rb +1 -1
  1144. data/spec/data/client.d_02/foo.rb/foo.txt +1 -1
  1145. data/spec/data/config.rb +6 -6
  1146. data/spec/data/cookbooks/angrybash/metadata.rb +2 -2
  1147. data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -8
  1148. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -2
  1149. data/spec/data/cookbooks/apache2/metadata.rb +2 -2
  1150. data/spec/data/cookbooks/apache2/recipes/default.rb +2 -2
  1151. data/spec/data/cookbooks/borken/metadata.rb +2 -2
  1152. data/spec/data/cookbooks/borken/recipes/default.rb +1 -1
  1153. data/spec/data/cookbooks/borken/templates/default/borken.erb +1 -1
  1154. data/spec/data/cookbooks/chefignore +8 -8
  1155. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -2
  1156. data/spec/data/cookbooks/ignorken/metadata.rb +2 -2
  1157. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +1 -1
  1158. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -2
  1159. data/spec/data/cookbooks/java/files/default/java.response +1 -1
  1160. data/spec/data/cookbooks/java/metadata.rb +2 -2
  1161. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -4
  1162. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -8
  1163. data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +8 -8
  1164. data/spec/data/cookbooks/openldap/attributes/default.rb +16 -16
  1165. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  1166. data/spec/data/cookbooks/openldap/definitions/client.rb +5 -5
  1167. data/spec/data/cookbooks/openldap/definitions/server.rb +5 -5
  1168. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -1
  1169. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -1
  1170. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -2
  1171. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +2 -2
  1172. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +2 -2
  1173. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -1
  1174. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +2 -2
  1175. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +2 -2
  1176. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -3
  1177. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -4
  1178. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -3
  1179. data/spec/data/cookbooks/openldap/metadata.rb +8 -8
  1180. data/spec/data/cookbooks/openldap/recipes/default.rb +4 -4
  1181. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -3
  1182. data/spec/data/cookbooks/openldap/recipes/one.rb +15 -15
  1183. data/spec/data/cookbooks/openldap/recipes/return.rb +2 -2
  1184. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -1
  1185. data/spec/data/cookbooks/openldap/templates/default/helpers.erb +14 -14
  1186. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -1
  1187. data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +1 -1
  1188. data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +1 -1
  1189. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -4
  1190. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -1
  1191. data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -1
  1192. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -1
  1193. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -4
  1194. data/spec/data/cookbooks/preseed/metadata.rb +2 -2
  1195. data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -1
  1196. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -1
  1197. data/spec/data/cookbooks/supports-platform-constraints/metadata.rb +5 -5
  1198. data/spec/data/definitions/test.rb +4 -4
  1199. data/spec/data/environment-config.rb +4 -4
  1200. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -127
  1201. data/spec/data/fileedit/hosts +4 -4
  1202. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -4
  1203. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -13
  1204. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +8 -8
  1205. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -4
  1206. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +9 -9
  1207. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +8 -8
  1208. data/spec/data/kitchen/chefignore +6 -6
  1209. data/spec/data/kitchen/openldap/attributes/default.rb +3 -3
  1210. data/spec/data/kitchen/openldap/attributes/robinson.rb +2 -2
  1211. data/spec/data/kitchen/openldap/definitions/client.rb +3 -3
  1212. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +2 -2
  1213. data/spec/data/kitchen/openldap/recipes/gigantor.rb +2 -2
  1214. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +2 -2
  1215. data/spec/data/kitchen/openldap/recipes/woot.rb +3 -3
  1216. data/spec/data/knife_subcommand/test_explicit_category.rb +6 -6
  1217. data/spec/data/knife_subcommand/test_name_mapping.rb +4 -4
  1218. data/spec/data/knife_subcommand/test_yourself.rb +21 -21
  1219. data/spec/data/lwrp/providers/buck_passer.rb +28 -28
  1220. data/spec/data/lwrp/providers/buck_passer_2.rb +26 -26
  1221. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +28 -28
  1222. data/spec/data/lwrp/providers/inline_compiler.rb +26 -26
  1223. data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -5
  1224. data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -7
  1225. data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -7
  1226. data/spec/data/lwrp/resources/bar.rb +2 -2
  1227. data/spec/data/lwrp/resources/foo.rb +4 -4
  1228. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -1
  1229. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -5
  1230. data/spec/data/lwrp_override/resources/foo.rb +10 -10
  1231. data/spec/data/mac_users/10.7-8.plist.xml +559 -559
  1232. data/spec/data/mac_users/10.7-8.shadow.xml +11 -11
  1233. data/spec/data/mac_users/10.7.plist.xml +559 -559
  1234. data/spec/data/mac_users/10.7.shadow.xml +11 -11
  1235. data/spec/data/mac_users/10.8.plist.xml +559 -559
  1236. data/spec/data/mac_users/10.8.shadow.xml +21 -21
  1237. data/spec/data/mac_users/10.9.plist.xml +560 -560
  1238. data/spec/data/mac_users/10.9.shadow.xml +21 -21
  1239. data/spec/data/metadata/quick_start/metadata.rb +19 -19
  1240. data/spec/data/nested.json +2 -2
  1241. data/spec/data/nodes/default.rb +15 -15
  1242. data/spec/data/nodes/test.example.com.rb +17 -17
  1243. data/spec/data/nodes/test.rb +15 -15
  1244. data/spec/data/null_config.rb +1 -1
  1245. data/spec/data/object_loader/environments/test.json +7 -7
  1246. data/spec/data/object_loader/environments/test.rb +2 -2
  1247. data/spec/data/object_loader/environments/test_json_class.json +8 -8
  1248. data/spec/data/object_loader/nodes/test.json +7 -7
  1249. data/spec/data/object_loader/nodes/test.rb +2 -2
  1250. data/spec/data/object_loader/nodes/test_json_class.json +8 -8
  1251. data/spec/data/object_loader/roles/test.json +7 -7
  1252. data/spec/data/object_loader/roles/test.rb +2 -2
  1253. data/spec/data/object_loader/roles/test_json_class.json +8 -8
  1254. data/spec/data/partial_one.erb +1 -1
  1255. data/spec/data/prefer_metadata_json/metadata.json +51 -51
  1256. data/spec/data/prefer_metadata_json/metadata.rb +6 -6
  1257. data/spec/data/recipes/test.rb +7 -7
  1258. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +2 -2
  1259. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -1
  1260. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -2
  1261. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -2
  1262. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -1
  1263. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -1
  1264. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +2 -2
  1265. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -1
  1266. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -2
  1267. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -2
  1268. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -1
  1269. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -1
  1270. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
  1271. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
  1272. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +2 -2
  1273. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -1
  1274. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -2
  1275. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -1
  1276. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -1
  1277. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +2 -2
  1278. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -1
  1279. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -2
  1280. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -1
  1281. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -1
  1282. data/spec/data/run_context/cookbooks/include/recipes/default.rb +24 -24
  1283. data/spec/data/run_context/cookbooks/include/recipes/includee.rb +3 -3
  1284. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +2 -2
  1285. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -1
  1286. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -1
  1287. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -1
  1288. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +2 -2
  1289. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -1
  1290. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -2
  1291. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -2
  1292. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -1
  1293. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -1
  1294. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +2 -2
  1295. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -1
  1296. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -1
  1297. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -3
  1298. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -1
  1299. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -1
  1300. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  1301. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -9
  1302. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -5
  1303. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -1
  1304. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -1
  1305. data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -5
  1306. data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -7
  1307. data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -7
  1308. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -1
  1309. data/spec/data/run_context/nodes/run_context.rb +5 -5
  1310. data/spec/data/sample_msu1.xml +10 -10
  1311. data/spec/data/sample_msu2.xml +14 -14
  1312. data/spec/data/sample_msu3.xml +16 -16
  1313. data/spec/data/search_queries_to_transform.txt +98 -98
  1314. data/spec/data/shef-config.rb +10 -10
  1315. data/spec/data/ssl/5e707473.0 +18 -18
  1316. data/spec/data/ssl/chef-rspec.cert +27 -27
  1317. data/spec/data/ssl/chef-rspec.key +27 -27
  1318. data/spec/data/ssl/key.pem +15 -15
  1319. data/spec/data/ssl/private_key.pem +27 -27
  1320. data/spec/data/ssl/private_key_with_whitespace.pem +32 -32
  1321. data/spec/data/standalone_cookbook/chefignore +9 -9
  1322. data/spec/data/standalone_cookbook/recipes/default.rb +2 -2
  1323. data/spec/data/trusted_certs/example.crt +22 -22
  1324. data/spec/data/trusted_certs/example_no_cn.crt +36 -36
  1325. data/spec/data/trusted_certs/intermediate.pem +27 -27
  1326. data/spec/data/trusted_certs/opscode.pem +57 -57
  1327. data/spec/data/trusted_certs/root.pem +22 -22
  1328. data/spec/functional/application_spec.rb +58 -58
  1329. data/spec/functional/assets/chefinittest +36 -36
  1330. data/spec/functional/assets/testchefsubsys +10 -10
  1331. data/spec/functional/assets/yumrepo/repodata/repomd.xml +55 -55
  1332. data/spec/functional/audit/rspec_formatter_spec.rb +54 -54
  1333. data/spec/functional/audit/runner_spec.rb +121 -121
  1334. data/spec/functional/dsl/reboot_pending_spec.rb +106 -106
  1335. data/spec/functional/dsl/registry_helper_spec.rb +61 -61
  1336. data/spec/functional/event_loggers/windows_eventlog_spec.rb +104 -104
  1337. data/spec/functional/file_content_management/deploy_strategies_spec.rb +229 -229
  1338. data/spec/functional/http/simple_spec.rb +140 -140
  1339. data/spec/functional/knife/configure_spec.rb +33 -33
  1340. data/spec/functional/knife/cookbook_delete_spec.rb +156 -156
  1341. data/spec/functional/knife/exec_spec.rb +55 -55
  1342. data/spec/functional/knife/rehash_spec.rb +39 -39
  1343. data/spec/functional/knife/smoke_test.rb +42 -42
  1344. data/spec/functional/knife/ssh_spec.rb +284 -284
  1345. data/spec/functional/mixin/powershell_out_spec.rb +43 -43
  1346. data/spec/functional/mixin/shell_out_spec.rb +48 -48
  1347. data/spec/functional/notifications_spec.rb +238 -238
  1348. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +100 -100
  1349. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +51 -51
  1350. data/spec/functional/rebooter_spec.rb +105 -105
  1351. data/spec/functional/resource/aix_service_spec.rb +138 -138
  1352. data/spec/functional/resource/aixinit_service_spec.rb +211 -211
  1353. data/spec/functional/resource/base.rb +28 -28
  1354. data/spec/functional/resource/bash_spec.rb +88 -88
  1355. data/spec/functional/resource/batch_spec.rb +34 -34
  1356. data/spec/functional/resource/bff_spec.rb +120 -120
  1357. data/spec/functional/resource/chocolatey_package_spec.rb +125 -125
  1358. data/spec/functional/resource/cookbook_file_spec.rb +81 -81
  1359. data/spec/functional/resource/cron_spec.rb +179 -179
  1360. data/spec/functional/resource/deploy_revision_spec.rb +881 -881
  1361. data/spec/functional/resource/directory_spec.rb +43 -43
  1362. data/spec/functional/resource/dnf_package_spec.rb +686 -686
  1363. data/spec/functional/resource/dpkg_package_spec.rb +339 -339
  1364. data/spec/functional/resource/dsc_resource_spec.rb +90 -90
  1365. data/spec/functional/resource/dsc_script_spec.rb +484 -484
  1366. data/spec/functional/resource/env_spec.rb +192 -192
  1367. data/spec/functional/resource/execute_spec.rb +171 -171
  1368. data/spec/functional/resource/file_spec.rb +167 -167
  1369. data/spec/functional/resource/git_spec.rb +257 -257
  1370. data/spec/functional/resource/group_spec.rb +488 -488
  1371. data/spec/functional/resource/ifconfig_spec.rb +171 -171
  1372. data/spec/functional/resource/link_spec.rb +703 -703
  1373. data/spec/functional/resource/mount_spec.rb +207 -207
  1374. data/spec/functional/resource/msu_package_spec.rb +84 -84
  1375. data/spec/functional/resource/ohai_spec.rb +62 -62
  1376. data/spec/functional/resource/package_spec.rb +386 -386
  1377. data/spec/functional/resource/powershell_script_spec.rb +601 -601
  1378. data/spec/functional/resource/reboot_spec.rb +103 -103
  1379. data/spec/functional/resource/registry_spec.rb +676 -676
  1380. data/spec/functional/resource/remote_directory_spec.rb +220 -220
  1381. data/spec/functional/resource/remote_file_spec.rb +249 -249
  1382. data/spec/functional/resource/rpm_spec.rb +120 -120
  1383. data/spec/functional/resource/template_spec.rb +212 -212
  1384. data/spec/functional/resource/user/dscl_spec.rb +196 -196
  1385. data/spec/functional/resource/user/useradd_spec.rb +709 -709
  1386. data/spec/functional/resource/user/windows_spec.rb +133 -133
  1387. data/spec/functional/resource/windows_package_spec.rb +168 -168
  1388. data/spec/functional/resource/windows_service_spec.rb +102 -102
  1389. data/spec/functional/rest_spec.rb +95 -95
  1390. data/spec/functional/run_lock_spec.rb +473 -473
  1391. data/spec/functional/shell_spec.rb +148 -148
  1392. data/spec/functional/tiny_server_spec.rb +79 -79
  1393. data/spec/functional/util/path_helper_spec.rb +37 -37
  1394. data/spec/functional/util/powershell/cmdlet_spec.rb +111 -111
  1395. data/spec/functional/version_spec.rb +35 -35
  1396. data/spec/functional/win32/crypto_spec.rb +54 -54
  1397. data/spec/functional/win32/registry_spec.rb +624 -624
  1398. data/spec/functional/win32/security_spec.rb +135 -100
  1399. data/spec/functional/win32/service_manager_spec.rb +220 -220
  1400. data/spec/functional/win32/sid_spec.rb +55 -55
  1401. data/spec/functional/win32/version_info_spec.rb +50 -50
  1402. data/spec/functional/win32/versions_spec.rb +117 -117
  1403. data/spec/integration/client/client_spec.rb +535 -535
  1404. data/spec/integration/client/exit_code_spec.rb +245 -245
  1405. data/spec/integration/client/ipv6_spec.rb +134 -134
  1406. data/spec/integration/knife/chef_fs_data_store_spec.rb +556 -556
  1407. data/spec/integration/knife/chef_repo_path_spec.rb +959 -959
  1408. data/spec/integration/knife/chef_repository_file_system_spec.rb +296 -296
  1409. data/spec/integration/knife/chefignore_spec.rb +300 -300
  1410. data/spec/integration/knife/client_bulk_delete_spec.rb +130 -130
  1411. data/spec/integration/knife/client_create_spec.rb +69 -69
  1412. data/spec/integration/knife/client_delete_spec.rb +63 -63
  1413. data/spec/integration/knife/client_key_create_spec.rb +65 -65
  1414. data/spec/integration/knife/client_key_delete_spec.rb +42 -42
  1415. data/spec/integration/knife/client_key_list_spec.rb +60 -60
  1416. data/spec/integration/knife/client_key_show_spec.rb +44 -44
  1417. data/spec/integration/knife/client_list_spec.rb +48 -48
  1418. data/spec/integration/knife/client_show_spec.rb +36 -36
  1419. data/spec/integration/knife/common_options_spec.rb +155 -155
  1420. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +112 -112
  1421. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +64 -64
  1422. data/spec/integration/knife/cookbook_download_spec.rb +95 -95
  1423. data/spec/integration/knife/cookbook_list_spec.rb +54 -54
  1424. data/spec/integration/knife/cookbook_show_spec.rb +159 -159
  1425. data/spec/integration/knife/cookbook_upload_spec.rb +90 -90
  1426. data/spec/integration/knife/data_bag_create_spec.rb +55 -55
  1427. data/spec/integration/knife/data_bag_delete_spec.rb +58 -58
  1428. data/spec/integration/knife/data_bag_from_file_spec.rb +115 -115
  1429. data/spec/integration/knife/data_bag_list_spec.rb +43 -43
  1430. data/spec/integration/knife/data_bag_show_spec.rb +53 -53
  1431. data/spec/integration/knife/delete_spec.rb +1017 -1017
  1432. data/spec/integration/knife/deps_spec.rb +706 -706
  1433. data/spec/integration/knife/diff_spec.rb +602 -602
  1434. data/spec/integration/knife/download_spec.rb +1333 -1333
  1435. data/spec/integration/knife/environment_compare_spec.rb +74 -74
  1436. data/spec/integration/knife/environment_create_spec.rb +40 -40
  1437. data/spec/integration/knife/environment_delete_spec.rb +36 -36
  1438. data/spec/integration/knife/environment_from_file_spec.rb +115 -115
  1439. data/spec/integration/knife/environment_list_spec.rb +41 -41
  1440. data/spec/integration/knife/environment_show_spec.rb +76 -76
  1441. data/spec/integration/knife/list_spec.rb +1059 -1059
  1442. data/spec/integration/knife/node_bulk_delete_spec.rb +51 -51
  1443. data/spec/integration/knife/node_create_spec.rb +46 -46
  1444. data/spec/integration/knife/node_delete_spec.rb +47 -47
  1445. data/spec/integration/knife/node_environment_set_spec.rb +45 -45
  1446. data/spec/integration/knife/node_from_file_spec.rb +58 -58
  1447. data/spec/integration/knife/node_list_spec.rb +44 -44
  1448. data/spec/integration/knife/node_run_list_add_spec.rb +53 -53
  1449. data/spec/integration/knife/node_run_list_remove_spec.rb +35 -35
  1450. data/spec/integration/knife/node_run_list_set_spec.rb +40 -40
  1451. data/spec/integration/knife/node_show_spec.rb +35 -35
  1452. data/spec/integration/knife/raw_spec.rb +244 -244
  1453. data/spec/integration/knife/redirection_spec.rb +52 -52
  1454. data/spec/integration/knife/role_bulk_delete_spec.rb +51 -51
  1455. data/spec/integration/knife/role_create_spec.rb +40 -40
  1456. data/spec/integration/knife/role_delete_spec.rb +47 -47
  1457. data/spec/integration/knife/role_from_file_spec.rb +95 -95
  1458. data/spec/integration/knife/role_list_spec.rb +44 -44
  1459. data/spec/integration/knife/role_show_spec.rb +50 -50
  1460. data/spec/integration/knife/serve_spec.rb +57 -57
  1461. data/spec/integration/knife/show_spec.rb +167 -167
  1462. data/spec/integration/knife/upload_spec.rb +1548 -1548
  1463. data/spec/integration/recipes/accumulator_spec.rb +232 -232
  1464. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +175 -175
  1465. data/spec/integration/recipes/lwrp_spec.rb +53 -53
  1466. data/spec/integration/recipes/noop_resource_spec.rb +24 -24
  1467. data/spec/integration/recipes/notifies_spec.rb +334 -334
  1468. data/spec/integration/recipes/notifying_block_spec.rb +111 -111
  1469. data/spec/integration/recipes/provider_choice.rb +37 -37
  1470. data/spec/integration/recipes/recipe_dsl_spec.rb +1523 -1523
  1471. data/spec/integration/recipes/remote_directory.rb +74 -74
  1472. data/spec/integration/recipes/resource_action_spec.rb +581 -581
  1473. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +496 -496
  1474. data/spec/integration/recipes/resource_load_spec.rb +208 -208
  1475. data/spec/integration/solo/solo_spec.rb +217 -217
  1476. data/spec/rcov.opts +2 -2
  1477. data/spec/scripts/ssl-serve.rb +47 -47
  1478. data/spec/spec_helper.rb +288 -288
  1479. data/spec/stress/win32/file_spec.rb +37 -37
  1480. data/spec/stress/win32/memory_spec.rb +22 -22
  1481. data/spec/stress/win32/security_spec.rb +69 -69
  1482. data/spec/support/chef_helpers.rb +115 -115
  1483. data/spec/support/key_helpers.rb +104 -104
  1484. data/spec/support/lib/chef/provider/easy.rb +35 -35
  1485. data/spec/support/lib/chef/provider/openldap_includer.rb +29 -29
  1486. data/spec/support/lib/chef/provider/snakeoil.rb +42 -42
  1487. data/spec/support/lib/chef/resource/cat.rb +39 -39
  1488. data/spec/support/lib/chef/resource/one_two_three_four.rb +38 -38
  1489. data/spec/support/lib/chef/resource/openldap_includer.rb +28 -28
  1490. data/spec/support/lib/chef/resource/with_state.rb +30 -30
  1491. data/spec/support/lib/chef/resource/zen_follower.rb +35 -35
  1492. data/spec/support/lib/chef/resource/zen_master.rb +42 -42
  1493. data/spec/support/lib/library_load_order.rb +20 -20
  1494. data/spec/support/matchers/leak.rb +98 -98
  1495. data/spec/support/mock/constant.rb +52 -52
  1496. data/spec/support/mock/platform.rb +25 -25
  1497. data/spec/support/platform_helpers.rb +237 -237
  1498. data/spec/support/platforms/prof/gc.rb +51 -51
  1499. data/spec/support/platforms/prof/win32.rb +45 -45
  1500. data/spec/support/platforms/win32/spec_service.rb +59 -59
  1501. data/spec/support/shared/context/client.rb +302 -302
  1502. data/spec/support/shared/context/config.rb +21 -21
  1503. data/spec/support/shared/context/win32.rb +34 -34
  1504. data/spec/support/shared/examples/client.rb +53 -53
  1505. data/spec/support/shared/functional/diff_disabled.rb +10 -10
  1506. data/spec/support/shared/functional/directory_resource.rb +176 -176
  1507. data/spec/support/shared/functional/execute_resource.rb +150 -150
  1508. data/spec/support/shared/functional/file_resource.rb +1050 -1050
  1509. data/spec/support/shared/functional/http.rb +248 -248
  1510. data/spec/support/shared/functional/knife.rb +37 -37
  1511. data/spec/support/shared/functional/securable_resource.rb +547 -547
  1512. data/spec/support/shared/functional/securable_resource_with_reporting.rb +394 -394
  1513. data/spec/support/shared/functional/win32_service.rb +57 -57
  1514. data/spec/support/shared/functional/windows_script.rb +272 -272
  1515. data/spec/support/shared/integration/app_server_support.rb +40 -40
  1516. data/spec/support/shared/integration/integration_helper.rb +154 -154
  1517. data/spec/support/shared/integration/knife_support.rb +185 -185
  1518. data/spec/support/shared/matchers/exit_with_code.rb +32 -32
  1519. data/spec/support/shared/matchers/match_environment_variable.rb +17 -17
  1520. data/spec/support/shared/shared_examples.rb +14 -14
  1521. data/spec/support/shared/unit/api_error_inspector.rb +190 -190
  1522. data/spec/support/shared/unit/api_versioning.rb +77 -77
  1523. data/spec/support/shared/unit/application_dot_d.rb +73 -73
  1524. data/spec/support/shared/unit/execute_resource.rb +170 -170
  1525. data/spec/support/shared/unit/file_system_support.rb +69 -69
  1526. data/spec/support/shared/unit/knife_shared.rb +39 -39
  1527. data/spec/support/shared/unit/mock_shellout.rb +49 -49
  1528. data/spec/support/shared/unit/platform_introspector.rb +189 -189
  1529. data/spec/support/shared/unit/provider/file.rb +845 -845
  1530. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +402 -402
  1531. data/spec/support/shared/unit/resource/static_provider_resolution.rb +63 -63
  1532. data/spec/support/shared/unit/script_resource.rb +98 -98
  1533. data/spec/support/shared/unit/user_and_client_shared.rb +114 -114
  1534. data/spec/support/shared/unit/windows_script_resource.rb +80 -80
  1535. data/spec/tiny_server.rb +192 -192
  1536. data/spec/unit/api_client/registration_spec.rb +278 -278
  1537. data/spec/unit/api_client_spec.rb +341 -341
  1538. data/spec/unit/api_client_v1_spec.rb +455 -455
  1539. data/spec/unit/application/apply_spec.rb +113 -113
  1540. data/spec/unit/application/client_spec.rb +530 -530
  1541. data/spec/unit/application/exit_code_spec.rb +229 -229
  1542. data/spec/unit/application/knife_spec.rb +229 -229
  1543. data/spec/unit/application/solo_spec.rb +232 -232
  1544. data/spec/unit/application_spec.rb +411 -411
  1545. data/spec/unit/audit/audit_event_proxy_spec.rb +318 -318
  1546. data/spec/unit/audit/audit_reporter_spec.rb +439 -439
  1547. data/spec/unit/audit/control_group_data_spec.rb +482 -482
  1548. data/spec/unit/audit/logger_spec.rb +42 -42
  1549. data/spec/unit/audit/rspec_formatter_spec.rb +29 -29
  1550. data/spec/unit/audit/runner_spec.rb +144 -144
  1551. data/spec/unit/chef_class_spec.rb +110 -110
  1552. data/spec/unit/chef_fs/config_spec.rb +235 -235
  1553. data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +63 -63
  1554. data/spec/unit/chef_fs/diff_spec.rb +328 -328
  1555. data/spec/unit/chef_fs/file_pattern_spec.rb +512 -512
  1556. data/spec/unit/chef_fs/file_system/cookbook_subdir_spec.rb +34 -34
  1557. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +47 -47
  1558. data/spec/unit/chef_fs/file_system/repository/base_file_spec.rb +126 -126
  1559. data/spec/unit/chef_fs/file_system/repository/directory_spec.rb +175 -175
  1560. data/spec/unit/chef_fs/file_system_spec.rb +148 -148
  1561. data/spec/unit/chef_fs/parallelizer.rb +477 -477
  1562. data/spec/unit/chef_fs/path_util_spec.rb +108 -108
  1563. data/spec/unit/chef_spec.rb +25 -25
  1564. data/spec/unit/client_spec.rb +604 -604
  1565. data/spec/unit/config_fetcher_spec.rb +125 -125
  1566. data/spec/unit/config_spec.rb +31 -31
  1567. data/spec/unit/cookbook/chefignore_spec.rb +49 -49
  1568. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +207 -207
  1569. data/spec/unit/cookbook/file_vendor_spec.rb +112 -112
  1570. data/spec/unit/cookbook/metadata_spec.rb +971 -971
  1571. data/spec/unit/cookbook/synchronizer_spec.rb +539 -539
  1572. data/spec/unit/cookbook/syntax_check_spec.rb +225 -225
  1573. data/spec/unit/cookbook_loader_spec.rb +299 -299
  1574. data/spec/unit/cookbook_manifest_spec.rb +243 -243
  1575. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +203 -203
  1576. data/spec/unit/cookbook_spec.rb +66 -66
  1577. data/spec/unit/cookbook_uploader_spec.rb +199 -199
  1578. data/spec/unit/cookbook_version_file_specificity_spec.rb +576 -576
  1579. data/spec/unit/cookbook_version_spec.rb +359 -359
  1580. data/spec/unit/daemon_spec.rb +183 -183
  1581. data/spec/unit/data_bag_item_spec.rb +388 -388
  1582. data/spec/unit/data_bag_spec.rb +260 -260
  1583. data/spec/unit/data_collector/messages/helpers_spec.rb +193 -193
  1584. data/spec/unit/data_collector/messages_spec.rb +192 -192
  1585. data/spec/unit/data_collector/resource_report_spec.rb +145 -145
  1586. data/spec/unit/data_collector_spec.rb +741 -741
  1587. data/spec/unit/decorator/lazy_array_spec.rb +58 -58
  1588. data/spec/unit/decorator/lazy_spec.rb +39 -39
  1589. data/spec/unit/decorator_spec.rb +142 -142
  1590. data/spec/unit/deprecated_spec.rb +59 -59
  1591. data/spec/unit/deprecation_spec.rb +143 -143
  1592. data/spec/unit/digester_spec.rb +49 -49
  1593. data/spec/unit/dsl/audit_spec.rb +43 -43
  1594. data/spec/unit/dsl/data_query_spec.rb +107 -107
  1595. data/spec/unit/dsl/declare_resource_spec.rb +365 -365
  1596. data/spec/unit/dsl/platform_introspection_spec.rb +129 -129
  1597. data/spec/unit/dsl/reboot_pending_spec.rb +100 -100
  1598. data/spec/unit/dsl/recipe_spec.rb +93 -93
  1599. data/spec/unit/dsl/registry_helper_spec.rb +52 -52
  1600. data/spec/unit/dsl/resources_spec.rb +85 -85
  1601. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +96 -96
  1602. data/spec/unit/encrypted_data_bag_item_spec.rb +438 -438
  1603. data/spec/unit/environment_spec.rb +470 -470
  1604. data/spec/unit/event_dispatch/dispatcher_spec.rb +122 -122
  1605. data/spec/unit/event_dispatch/dsl_spec.rb +83 -83
  1606. data/spec/unit/exceptions_spec.rb +132 -132
  1607. data/spec/unit/file_access_control_spec.rb +308 -308
  1608. data/spec/unit/file_cache_spec.rb +114 -114
  1609. data/spec/unit/file_content_management/deploy/cp_spec.rb +44 -44
  1610. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +101 -101
  1611. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +232 -232
  1612. data/spec/unit/file_content_management/tempfile_spec.rb +115 -115
  1613. data/spec/unit/formatters/base_spec.rb +71 -71
  1614. data/spec/unit/formatters/doc_spec.rb +92 -92
  1615. data/spec/unit/formatters/error_description_spec.rb +141 -141
  1616. data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +76 -76
  1617. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +265 -265
  1618. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +126 -126
  1619. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +43 -43
  1620. data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +26 -26
  1621. data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +26 -26
  1622. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +191 -191
  1623. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +91 -91
  1624. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +155 -155
  1625. data/spec/unit/guard_interpreter_spec.rb +41 -41
  1626. data/spec/unit/handler/json_file_spec.rb +63 -63
  1627. data/spec/unit/handler_spec.rb +302 -302
  1628. data/spec/unit/http/api_versions_spec.rb +69 -69
  1629. data/spec/unit/http/authenticator_spec.rb +80 -80
  1630. data/spec/unit/http/basic_client_spec.rb +72 -72
  1631. data/spec/unit/http/http_request_spec.rb +91 -91
  1632. data/spec/unit/http/json_input_spec.rb +128 -128
  1633. data/spec/unit/http/simple_spec.rb +32 -32
  1634. data/spec/unit/http/socketless_chef_zero_client_spec.rb +173 -173
  1635. data/spec/unit/http/ssl_policies_spec.rb +169 -169
  1636. data/spec/unit/http/validate_content_length_spec.rb +207 -207
  1637. data/spec/unit/http_spec.rb +220 -220
  1638. data/spec/unit/json_compat_spec.rb +105 -105
  1639. data/spec/unit/key_spec.rb +631 -631
  1640. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +152 -152
  1641. data/spec/unit/knife/bootstrap/client_builder_spec.rb +207 -207
  1642. data/spec/unit/knife/bootstrap_spec.rb +824 -824
  1643. data/spec/unit/knife/client_bulk_delete_spec.rb +166 -166
  1644. data/spec/unit/knife/client_create_spec.rb +186 -186
  1645. data/spec/unit/knife/client_delete_spec.rb +99 -99
  1646. data/spec/unit/knife/client_edit_spec.rb +53 -53
  1647. data/spec/unit/knife/client_list_spec.rb +34 -34
  1648. data/spec/unit/knife/client_reregister_spec.rb +62 -62
  1649. data/spec/unit/knife/client_show_spec.rb +52 -52
  1650. data/spec/unit/knife/configure_client_spec.rb +83 -83
  1651. data/spec/unit/knife/configure_spec.rb +241 -241
  1652. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +87 -87
  1653. data/spec/unit/knife/cookbook_create_spec.rb +261 -261
  1654. data/spec/unit/knife/cookbook_delete_spec.rb +239 -239
  1655. data/spec/unit/knife/cookbook_download_spec.rb +237 -237
  1656. data/spec/unit/knife/cookbook_list_spec.rb +88 -88
  1657. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +65 -65
  1658. data/spec/unit/knife/cookbook_metadata_spec.rb +182 -182
  1659. data/spec/unit/knife/cookbook_show_spec.rb +221 -221
  1660. data/spec/unit/knife/cookbook_site_download_spec.rb +150 -150
  1661. data/spec/unit/knife/cookbook_site_install_spec.rb +200 -200
  1662. data/spec/unit/knife/cookbook_site_share_spec.rb +209 -209
  1663. data/spec/unit/knife/cookbook_site_unshare_spec.rb +77 -77
  1664. data/spec/unit/knife/cookbook_test_spec.rb +84 -84
  1665. data/spec/unit/knife/cookbook_upload_spec.rb +331 -331
  1666. data/spec/unit/knife/core/bootstrap_context_spec.rb +307 -307
  1667. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -187
  1668. data/spec/unit/knife/core/custom_manifest_loader_spec.rb +41 -41
  1669. data/spec/unit/knife/core/gem_glob_loader_spec.rb +209 -209
  1670. data/spec/unit/knife/core/hashed_command_loader_spec.rb +110 -110
  1671. data/spec/unit/knife/core/node_editor_spec.rb +211 -211
  1672. data/spec/unit/knife/core/object_loader_spec.rb +81 -81
  1673. data/spec/unit/knife/core/subcommand_loader_spec.rb +70 -70
  1674. data/spec/unit/knife/core/ui_spec.rb +629 -629
  1675. data/spec/unit/knife/data_bag_create_spec.rb +129 -129
  1676. data/spec/unit/knife/data_bag_edit_spec.rb +127 -127
  1677. data/spec/unit/knife/data_bag_from_file_spec.rb +173 -173
  1678. data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -165
  1679. data/spec/unit/knife/data_bag_show_spec.rb +124 -124
  1680. data/spec/unit/knife/environment_compare_spec.rb +112 -112
  1681. data/spec/unit/knife/environment_create_spec.rb +91 -91
  1682. data/spec/unit/knife/environment_delete_spec.rb +71 -71
  1683. data/spec/unit/knife/environment_edit_spec.rb +79 -79
  1684. data/spec/unit/knife/environment_from_file_spec.rb +90 -90
  1685. data/spec/unit/knife/environment_list_spec.rb +54 -54
  1686. data/spec/unit/knife/environment_show_spec.rb +52 -52
  1687. data/spec/unit/knife/index_rebuild_spec.rb +125 -125
  1688. data/spec/unit/knife/key_create_spec.rb +223 -223
  1689. data/spec/unit/knife/key_delete_spec.rb +133 -133
  1690. data/spec/unit/knife/key_edit_spec.rb +264 -264
  1691. data/spec/unit/knife/key_helper.rb +74 -74
  1692. data/spec/unit/knife/key_list_spec.rb +216 -216
  1693. data/spec/unit/knife/key_show_spec.rb +126 -126
  1694. data/spec/unit/knife/knife_help.rb +92 -92
  1695. data/spec/unit/knife/node_bulk_delete_spec.rb +94 -94
  1696. data/spec/unit/knife/node_delete_spec.rb +77 -77
  1697. data/spec/unit/knife/node_edit_spec.rb +114 -114
  1698. data/spec/unit/knife/node_environment_set_spec.rb +56 -56
  1699. data/spec/unit/knife/node_from_file_spec.rb +59 -59
  1700. data/spec/unit/knife/node_list_spec.rb +62 -62
  1701. data/spec/unit/knife/node_run_list_add_spec.rb +145 -145
  1702. data/spec/unit/knife/node_run_list_remove_spec.rb +106 -106
  1703. data/spec/unit/knife/node_run_list_set_spec.rb +115 -115
  1704. data/spec/unit/knife/node_show_spec.rb +65 -65
  1705. data/spec/unit/knife/osc_user_create_spec.rb +93 -93
  1706. data/spec/unit/knife/osc_user_delete_spec.rb +44 -44
  1707. data/spec/unit/knife/osc_user_edit_spec.rb +52 -52
  1708. data/spec/unit/knife/osc_user_list_spec.rb +37 -37
  1709. data/spec/unit/knife/osc_user_reregister_spec.rb +58 -58
  1710. data/spec/unit/knife/osc_user_show_spec.rb +46 -46
  1711. data/spec/unit/knife/raw_spec.rb +43 -43
  1712. data/spec/unit/knife/role_bulk_delete_spec.rb +80 -80
  1713. data/spec/unit/knife/role_create_spec.rb +80 -80
  1714. data/spec/unit/knife/role_delete_spec.rb +67 -67
  1715. data/spec/unit/knife/role_edit_spec.rb +77 -77
  1716. data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -217
  1717. data/spec/unit/knife/role_env_run_list_clear_spec.rb +94 -94
  1718. data/spec/unit/knife/role_env_run_list_remove_spec.rb +102 -102
  1719. data/spec/unit/knife/role_env_run_list_replace_spec.rb +105 -105
  1720. data/spec/unit/knife/role_env_run_list_set_spec.rb +99 -99
  1721. data/spec/unit/knife/role_from_file_spec.rb +69 -69
  1722. data/spec/unit/knife/role_list_spec.rb +54 -54
  1723. data/spec/unit/knife/role_run_list_add_spec.rb +179 -179
  1724. data/spec/unit/knife/role_run_list_clear_spec.rb +84 -84
  1725. data/spec/unit/knife/role_run_list_remove_spec.rb +92 -92
  1726. data/spec/unit/knife/role_run_list_replace_spec.rb +98 -98
  1727. data/spec/unit/knife/role_run_list_set_spec.rb +89 -89
  1728. data/spec/unit/knife/role_show_spec.rb +59 -59
  1729. data/spec/unit/knife/ssh_spec.rb +426 -426
  1730. data/spec/unit/knife/ssl_check_spec.rb +256 -256
  1731. data/spec/unit/knife/ssl_fetch_spec.rb +222 -222
  1732. data/spec/unit/knife/status_spec.rb +109 -109
  1733. data/spec/unit/knife/tag_create_spec.rb +23 -23
  1734. data/spec/unit/knife/tag_delete_spec.rb +25 -25
  1735. data/spec/unit/knife/tag_list_spec.rb +23 -23
  1736. data/spec/unit/knife/user_create_spec.rb +214 -214
  1737. data/spec/unit/knife/user_delete_spec.rb +65 -65
  1738. data/spec/unit/knife/user_edit_spec.rb +66 -66
  1739. data/spec/unit/knife/user_list_spec.rb +36 -36
  1740. data/spec/unit/knife/user_reregister_spec.rb +74 -74
  1741. data/spec/unit/knife/user_show_spec.rb +65 -65
  1742. data/spec/unit/knife_spec.rb +561 -561
  1743. data/spec/unit/lib_backcompat_spec.rb +34 -34
  1744. data/spec/unit/log/syslog_spec.rb +53 -53
  1745. data/spec/unit/log/winevt_spec.rb +55 -55
  1746. data/spec/unit/log_spec.rb +24 -24
  1747. data/spec/unit/lwrp_spec.rb +777 -777
  1748. data/spec/unit/mash_spec.rb +51 -51
  1749. data/spec/unit/mixin/api_version_request_handling_spec.rb +126 -126
  1750. data/spec/unit/mixin/checksum_spec.rb +54 -54
  1751. data/spec/unit/mixin/command_spec.rb +107 -107
  1752. data/spec/unit/mixin/convert_to_class_name_spec.rb +54 -54
  1753. data/spec/unit/mixin/deep_merge_spec.rb +342 -342
  1754. data/spec/unit/mixin/deprecation_spec.rb +57 -57
  1755. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +96 -96
  1756. data/spec/unit/mixin/homebrew_user_spec.rb +100 -100
  1757. data/spec/unit/mixin/lazy_module_include.rb +71 -71
  1758. data/spec/unit/mixin/params_validate_spec.rb +410 -410
  1759. data/spec/unit/mixin/path_sanity_spec.rb +92 -92
  1760. data/spec/unit/mixin/powershell_out_spec.rb +94 -94
  1761. data/spec/unit/mixin/powershell_type_coercions_spec.rb +83 -83
  1762. data/spec/unit/mixin/properties_spec.rb +97 -97
  1763. data/spec/unit/mixin/proxified_socket_spec.rb +97 -97
  1764. data/spec/unit/mixin/securable_spec.rb +314 -314
  1765. data/spec/unit/mixin/shell_out_spec.rb +302 -302
  1766. data/spec/unit/mixin/subclass_directive_spec.rb +45 -45
  1767. data/spec/unit/mixin/template_spec.rb +276 -276
  1768. data/spec/unit/mixin/unformatter_spec.rb +61 -61
  1769. data/spec/unit/mixin/uris_spec.rb +57 -57
  1770. data/spec/unit/mixin/versioned_api_spec.rb +107 -107
  1771. data/spec/unit/mixin/which.rb +160 -160
  1772. data/spec/unit/mixin/windows_architecture_helper_spec.rb +85 -85
  1773. data/spec/unit/mixin/xml_escape_spec.rb +54 -54
  1774. data/spec/unit/monkey_patches/uri_spec.rb +34 -34
  1775. data/spec/unit/monologger_spec.rb +45 -45
  1776. data/spec/unit/node/attribute_spec.rb +1244 -1244
  1777. data/spec/unit/node/immutable_collections_spec.rb +214 -214
  1778. data/spec/unit/node/vivid_mash_spec.rb +353 -353
  1779. data/spec/unit/node_map_spec.rb +170 -170
  1780. data/spec/unit/node_spec.rb +1836 -1836
  1781. data/spec/unit/org_spec.rb +196 -196
  1782. data/spec/unit/platform/query_helpers_spec.rb +220 -220
  1783. data/spec/unit/platform_spec.rb +269 -269
  1784. data/spec/unit/policy_builder/dynamic_spec.rb +273 -273
  1785. data/spec/unit/policy_builder/expand_node_object_spec.rb +336 -336
  1786. data/spec/unit/policy_builder/policyfile_spec.rb +795 -795
  1787. data/spec/unit/policy_builder_spec.rb +26 -26
  1788. data/spec/unit/property/state_spec.rb +508 -508
  1789. data/spec/unit/property/validation_spec.rb +720 -720
  1790. data/spec/unit/property_spec.rb +1227 -1227
  1791. data/spec/unit/provider/apt_repository_spec.rb +189 -189
  1792. data/spec/unit/provider/apt_update_spec.rb +114 -114
  1793. data/spec/unit/provider/breakpoint_spec.rb +53 -53
  1794. data/spec/unit/provider/cookbook_file/content_spec.rb +39 -39
  1795. data/spec/unit/provider/cookbook_file_spec.rb +58 -58
  1796. data/spec/unit/provider/cron/unix_spec.rb +139 -139
  1797. data/spec/unit/provider/cron_spec.rb +1010 -1010
  1798. data/spec/unit/provider/deploy/revision_spec.rb +110 -110
  1799. data/spec/unit/provider/deploy/timestamped_spec.rb +40 -40
  1800. data/spec/unit/provider/deploy_spec.rb +641 -641
  1801. data/spec/unit/provider/directory_spec.rb +300 -300
  1802. data/spec/unit/provider/dsc_resource_spec.rb +343 -343
  1803. data/spec/unit/provider/dsc_script_spec.rb +173 -173
  1804. data/spec/unit/provider/env/windows_spec.rb +103 -103
  1805. data/spec/unit/provider/env_spec.rb +310 -310
  1806. data/spec/unit/provider/erl_call_spec.rb +85 -85
  1807. data/spec/unit/provider/execute_spec.rb +242 -242
  1808. data/spec/unit/provider/file/content_spec.rb +114 -114
  1809. data/spec/unit/provider/file_spec.rb +56 -56
  1810. data/spec/unit/provider/git_spec.rb +727 -727
  1811. data/spec/unit/provider/group/dscl_spec.rb +331 -331
  1812. data/spec/unit/provider/group/gpasswd_spec.rb +116 -116
  1813. data/spec/unit/provider/group/groupadd_spec.rb +194 -194
  1814. data/spec/unit/provider/group/groupmod_spec.rb +133 -133
  1815. data/spec/unit/provider/group/pw_spec.rb +138 -138
  1816. data/spec/unit/provider/group/suse_spec.rb +90 -90
  1817. data/spec/unit/provider/group/usermod_spec.rb +115 -115
  1818. data/spec/unit/provider/group/windows_spec.rb +109 -109
  1819. data/spec/unit/provider/group_spec.rb +286 -286
  1820. data/spec/unit/provider/http_request_spec.rb +159 -159
  1821. data/spec/unit/provider/ifconfig/aix_spec.rb +180 -180
  1822. data/spec/unit/provider/ifconfig/debian_spec.rb +332 -332
  1823. data/spec/unit/provider/ifconfig/redhat_spec.rb +73 -73
  1824. data/spec/unit/provider/ifconfig_spec.rb +194 -194
  1825. data/spec/unit/provider/launchd_spec.rb +268 -268
  1826. data/spec/unit/provider/link_spec.rb +407 -407
  1827. data/spec/unit/provider/log_spec.rb +89 -89
  1828. data/spec/unit/provider/mdadm_spec.rb +140 -140
  1829. data/spec/unit/provider/mount/aix_spec.rb +237 -237
  1830. data/spec/unit/provider/mount/mount_spec.rb +474 -474
  1831. data/spec/unit/provider/mount/solaris_spec.rb +822 -822
  1832. data/spec/unit/provider/mount/windows_spec.rb +149 -149
  1833. data/spec/unit/provider/mount_spec.rb +191 -191
  1834. data/spec/unit/provider/ohai_spec.rb +84 -84
  1835. data/spec/unit/provider/osx_profile_spec.rb +255 -255
  1836. data/spec/unit/provider/package/aix_spec.rb +185 -185
  1837. data/spec/unit/provider/package/apt_spec.rb +481 -481
  1838. data/spec/unit/provider/package/cab_spec.rb +272 -272
  1839. data/spec/unit/provider/package/chocolatey_spec.rb +489 -489
  1840. data/spec/unit/provider/package/dnf/python_helper_spec.rb +29 -29
  1841. data/spec/unit/provider/package/dpkg_spec.rb +287 -287
  1842. data/spec/unit/provider/package/easy_install_spec.rb +114 -114
  1843. data/spec/unit/provider/package/freebsd/pkg_spec.rb +274 -274
  1844. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +148 -148
  1845. data/spec/unit/provider/package/freebsd/port_spec.rb +163 -163
  1846. data/spec/unit/provider/package/homebrew_spec.rb +292 -292
  1847. data/spec/unit/provider/package/ips_spec.rb +233 -233
  1848. data/spec/unit/provider/package/macports_spec.rb +203 -203
  1849. data/spec/unit/provider/package/msu_spec.rb +283 -283
  1850. data/spec/unit/provider/package/openbsd_spec.rb +132 -132
  1851. data/spec/unit/provider/package/pacman_spec.rb +194 -194
  1852. data/spec/unit/provider/package/paludis_spec.rb +134 -134
  1853. data/spec/unit/provider/package/portage_spec.rb +315 -315
  1854. data/spec/unit/provider/package/powershell_spec.rb +337 -337
  1855. data/spec/unit/provider/package/rpm_spec.rb +429 -429
  1856. data/spec/unit/provider/package/rubygems_spec.rb +824 -824
  1857. data/spec/unit/provider/package/smartos_spec.rb +110 -110
  1858. data/spec/unit/provider/package/solaris_spec.rb +167 -167
  1859. data/spec/unit/provider/package/windows/exe_spec.rb +201 -201
  1860. data/spec/unit/provider/package/windows/msi_spec.rb +168 -168
  1861. data/spec/unit/provider/package/windows_spec.rb +443 -443
  1862. data/spec/unit/provider/package/yum/yum_cache_spec.rb +27 -27
  1863. data/spec/unit/provider/package/yum_spec.rb +2294 -2294
  1864. data/spec/unit/provider/package/zypper_spec.rb +348 -348
  1865. data/spec/unit/provider/package_spec.rb +949 -949
  1866. data/spec/unit/provider/powershell_script_spec.rb +106 -106
  1867. data/spec/unit/provider/registry_key_spec.rb +407 -407
  1868. data/spec/unit/provider/remote_directory_spec.rb +236 -236
  1869. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +245 -245
  1870. data/spec/unit/provider/remote_file/content_spec.rb +253 -253
  1871. data/spec/unit/provider/remote_file/fetcher_spec.rb +94 -94
  1872. data/spec/unit/provider/remote_file/ftp_spec.rb +217 -217
  1873. data/spec/unit/provider/remote_file/http_spec.rb +322 -322
  1874. data/spec/unit/provider/remote_file/local_file_spec.rb +105 -105
  1875. data/spec/unit/provider/remote_file/network_file_spec.rb +45 -45
  1876. data/spec/unit/provider/remote_file/sftp_spec.rb +150 -150
  1877. data/spec/unit/provider/remote_file_spec.rb +61 -61
  1878. data/spec/unit/provider/route_spec.rb +248 -248
  1879. data/spec/unit/provider/ruby_block_spec.rb +45 -45
  1880. data/spec/unit/provider/script_spec.rb +157 -157
  1881. data/spec/unit/provider/service/aix_service_spec.rb +195 -195
  1882. data/spec/unit/provider/service/aixinit_service_spec.rb +272 -272
  1883. data/spec/unit/provider/service/arch_service_spec.rb +324 -324
  1884. data/spec/unit/provider/service/debian_service_spec.rb +375 -375
  1885. data/spec/unit/provider/service/freebsd_service_spec.rb +617 -617
  1886. data/spec/unit/provider/service/gentoo_service_spec.rb +144 -144
  1887. data/spec/unit/provider/service/init_service_spec.rb +235 -235
  1888. data/spec/unit/provider/service/insserv_service_spec.rb +75 -75
  1889. data/spec/unit/provider/service/invokercd_service_spec.rb +211 -211
  1890. data/spec/unit/provider/service/macosx_spec.rb +335 -335
  1891. data/spec/unit/provider/service/openbsd_service_spec.rb +549 -549
  1892. data/spec/unit/provider/service/redhat_spec.rb +250 -250
  1893. data/spec/unit/provider/service/simple_service_spec.rb +169 -169
  1894. data/spec/unit/provider/service/solaris_smf_service_spec.rb +255 -255
  1895. data/spec/unit/provider/service/systemd_service_spec.rb +370 -370
  1896. data/spec/unit/provider/service/upstart_service_spec.rb +364 -364
  1897. data/spec/unit/provider/service/windows_spec.rb +463 -463
  1898. data/spec/unit/provider/service_spec.rb +168 -168
  1899. data/spec/unit/provider/subversion_spec.rb +361 -361
  1900. data/spec/unit/provider/systemd_unit_spec.rb +885 -885
  1901. data/spec/unit/provider/template/content_spec.rb +169 -169
  1902. data/spec/unit/provider/template_spec.rb +89 -89
  1903. data/spec/unit/provider/user/dscl_spec.rb +902 -902
  1904. data/spec/unit/provider/user/linux_spec.rb +112 -112
  1905. data/spec/unit/provider/user/pw_spec.rb +255 -255
  1906. data/spec/unit/provider/user/solaris_spec.rb +178 -178
  1907. data/spec/unit/provider/user/windows_spec.rb +185 -185
  1908. data/spec/unit/provider/user_spec.rb +478 -478
  1909. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +46 -46
  1910. data/spec/unit/provider/yum_repository_spec.rb +35 -35
  1911. data/spec/unit/provider_resolver_spec.rb +939 -939
  1912. data/spec/unit/provider_spec.rb +198 -198
  1913. data/spec/unit/pure_application_spec.rb +32 -32
  1914. data/spec/unit/recipe_spec.rb +758 -758
  1915. data/spec/unit/resource/apt_package_spec.rb +38 -38
  1916. data/spec/unit/resource/apt_repository_spec.rb +50 -50
  1917. data/spec/unit/resource/apt_update_spec.rb +50 -50
  1918. data/spec/unit/resource/bash_spec.rb +40 -40
  1919. data/spec/unit/resource/batch_spec.rb +49 -49
  1920. data/spec/unit/resource/breakpoint_spec.rb +47 -47
  1921. data/spec/unit/resource/cab_package_spec.rb +38 -38
  1922. data/spec/unit/resource/chef_gem_spec.rb +157 -157
  1923. data/spec/unit/resource/chocolatey_package_spec.rb +79 -79
  1924. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -45
  1925. data/spec/unit/resource/conditional_spec.rb +254 -254
  1926. data/spec/unit/resource/cookbook_file_spec.rb +88 -88
  1927. data/spec/unit/resource/cron_spec.rb +186 -186
  1928. data/spec/unit/resource/csh_spec.rb +40 -40
  1929. data/spec/unit/resource/deploy_revision_spec.rb +42 -42
  1930. data/spec/unit/resource/deploy_spec.rb +283 -283
  1931. data/spec/unit/resource/directory_spec.rb +82 -82
  1932. data/spec/unit/resource/dnf_package_spec.rb +99 -99
  1933. data/spec/unit/resource/dpkg_package_spec.rb +32 -32
  1934. data/spec/unit/resource/dsc_resource_spec.rb +102 -102
  1935. data/spec/unit/resource/dsc_script_spec.rb +134 -134
  1936. data/spec/unit/resource/easy_install_package_spec.rb +39 -39
  1937. data/spec/unit/resource/env_spec.rb +85 -85
  1938. data/spec/unit/resource/erl_call_spec.rb +81 -81
  1939. data/spec/unit/resource/execute_spec.rb +249 -249
  1940. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -103
  1941. data/spec/unit/resource/file/verification_spec.rb +139 -139
  1942. data/spec/unit/resource/file_spec.rb +130 -130
  1943. data/spec/unit/resource/freebsd_package_spec.rb +87 -87
  1944. data/spec/unit/resource/gem_package_spec.rb +42 -42
  1945. data/spec/unit/resource/git_spec.rb +50 -50
  1946. data/spec/unit/resource/group_spec.rb +162 -162
  1947. data/spec/unit/resource/homebrew_package_spec.rb +50 -50
  1948. data/spec/unit/resource/http_request_spec.rb +59 -59
  1949. data/spec/unit/resource/ifconfig_spec.rb +109 -109
  1950. data/spec/unit/resource/ips_package_spec.rb +40 -40
  1951. data/spec/unit/resource/ksh_spec.rb +40 -40
  1952. data/spec/unit/resource/launchd_spec.rb +32 -32
  1953. data/spec/unit/resource/link_spec.rb +134 -134
  1954. data/spec/unit/resource/log_spec.rb +73 -73
  1955. data/spec/unit/resource/macports_package_spec.rb +32 -32
  1956. data/spec/unit/resource/mdadm_spec.rb +107 -107
  1957. data/spec/unit/resource/mount_spec.rb +215 -215
  1958. data/spec/unit/resource/msu_package_spec.rb +49 -49
  1959. data/spec/unit/resource/ohai_spec.rb +61 -61
  1960. data/spec/unit/resource/openbsd_package_spec.rb +48 -48
  1961. data/spec/unit/resource/osx_profile_spec.rb +62 -62
  1962. data/spec/unit/resource/package_spec.rb +98 -98
  1963. data/spec/unit/resource/pacman_package_spec.rb +32 -32
  1964. data/spec/unit/resource/perl_spec.rb +40 -40
  1965. data/spec/unit/resource/portage_package_spec.rb +38 -38
  1966. data/spec/unit/resource/powershell_package_spec.rb +68 -68
  1967. data/spec/unit/resource/powershell_script_spec.rb +136 -136
  1968. data/spec/unit/resource/python_spec.rb +40 -40
  1969. data/spec/unit/resource/registry_key_spec.rb +215 -215
  1970. data/spec/unit/resource/remote_directory_spec.rb +97 -97
  1971. data/spec/unit/resource/remote_file_spec.rb +207 -207
  1972. data/spec/unit/resource/resource_notification_spec.rb +169 -169
  1973. data/spec/unit/resource/route_spec.rb +107 -107
  1974. data/spec/unit/resource/rpm_package_spec.rb +46 -46
  1975. data/spec/unit/resource/ruby_block_spec.rb +61 -61
  1976. data/spec/unit/resource/ruby_spec.rb +40 -40
  1977. data/spec/unit/resource/scm_spec.rb +193 -193
  1978. data/spec/unit/resource/script_spec.rb +44 -44
  1979. data/spec/unit/resource/service_spec.rb +179 -179
  1980. data/spec/unit/resource/smartos_package_spec.rb +33 -33
  1981. data/spec/unit/resource/solaris_package_spec.rb +42 -42
  1982. data/spec/unit/resource/subversion_spec.rb +71 -71
  1983. data/spec/unit/resource/systemd_unit_spec.rb +133 -133
  1984. data/spec/unit/resource/template_spec.rb +210 -210
  1985. data/spec/unit/resource/timestamped_deploy_spec.rb +32 -32
  1986. data/spec/unit/resource/user_spec.rb +133 -133
  1987. data/spec/unit/resource/windows_package_spec.rb +95 -95
  1988. data/spec/unit/resource/windows_service_spec.rb +49 -49
  1989. data/spec/unit/resource/yum_package_spec.rb +150 -150
  1990. data/spec/unit/resource/yum_repository_spec.rb +49 -49
  1991. data/spec/unit/resource_builder_spec.rb +1 -1
  1992. data/spec/unit/resource_collection/resource_list_spec.rb +137 -137
  1993. data/spec/unit/resource_collection/resource_set_spec.rb +199 -199
  1994. data/spec/unit/resource_collection/stepable_iterator_spec.rb +144 -144
  1995. data/spec/unit/resource_collection_spec.rb +399 -399
  1996. data/spec/unit/resource_definition_spec.rb +117 -117
  1997. data/spec/unit/resource_reporter_spec.rb +782 -782
  1998. data/spec/unit/resource_resolver_spec.rb +52 -52
  1999. data/spec/unit/resource_spec.rb +1141 -1141
  2000. data/spec/unit/rest/auth_credentials_spec.rb +292 -292
  2001. data/spec/unit/rest_spec.rb +753 -753
  2002. data/spec/unit/role_spec.rb +358 -358
  2003. data/spec/unit/run_context/child_run_context_spec.rb +133 -133
  2004. data/spec/unit/run_context/cookbook_compiler_spec.rb +226 -226
  2005. data/spec/unit/run_context_spec.rb +241 -241
  2006. data/spec/unit/run_list/run_list_expansion_spec.rb +144 -144
  2007. data/spec/unit/run_list/run_list_item_spec.rb +117 -117
  2008. data/spec/unit/run_list/versioned_recipe_list_spec.rb +194 -194
  2009. data/spec/unit/run_list_spec.rb +312 -312
  2010. data/spec/unit/run_lock_spec.rb +140 -140
  2011. data/spec/unit/run_status_spec.rb +144 -144
  2012. data/spec/unit/runner_spec.rb +412 -412
  2013. data/spec/unit/scan_access_control_spec.rb +183 -183
  2014. data/spec/unit/search/query_spec.rb +290 -290
  2015. data/spec/unit/server_api_spec.rb +50 -50
  2016. data/spec/unit/server_api_versions_spec.rb +44 -44
  2017. data/spec/unit/shell/model_wrapper_spec.rb +96 -96
  2018. data/spec/unit/shell/shell_ext_spec.rb +153 -153
  2019. data/spec/unit/shell/shell_session_spec.rb +195 -195
  2020. data/spec/unit/shell_out_spec.rb +18 -18
  2021. data/spec/unit/shell_spec.rb +162 -162
  2022. data/spec/unit/user_spec.rb +275 -275
  2023. data/spec/unit/user_v1_spec.rb +583 -583
  2024. data/spec/unit/util/backup_spec.rb +141 -141
  2025. data/spec/unit/util/diff_spec.rb +576 -576
  2026. data/spec/unit/util/dsc/configuration_generator_spec.rb +193 -193
  2027. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +248 -248
  2028. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +200 -200
  2029. data/spec/unit/util/dsc/resource_store.rb +78 -78
  2030. data/spec/unit/util/editor_spec.rb +152 -152
  2031. data/spec/unit/util/file_edit_spec.rb +224 -224
  2032. data/spec/unit/util/powershell/cmdlet_spec.rb +106 -106
  2033. data/spec/unit/util/powershell/ps_credential_spec.rb +44 -44
  2034. data/spec/unit/util/selinux_spec.rb +160 -160
  2035. data/spec/unit/util/threaded_job_queue_spec.rb +51 -51
  2036. data/spec/unit/version/platform_spec.rb +60 -60
  2037. data/spec/unit/version_class_spec.rb +171 -171
  2038. data/spec/unit/version_constraint/platform_spec.rb +45 -45
  2039. data/spec/unit/version_constraint_spec.rb +179 -179
  2040. data/spec/unit/win32/error_spec.rb +67 -67
  2041. data/spec/unit/win32/registry_spec.rb +394 -394
  2042. data/spec/unit/win32/security_spec.rb +66 -66
  2043. data/spec/unit/windows_service_spec.rb +116 -116
  2044. data/tasks/announce.rb +58 -58
  2045. data/tasks/bin/bundle-platform +20 -20
  2046. data/tasks/bin/bundle-platform.bat +2 -2
  2047. data/tasks/bin/bundler_patch.rb +27 -27
  2048. data/tasks/bin/create-override-gemfile +110 -110
  2049. data/tasks/bin/gem-version-diff +37 -37
  2050. data/tasks/bin/run_external_test +47 -47
  2051. data/tasks/bundle.rb +97 -97
  2052. data/tasks/bundle_util.rb +110 -110
  2053. data/tasks/cbgb.rb +84 -84
  2054. data/tasks/changelog.rb +31 -31
  2055. data/tasks/dependencies.rb +151 -151
  2056. data/tasks/gemfile_util.rb +390 -390
  2057. data/tasks/maintainers.rb +211 -211
  2058. data/tasks/rspec.rb +90 -90
  2059. data/tasks/templates/prerelease.md.erb +26 -26
  2060. data/tasks/templates/release.md.erb +26 -26
  2061. metadata +4 -4
@@ -1,58 +1,58 @@
1
- #--
2
- # Author:: Christopher Walters (<cw@chef.io>)
3
- # Author:: Tim Hinderliter (<tim@chef.io>)
4
- # Copyright:: Copyright 2010-2016, Chef Software 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
- require "chef/cookbook/file_vendor"
21
-
22
- class Chef
23
- class Cookbook
24
- # == Chef::Cookbook::FileSystemFileVendor
25
- # This FileVendor loads files from Chef::Config.cookbook_path. The
26
- # thing that's sort of janky about this FileVendor implementation is
27
- # that it basically takes only the cookbook's name from the manifest
28
- # and throws the rest away then re-builds the list of files on the
29
- # disk. This is due to the manifest not having the on-disk file
30
- # locations, since in the chef-client case, that information is
31
- # non-sensical.
32
- class FileSystemFileVendor < FileVendor
33
-
34
- attr_reader :cookbook_name
35
- attr_reader :repo_paths
36
-
37
- def initialize(manifest, *repo_paths)
38
- @cookbook_name = manifest[:cookbook_name]
39
- @repo_paths = repo_paths.flatten
40
- raise ArgumentError, "You must specify at least one repo path" if repo_paths.empty?
41
- end
42
-
43
- def cookbooks
44
- @cookbooks ||= Chef::CookbookLoader.new(repo_paths).load_cookbooks
45
- end
46
-
47
- # Implements abstract base's requirement. It looks in the
48
- # Chef::Config.cookbook_path file hierarchy for the requested
49
- # file.
50
- def get_filename(filename)
51
- location = File.join(cookbooks[cookbook_name].root_dir, filename) if cookbooks.has_key?(cookbook_name)
52
- raise "File #{filename} does not exist for cookbook #{cookbook_name}" unless location && File.exist?(location)
53
- location
54
- end
55
-
56
- end
57
- end
58
- end
1
+ #--
2
+ # Author:: Christopher Walters (<cw@chef.io>)
3
+ # Author:: Tim Hinderliter (<tim@chef.io>)
4
+ # Copyright:: Copyright 2010-2016, Chef Software 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
+ require "chef/cookbook/file_vendor"
21
+
22
+ class Chef
23
+ class Cookbook
24
+ # == Chef::Cookbook::FileSystemFileVendor
25
+ # This FileVendor loads files from Chef::Config.cookbook_path. The
26
+ # thing that's sort of janky about this FileVendor implementation is
27
+ # that it basically takes only the cookbook's name from the manifest
28
+ # and throws the rest away then re-builds the list of files on the
29
+ # disk. This is due to the manifest not having the on-disk file
30
+ # locations, since in the chef-client case, that information is
31
+ # non-sensical.
32
+ class FileSystemFileVendor < FileVendor
33
+
34
+ attr_reader :cookbook_name
35
+ attr_reader :repo_paths
36
+
37
+ def initialize(manifest, *repo_paths)
38
+ @cookbook_name = manifest[:cookbook_name]
39
+ @repo_paths = repo_paths.flatten
40
+ raise ArgumentError, "You must specify at least one repo path" if repo_paths.empty?
41
+ end
42
+
43
+ def cookbooks
44
+ @cookbooks ||= Chef::CookbookLoader.new(repo_paths).load_cookbooks
45
+ end
46
+
47
+ # Implements abstract base's requirement. It looks in the
48
+ # Chef::Config.cookbook_path file hierarchy for the requested
49
+ # file.
50
+ def get_filename(filename)
51
+ location = File.join(cookbooks[cookbook_name].root_dir, filename) if cookbooks.has_key?(cookbook_name)
52
+ raise "File #{filename} does not exist for cookbook #{cookbook_name}" unless location && File.exist?(location)
53
+ location
54
+ end
55
+
56
+ end
57
+ end
58
+ end
@@ -1,71 +1,71 @@
1
- #
2
- # Author:: Christopher Walters (<cw@chef.io>)
3
- # Author:: Tim Hinderliter (<tim@chef.io>)
4
- # Copyright:: Copyright 2010-2016, Chef Software 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
- class Chef
21
- class Cookbook
22
- # == Chef::Cookbook::FileVendor
23
- # This class handles fetching of cookbook files based on specificity.
24
- class FileVendor
25
-
26
- @vendor_class = nil
27
- @initialization_options = nil
28
-
29
- # Configures FileVendor to use the RemoteFileVendor implementation. After
30
- # calling this, subsequent calls to create_from_manifest will return a
31
- # RemoteFileVendor object initialized with the given http_client
32
- def self.fetch_from_remote(http_client)
33
- @vendor_class = RemoteFileVendor
34
- @initialization_options = http_client
35
- end
36
-
37
- def self.fetch_from_disk(cookbook_paths)
38
- @vendor_class = FileSystemFileVendor
39
- @initialization_options = cookbook_paths
40
- end
41
-
42
- # Returns the implementation class that is currently configured, or `nil`
43
- # if one has not been configured yet.
44
- def self.vendor_class
45
- @vendor_class
46
- end
47
-
48
- def self.initialization_options
49
- @initialization_options
50
- end
51
-
52
- # Factory method that creates the appropriate kind of
53
- # Cookbook::FileVendor to serve the contents of the manifest
54
- def self.create_from_manifest(manifest)
55
- if @vendor_class.nil?
56
- raise "Must configure FileVendor to use a specific implementation before creating an instance"
57
- end
58
- @vendor_class.new(manifest, @initialization_options)
59
- end
60
-
61
- # Gets the on-disk location for the given cookbook file.
62
- #
63
- # Subclasses are responsible for determining exactly how the
64
- # files are obtained and where they are stored.
65
- def get_filename(filename)
66
- raise NotImplemented, "Subclasses must implement this method"
67
- end
68
-
69
- end
70
- end
71
- end
1
+ #
2
+ # Author:: Christopher Walters (<cw@chef.io>)
3
+ # Author:: Tim Hinderliter (<tim@chef.io>)
4
+ # Copyright:: Copyright 2010-2016, Chef Software 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
+ class Chef
21
+ class Cookbook
22
+ # == Chef::Cookbook::FileVendor
23
+ # This class handles fetching of cookbook files based on specificity.
24
+ class FileVendor
25
+
26
+ @vendor_class = nil
27
+ @initialization_options = nil
28
+
29
+ # Configures FileVendor to use the RemoteFileVendor implementation. After
30
+ # calling this, subsequent calls to create_from_manifest will return a
31
+ # RemoteFileVendor object initialized with the given http_client
32
+ def self.fetch_from_remote(http_client)
33
+ @vendor_class = RemoteFileVendor
34
+ @initialization_options = http_client
35
+ end
36
+
37
+ def self.fetch_from_disk(cookbook_paths)
38
+ @vendor_class = FileSystemFileVendor
39
+ @initialization_options = cookbook_paths
40
+ end
41
+
42
+ # Returns the implementation class that is currently configured, or `nil`
43
+ # if one has not been configured yet.
44
+ def self.vendor_class
45
+ @vendor_class
46
+ end
47
+
48
+ def self.initialization_options
49
+ @initialization_options
50
+ end
51
+
52
+ # Factory method that creates the appropriate kind of
53
+ # Cookbook::FileVendor to serve the contents of the manifest
54
+ def self.create_from_manifest(manifest)
55
+ if @vendor_class.nil?
56
+ raise "Must configure FileVendor to use a specific implementation before creating an instance"
57
+ end
58
+ @vendor_class.new(manifest, @initialization_options)
59
+ end
60
+
61
+ # Gets the on-disk location for the given cookbook file.
62
+ #
63
+ # Subclasses are responsible for determining exactly how the
64
+ # files are obtained and where they are stored.
65
+ def get_filename(filename)
66
+ raise NotImplemented, "Subclasses must implement this method"
67
+ end
68
+
69
+ end
70
+ end
71
+ end
@@ -1,84 +1,84 @@
1
- #--
2
- # Copyright:: Copyright (c) 2010-2016 Chef Software, Inc.
3
- # License:: Apache License, Version 2.0
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
- #
17
-
18
- require "tmpdir"
19
- require "chef/mixin/shell_out"
20
-
21
- class Chef
22
- class Cookbook
23
- class GemInstaller
24
- include Chef::Mixin::ShellOut
25
-
26
- # @return [Chef::EventDispatch::Dispatcher] the client event dispatcher
27
- attr_accessor :events
28
- # @return [Chef::CookbookCollection] the cookbook collection
29
- attr_accessor :cookbook_collection
30
-
31
- def initialize(cookbook_collection, events)
32
- @cookbook_collection = cookbook_collection
33
- @events = events
34
- end
35
-
36
- # Installs the gems into the omnibus gemset.
37
- #
38
- def install
39
- cookbook_gems = []
40
-
41
- cookbook_collection.each do |cookbook_name, cookbook_version|
42
- cookbook_gems += cookbook_version.metadata.gems
43
- end
44
-
45
- events.cookbook_gem_start(cookbook_gems)
46
-
47
- unless cookbook_gems.empty?
48
- begin
49
- Dir.mktmpdir("chef-gem-bundle") do |dir|
50
- File.open("#{dir}/Gemfile", "w+") do |tf|
51
- tf.puts "source '#{Chef::Config[:rubygems_url]}'"
52
- cookbook_gems.each do |args|
53
- tf.puts "gem(*#{args.inspect})"
54
- end
55
- tf.close
56
- Chef::Log.debug("generated Gemfile contents:")
57
- Chef::Log.debug(IO.read(tf.path))
58
- so = shell_out!("bundle install", cwd: dir, env: { "PATH" => path_with_prepended_ruby_bin })
59
- Chef::Log.info(so.stdout)
60
- end
61
- end
62
- Gem.clear_paths
63
- rescue Exception => e
64
- events.cookbook_gem_failed(e)
65
- raise
66
- end
67
- end
68
-
69
- events.cookbook_gem_finished
70
- end
71
-
72
- private
73
-
74
- # path_sanity appends the ruby_bin, but I want the ruby_bin prepended
75
- def path_with_prepended_ruby_bin
76
- env_path = ENV["PATH"].dup || ""
77
- existing_paths = env_path.split(File::PATH_SEPARATOR)
78
- existing_paths.unshift(RbConfig::CONFIG["bindir"])
79
- env_path = existing_paths.join(File::PATH_SEPARATOR)
80
- env_path.encode("utf-8", invalid: :replace, undef: :replace)
81
- end
82
- end
83
- end
84
- end
1
+ #--
2
+ # Copyright:: Copyright (c) 2010-2016 Chef Software, Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require "tmpdir"
19
+ require "chef/mixin/shell_out"
20
+
21
+ class Chef
22
+ class Cookbook
23
+ class GemInstaller
24
+ include Chef::Mixin::ShellOut
25
+
26
+ # @return [Chef::EventDispatch::Dispatcher] the client event dispatcher
27
+ attr_accessor :events
28
+ # @return [Chef::CookbookCollection] the cookbook collection
29
+ attr_accessor :cookbook_collection
30
+
31
+ def initialize(cookbook_collection, events)
32
+ @cookbook_collection = cookbook_collection
33
+ @events = events
34
+ end
35
+
36
+ # Installs the gems into the omnibus gemset.
37
+ #
38
+ def install
39
+ cookbook_gems = []
40
+
41
+ cookbook_collection.each do |cookbook_name, cookbook_version|
42
+ cookbook_gems += cookbook_version.metadata.gems
43
+ end
44
+
45
+ events.cookbook_gem_start(cookbook_gems)
46
+
47
+ unless cookbook_gems.empty?
48
+ begin
49
+ Dir.mktmpdir("chef-gem-bundle") do |dir|
50
+ File.open("#{dir}/Gemfile", "w+") do |tf|
51
+ tf.puts "source '#{Chef::Config[:rubygems_url]}'"
52
+ cookbook_gems.each do |args|
53
+ tf.puts "gem(*#{args.inspect})"
54
+ end
55
+ tf.close
56
+ Chef::Log.debug("generated Gemfile contents:")
57
+ Chef::Log.debug(IO.read(tf.path))
58
+ so = shell_out!("bundle install", cwd: dir, env: { "PATH" => path_with_prepended_ruby_bin })
59
+ Chef::Log.info(so.stdout)
60
+ end
61
+ end
62
+ Gem.clear_paths
63
+ rescue Exception => e
64
+ events.cookbook_gem_failed(e)
65
+ raise
66
+ end
67
+ end
68
+
69
+ events.cookbook_gem_finished
70
+ end
71
+
72
+ private
73
+
74
+ # path_sanity appends the ruby_bin, but I want the ruby_bin prepended
75
+ def path_with_prepended_ruby_bin
76
+ env_path = ENV["PATH"].dup || ""
77
+ existing_paths = env_path.split(File::PATH_SEPARATOR)
78
+ existing_paths.unshift(RbConfig::CONFIG["bindir"])
79
+ env_path = existing_paths.join(File::PATH_SEPARATOR)
80
+ env_path.encode("utf-8", invalid: :replace, undef: :replace)
81
+ end
82
+ end
83
+ end
84
+ end
@@ -1,912 +1,912 @@
1
- #
2
- # Author:: Adam Jacob (<adam@chef.io>)
3
- # Author:: AJ Christensen (<aj@chef.io>)
4
- # Author:: Seth Falcon (<seth@chef.io>)
5
- # Copyright:: Copyright 2008-2016, Chef Software, Inc.
6
- # License:: Apache License, Version 2.0
7
- #
8
- # Licensed under the Apache License, Version 2.0 (the "License");
9
- # you may not use this file except in compliance with the License.
10
- # You may obtain a copy of the License at
11
- #
12
- # http://www.apache.org/licenses/LICENSE-2.0
13
- #
14
- # Unless required by applicable law or agreed to in writing, software
15
- # distributed under the License is distributed on an "AS IS" BASIS,
16
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
- # See the License for the specific language governing permissions and
18
- # limitations under the License.
19
- #
20
-
21
- require "chef/exceptions"
22
- require "chef/mash"
23
- require "chef/mixin/from_file"
24
- require "chef/mixin/params_validate"
25
- require "chef/log"
26
- require "chef/version_class"
27
- require "chef/version_constraint"
28
- require "chef/version_constraint/platform"
29
- require "chef/json_compat"
30
-
31
- class Chef
32
- class Cookbook
33
-
34
- # == Chef::Cookbook::Metadata
35
- # Chef::Cookbook::Metadata provides a convenient DSL for declaring metadata
36
- # about Chef Cookbooks.
37
- class Metadata
38
-
39
- NAME = "name".freeze
40
- DESCRIPTION = "description".freeze
41
- LONG_DESCRIPTION = "long_description".freeze
42
- MAINTAINER = "maintainer".freeze
43
- MAINTAINER_EMAIL = "maintainer_email".freeze
44
- LICENSE = "license".freeze
45
- PLATFORMS = "platforms".freeze
46
- DEPENDENCIES = "dependencies".freeze
47
- RECOMMENDATIONS = "recommendations".freeze
48
- SUGGESTIONS = "suggestions".freeze
49
- CONFLICTING = "conflicting".freeze
50
- PROVIDING = "providing".freeze
51
- REPLACING = "replacing".freeze
52
- ATTRIBUTES = "attributes".freeze
53
- GROUPINGS = "groupings".freeze
54
- RECIPES = "recipes".freeze
55
- VERSION = "version".freeze
56
- SOURCE_URL = "source_url".freeze
57
- ISSUES_URL = "issues_url".freeze
58
- PRIVACY = "privacy".freeze
59
- CHEF_VERSIONS = "chef_versions".freeze
60
- OHAI_VERSIONS = "ohai_versions".freeze
61
- GEMS = "gems".freeze
62
-
63
- COMPARISON_FIELDS = [ :name, :description, :long_description, :maintainer,
64
- :maintainer_email, :license, :platforms, :dependencies,
65
- :recommendations, :suggestions, :conflicting, :providing,
66
- :replacing, :attributes, :groupings, :recipes, :version,
67
- :source_url, :issues_url, :privacy, :chef_versions, :ohai_versions,
68
- :gems ]
69
-
70
- VERSION_CONSTRAINTS = { :depends => DEPENDENCIES,
71
- :recommends => RECOMMENDATIONS,
72
- :suggests => SUGGESTIONS,
73
- :conflicts => CONFLICTING,
74
- :provides => PROVIDING,
75
- :replaces => REPLACING,
76
- :chef_version => CHEF_VERSIONS,
77
- :ohai_version => OHAI_VERSIONS }
78
-
79
- include Chef::Mixin::ParamsValidate
80
- include Chef::Mixin::FromFile
81
-
82
- attr_reader :platforms
83
- attr_reader :dependencies
84
- attr_reader :recommendations
85
- attr_reader :suggestions
86
- attr_reader :conflicting
87
- attr_reader :providing
88
- attr_reader :replacing
89
- attr_reader :attributes
90
- attr_reader :groupings
91
- attr_reader :recipes
92
- attr_reader :version
93
-
94
- # @return [Array<Gem::Dependency>] Array of supported Chef versions
95
- attr_reader :chef_versions
96
- # @return [Array<Gem::Dependency>] Array of supported Ohai versions
97
- attr_reader :ohai_versions
98
- # @return [Array<Array>] Array of gems to install with *args as an Array
99
- attr_reader :gems
100
-
101
- # Builds a new Chef::Cookbook::Metadata object.
102
- #
103
- # === Parameters
104
- # cookbook<String>:: An optional cookbook object
105
- # maintainer<String>:: An optional maintainer
106
- # maintainer_email<String>:: An optional maintainer email
107
- # license<String>::An optional license. Default is Apache v2.0
108
- #
109
- # === Returns
110
- # metadata<Chef::Cookbook::Metadata>
111
- def initialize
112
- @name = nil
113
-
114
- @description = ""
115
- @long_description = ""
116
- @license = "All rights reserved"
117
-
118
- @maintainer = nil
119
- @maintainer_email = nil
120
-
121
- @platforms = Mash.new
122
- @dependencies = Mash.new
123
- @recommendations = Mash.new
124
- @suggestions = Mash.new
125
- @conflicting = Mash.new
126
- @providing = Mash.new
127
- @replacing = Mash.new
128
- @attributes = Mash.new
129
- @groupings = Mash.new
130
- @recipes = Mash.new
131
- @version = Version.new("0.0.0")
132
- @source_url = ""
133
- @issues_url = ""
134
- @privacy = false
135
- @chef_versions = []
136
- @ohai_versions = []
137
- @gems = []
138
-
139
- @errors = []
140
- end
141
-
142
- def ==(other)
143
- COMPARISON_FIELDS.inject(true) do |equal_so_far, field|
144
- equal_so_far && other.respond_to?(field) && (other.send(field) == send(field))
145
- end
146
- end
147
-
148
- # Whether this metadata is valid. In order to be valid, all required
149
- # fields must be set. Chef's validation implementation checks the content
150
- # of a given field when setting (and raises an error if the content does
151
- # not meet the criteria), so the content of the fields is not considered
152
- # when checking validity.
153
- #
154
- # === Returns
155
- # valid<Boolean>:: Whether this metadata object is valid
156
- def valid?
157
- run_validation
158
- @errors.empty?
159
- end
160
-
161
- # A list of validation errors for this metadata object. See #valid? for
162
- # comments about the validation criteria.
163
- #
164
- # If there are any validation errors, one or more error strings will be
165
- # returned. Otherwise an empty array is returned.
166
- #
167
- # === Returns
168
- # error messages<Array>:: Whether this metadata object is valid
169
- def errors
170
- run_validation
171
- @errors
172
- end
173
-
174
- # Sets the cookbooks maintainer, or returns it.
175
- #
176
- # === Parameters
177
- # maintainer<String>:: The maintainers name
178
- #
179
- # === Returns
180
- # maintainer<String>:: Returns the current maintainer.
181
- def maintainer(arg = nil)
182
- set_or_return(
183
- :maintainer,
184
- arg,
185
- :kind_of => [ String ]
186
- )
187
- end
188
-
189
- # Sets the maintainers email address, or returns it.
190
- #
191
- # === Parameters
192
- # maintainer_email<String>:: The maintainers email address
193
- #
194
- # === Returns
195
- # maintainer_email<String>:: Returns the current maintainer email.
196
- def maintainer_email(arg = nil)
197
- set_or_return(
198
- :maintainer_email,
199
- arg,
200
- :kind_of => [ String ]
201
- )
202
- end
203
-
204
- # Sets the current license, or returns it.
205
- #
206
- # === Parameters
207
- # license<String>:: The current license.
208
- #
209
- # === Returns
210
- # license<String>:: Returns the current license
211
- def license(arg = nil)
212
- set_or_return(
213
- :license,
214
- arg,
215
- :kind_of => [ String ]
216
- )
217
- end
218
-
219
- # Sets the current description, or returns it. Should be short - one line only!
220
- #
221
- # === Parameters
222
- # description<String>:: The new description
223
- #
224
- # === Returns
225
- # description<String>:: Returns the description
226
- def description(arg = nil)
227
- set_or_return(
228
- :description,
229
- arg,
230
- :kind_of => [ String ]
231
- )
232
- end
233
-
234
- # Sets the current long description, or returns it. Might come from a README, say.
235
- #
236
- # === Parameters
237
- # long_description<String>:: The new long description
238
- #
239
- # === Returns
240
- # long_description<String>:: Returns the long description
241
- def long_description(arg = nil)
242
- set_or_return(
243
- :long_description,
244
- arg,
245
- :kind_of => [ String ]
246
- )
247
- end
248
-
249
- # Sets the current cookbook version, or returns it. Can be two or three digits, separated
250
- # by dots. ie: '2.1', '1.5.4' or '0.9'.
251
- #
252
- # === Parameters
253
- # version<String>:: The current version, as a string
254
- #
255
- # === Returns
256
- # version<String>:: Returns the current version
257
- def version(arg = nil)
258
- if arg
259
- @version = Chef::Version.new(arg)
260
- end
261
-
262
- @version.to_s
263
- end
264
-
265
- # Sets the name of the cookbook, or returns it.
266
- #
267
- # === Parameters
268
- # name<String>:: The current cookbook name.
269
- #
270
- # === Returns
271
- # name<String>:: Returns the current cookbook name.
272
- def name(arg = nil)
273
- set_or_return(
274
- :name,
275
- arg,
276
- :kind_of => [ String ]
277
- )
278
- end
279
-
280
- # Adds a supported platform, with version checking strings.
281
- #
282
- # === Parameters
283
- # platform<String>,<Symbol>:: The platform (like :ubuntu or :mac_os_x)
284
- # version<String>:: A version constraint of the form "OP VERSION",
285
- # where OP is one of < <= = > >= ~> and VERSION has
286
- # the form x.y.z or x.y.
287
- #
288
- # === Returns
289
- # versions<Array>:: Returns the list of versions for the platform
290
- def supports(platform, *version_args)
291
- version = new_args_format(:supports, platform, version_args)
292
- constraint = validate_version_constraint(:supports, platform, version)
293
- @platforms[platform] = constraint.to_s
294
- @platforms[platform]
295
- end
296
-
297
- # Adds a dependency on another cookbook, with version checking strings.
298
- #
299
- # === Parameters
300
- # cookbook<String>:: The cookbook
301
- # version<String>:: A version constraint of the form "OP VERSION",
302
- # where OP is one of < <= = > >= ~> and VERSION has
303
- # the form x.y.z or x.y.
304
- #
305
- # === Returns
306
- # versions<Array>:: Returns the list of versions for the platform
307
- def depends(cookbook, *version_args)
308
- if cookbook == name
309
- Chef::Log.warn "Ignoring self-dependency in cookbook #{name}, please remove it (in the future this will be fatal)."
310
- else
311
- version = new_args_format(:depends, cookbook, version_args)
312
- constraint = validate_version_constraint(:depends, cookbook, version)
313
- @dependencies[cookbook] = constraint.to_s
314
- end
315
- @dependencies[cookbook]
316
- end
317
-
318
- # Adds a recommendation for another cookbook, with version checking strings.
319
- #
320
- # === Parameters
321
- # cookbook<String>:: The cookbook
322
- # version<String>:: A version constraint of the form "OP VERSION",
323
- # where OP is one of < <= = > >= ~> and VERSION has
324
- # the form x.y.z or x.y.
325
- #
326
- # === Returns
327
- # versions<Array>:: Returns the list of versions for the platform
328
- def recommends(cookbook, *version_args)
329
- version = new_args_format(:recommends, cookbook, version_args)
330
- constraint = validate_version_constraint(:recommends, cookbook, version)
331
- @recommendations[cookbook] = constraint.to_s
332
- @recommendations[cookbook]
333
- end
334
-
335
- # Adds a suggestion for another cookbook, with version checking strings.
336
- #
337
- # === Parameters
338
- # cookbook<String>:: The cookbook
339
- # version<String>:: A version constraint of the form "OP VERSION",
340
- # where OP is one of < <= = > >= ~> and VERSION has the
341
- # formx.y.z or x.y.
342
- #
343
- # === Returns
344
- # versions<Array>:: Returns the list of versions for the platform
345
- def suggests(cookbook, *version_args)
346
- version = new_args_format(:suggests, cookbook, version_args)
347
- constraint = validate_version_constraint(:suggests, cookbook, version)
348
- @suggestions[cookbook] = constraint.to_s
349
- @suggestions[cookbook]
350
- end
351
-
352
- # Adds a conflict for another cookbook, with version checking strings.
353
- #
354
- # === Parameters
355
- # cookbook<String>:: The cookbook
356
- # version<String>:: A version constraint of the form "OP VERSION",
357
- # where OP is one of < <= = > >= ~> and VERSION has
358
- # the form x.y.z or x.y.
359
- #
360
- # === Returns
361
- # versions<Array>:: Returns the list of versions for the platform
362
- def conflicts(cookbook, *version_args)
363
- version = new_args_format(:conflicts, cookbook, version_args)
364
- constraint = validate_version_constraint(:conflicts, cookbook, version)
365
- @conflicting[cookbook] = constraint.to_s
366
- @conflicting[cookbook]
367
- end
368
-
369
- # Adds a recipe, definition, or resource provided by this cookbook.
370
- #
371
- # Recipes are specified as normal
372
- # Definitions are followed by (), and can include :params for prototyping
373
- # Resources are the stringified version (service[apache2])
374
- #
375
- # === Parameters
376
- # recipe, definition, resource<String>:: The thing we provide
377
- # version<String>:: A version constraint of the form "OP VERSION",
378
- # where OP is one of < <= = > >= ~> and VERSION has
379
- # the form x.y.z or x.y.
380
- #
381
- # === Returns
382
- # versions<Array>:: Returns the list of versions for the platform
383
- def provides(cookbook, *version_args)
384
- version = new_args_format(:provides, cookbook, version_args)
385
- constraint = validate_version_constraint(:provides, cookbook, version)
386
- @providing[cookbook] = constraint.to_s
387
- @providing[cookbook]
388
- end
389
-
390
- # Adds a cookbook that is replaced by this one, with version checking strings.
391
- #
392
- # === Parameters
393
- # cookbook<String>:: The cookbook we replace
394
- # version<String>:: A version constraint of the form "OP VERSION",
395
- # where OP is one of < <= = > >= ~> and VERSION has the form x.y.z or x.y.
396
- #
397
- # === Returns
398
- # versions<Array>:: Returns the list of versions for the platform
399
- def replaces(cookbook, *version_args)
400
- version = new_args_format(:replaces, cookbook, version_args)
401
- constraint = validate_version_constraint(:replaces, cookbook, version)
402
- @replacing[cookbook] = constraint.to_s
403
- @replacing[cookbook]
404
- end
405
-
406
- # Metadata DSL to set a valid chef_version. May be declared multiple times
407
- # with the result being 'OR'd such that if any statements match, the version
408
- # is considered supported. Uses Gem::Requirement for its implementation.
409
- #
410
- # @param version_args [Array<String>] Version constraint in String form
411
- # @return [Array<Gem::Dependency>] Current chef_versions array
412
- def chef_version(*version_args)
413
- @chef_versions << Gem::Dependency.new("chef", *version_args) unless version_args.empty?
414
- @chef_versions
415
- end
416
-
417
- # Metadata DSL to set a valid ohai_version. May be declared multiple times
418
- # with the result being 'OR'd such that if any statements match, the version
419
- # is considered supported. Uses Gem::Requirement for its implementation.
420
- #
421
- # @param version_args [Array<String>] Version constraint in String form
422
- # @return [Array<Gem::Dependency>] Current ohai_versions array
423
- def ohai_version(*version_args)
424
- @ohai_versions << Gem::Dependency.new("ohai", *version_args) unless version_args.empty?
425
- @ohai_versions
426
- end
427
-
428
- # Metadata DSL to set a gem to install from the cookbook metadata. May be declared
429
- # multiple times. All the gems from all the cookbooks are combined into one Gemfile
430
- # and depsolved together. Uses Bundler's DSL for its implementation.
431
- #
432
- # @param args [Array<String>] Gem name and options to pass to Bundler's DSL
433
- # @return [Array<Array>] Array of gem statements as args
434
- def gem(*args)
435
- @gems << args unless args.empty?
436
- @gems
437
- end
438
-
439
- # Adds a description for a recipe.
440
- #
441
- # === Parameters
442
- # recipe<String>:: The recipe
443
- # description<String>:: The description of the recipe
444
- #
445
- # === Returns
446
- # description<String>:: Returns the current description
447
- def recipe(name, description)
448
- @recipes[name] = description
449
- end
450
-
451
- # Sets the cookbook's recipes to the list of recipes in the given
452
- # +cookbook+. Any recipe that already has a description (if set by the
453
- # #recipe method) will not be updated.
454
- #
455
- # === Parameters
456
- # cookbook<CookbookVersion>:: CookbookVersion object representing the cookbook
457
- # description<String>:: The description of the recipe
458
- #
459
- # === Returns
460
- # recipe_unqualified_names<Array>:: An array of the recipe names given by the cookbook
461
- def recipes_from_cookbook_version(cookbook)
462
- cookbook.fully_qualified_recipe_names.map do |recipe_name|
463
- unqualified_name =
464
- if recipe_name =~ /::default$/
465
- name.to_s
466
- else
467
- recipe_name
468
- end
469
-
470
- @recipes[unqualified_name] ||= ""
471
- provides(unqualified_name)
472
-
473
- unqualified_name
474
- end
475
- end
476
-
477
- # Adds an attribute that a user needs to configure for this cookbook. Takes
478
- # a name (with the / notation for a nested attribute), followed by any of
479
- # these options
480
- #
481
- # display_name<String>:: What a UI should show for this attribute
482
- # description<String>:: A hint as to what this attr is for
483
- # choice<Array>:: An array of choices to present to the user.
484
- # calculated<Boolean>:: If true, the default value is calculated by the recipe and cannot be displayed.
485
- # type<String>:: "string" or "array" - default is "string" ("hash" is supported for backwards compatibility)
486
- # required<String>:: Whether this attr is 'required', 'recommended' or 'optional' - default 'optional' (true/false values also supported for backwards compatibility)
487
- # recipes<Array>:: An array of recipes which need this attr set.
488
- # default<String>,<Array>,<Hash>:: The default value
489
- #
490
- # === Parameters
491
- # name<String>:: The name of the attribute ('foo', or 'apache2/log_dir')
492
- # options<Hash>:: The description of the options
493
- #
494
- # === Returns
495
- # options<Hash>:: Returns the current options hash
496
- def attribute(name, options)
497
- validate(
498
- options,
499
- {
500
- :display_name => { :kind_of => String },
501
- :description => { :kind_of => String },
502
- :choice => { :kind_of => [ Array ], :default => [] },
503
- :calculated => { :equal_to => [ true, false ], :default => false },
504
- :type => { :equal_to => %w{string array hash symbol boolean numeric}, :default => "string" },
505
- :required => { :equal_to => [ "required", "recommended", "optional", true, false ], :default => "optional" },
506
- :recipes => { :kind_of => [ Array ], :default => [] },
507
- :default => { :kind_of => [ String, Array, Hash, Symbol, Numeric, TrueClass, FalseClass ] },
508
- :source_url => { :kind_of => String },
509
- :issues_url => { :kind_of => String },
510
- :privacy => { :kind_of => [ TrueClass, FalseClass ] },
511
- }
512
- )
513
- options[:required] = remap_required_attribute(options[:required]) unless options[:required].nil?
514
- validate_choice_array(options)
515
- validate_calculated_default_rule(options)
516
- validate_choice_default_rule(options)
517
-
518
- @attributes[name] = options
519
- @attributes[name]
520
- end
521
-
522
- def grouping(name, options)
523
- validate(
524
- options,
525
- {
526
- :title => { :kind_of => String },
527
- :description => { :kind_of => String },
528
- }
529
- )
530
- @groupings[name] = options
531
- @groupings[name]
532
- end
533
-
534
- # Convert an Array of Gem::Dependency objects (chef_version/ohai_version) to an Array.
535
- #
536
- # Gem::Dependencey#to_s is not useful, and there is no #to_json defined on it or its component
537
- # objets, so we have to write our own rendering method.
538
- #
539
- # [ Gem::Dependency.new(">= 12.5"), Gem::Dependency.new(">= 11.18.0", "< 12.0") ]
540
- #
541
- # results in:
542
- #
543
- # [ [ ">= 12.5" ], [ ">= 11.18.0", "< 12.0" ] ]
544
- #
545
- # @param deps [Array<Gem::Dependency>] Multiple Gem-style version constraints
546
- # @return [Array<Array<String>]] Simple object representation of version constraints (for json)
547
- def gem_requirements_to_array(*deps)
548
- deps.map do |dep|
549
- dep.requirement.requirements.map do |op, version|
550
- "#{op} #{version}"
551
- end.sort
552
- end
553
- end
554
-
555
- # Convert an Array of Gem::Dependency objects (chef_version/ohai_version) to a hash.
556
- #
557
- # This is the inverse of #gem_requirements_to_array
558
- #
559
- # @param what [String] What version constraint we are constructing ('chef' or 'ohai' presently)
560
- # @param array [Array<Array<String>]] Simple object representation of version constraints (from json)
561
- # @return [Array<Gem::Dependency>] Multiple Gem-style version constraints
562
- def gem_requirements_from_array(what, array)
563
- array.map do |dep|
564
- Gem::Dependency.new(what, *dep)
565
- end
566
- end
567
-
568
- def to_hash
569
- {
570
- NAME => name,
571
- DESCRIPTION => description,
572
- LONG_DESCRIPTION => long_description,
573
- MAINTAINER => maintainer,
574
- MAINTAINER_EMAIL => maintainer_email,
575
- LICENSE => license,
576
- PLATFORMS => platforms,
577
- DEPENDENCIES => dependencies,
578
- RECOMMENDATIONS => recommendations,
579
- SUGGESTIONS => suggestions,
580
- CONFLICTING => conflicting,
581
- PROVIDING => providing,
582
- REPLACING => replacing,
583
- ATTRIBUTES => attributes,
584
- GROUPINGS => groupings,
585
- RECIPES => recipes,
586
- VERSION => version,
587
- SOURCE_URL => source_url,
588
- ISSUES_URL => issues_url,
589
- PRIVACY => privacy,
590
- CHEF_VERSIONS => gem_requirements_to_array(*chef_versions),
591
- OHAI_VERSIONS => gem_requirements_to_array(*ohai_versions),
592
- GEMS => gems,
593
- }
594
- end
595
-
596
- def to_json(*a)
597
- Chef::JSONCompat.to_json(to_hash, *a)
598
- end
599
-
600
- def self.from_hash(o)
601
- cm = new()
602
- cm.from_hash(o)
603
- cm
604
- end
605
-
606
- def from_hash(o)
607
- @name = o[NAME] if o.has_key?(NAME)
608
- @description = o[DESCRIPTION] if o.has_key?(DESCRIPTION)
609
- @long_description = o[LONG_DESCRIPTION] if o.has_key?(LONG_DESCRIPTION)
610
- @maintainer = o[MAINTAINER] if o.has_key?(MAINTAINER)
611
- @maintainer_email = o[MAINTAINER_EMAIL] if o.has_key?(MAINTAINER_EMAIL)
612
- @license = o[LICENSE] if o.has_key?(LICENSE)
613
- @platforms = o[PLATFORMS] if o.has_key?(PLATFORMS)
614
- @dependencies = handle_deprecated_constraints(o[DEPENDENCIES]) if o.has_key?(DEPENDENCIES)
615
- @recommendations = handle_deprecated_constraints(o[RECOMMENDATIONS]) if o.has_key?(RECOMMENDATIONS)
616
- @suggestions = handle_deprecated_constraints(o[SUGGESTIONS]) if o.has_key?(SUGGESTIONS)
617
- @conflicting = handle_deprecated_constraints(o[CONFLICTING]) if o.has_key?(CONFLICTING)
618
- @providing = o[PROVIDING] if o.has_key?(PROVIDING)
619
- @replacing = handle_deprecated_constraints(o[REPLACING]) if o.has_key?(REPLACING)
620
- @attributes = o[ATTRIBUTES] if o.has_key?(ATTRIBUTES)
621
- @groupings = o[GROUPINGS] if o.has_key?(GROUPINGS)
622
- @recipes = o[RECIPES] if o.has_key?(RECIPES)
623
- @version = o[VERSION] if o.has_key?(VERSION)
624
- @source_url = o[SOURCE_URL] if o.has_key?(SOURCE_URL)
625
- @issues_url = o[ISSUES_URL] if o.has_key?(ISSUES_URL)
626
- @privacy = o[PRIVACY] if o.has_key?(PRIVACY)
627
- @chef_versions = gem_requirements_from_array("chef", o[CHEF_VERSIONS]) if o.has_key?(CHEF_VERSIONS)
628
- @ohai_versions = gem_requirements_from_array("ohai", o[OHAI_VERSIONS]) if o.has_key?(OHAI_VERSIONS)
629
- @gems = o[GEMS] if o.has_key?(GEMS)
630
- self
631
- end
632
-
633
- def self.from_json(string)
634
- o = Chef::JSONCompat.from_json(string)
635
- from_hash(o)
636
- end
637
-
638
- def self.validate_json(json_str)
639
- o = Chef::JSONCompat.from_json(json_str)
640
- metadata = new()
641
- VERSION_CONSTRAINTS.each do |dependency_type, hash_key|
642
- if dependency_group = o[hash_key]
643
- dependency_group.each do |cb_name, constraints|
644
- if metadata.respond_to?(dependency_type)
645
- metadata.public_send(dependency_type, cb_name, *Array(constraints))
646
- end
647
- end
648
- end
649
- end
650
- true
651
- end
652
-
653
- def from_json(string)
654
- o = Chef::JSONCompat.from_json(string)
655
- from_hash(o)
656
- end
657
-
658
- # Sets the cookbook's source URL, or returns it.
659
- #
660
- # === Parameters
661
- # maintainer<String>:: The source URL
662
- #
663
- # === Returns
664
- # source_url<String>:: Returns the current source URL.
665
- def source_url(arg = nil)
666
- set_or_return(
667
- :source_url,
668
- arg,
669
- :kind_of => [ String ]
670
- )
671
- end
672
-
673
- # Sets the cookbook's issues URL, or returns it.
674
- #
675
- # === Parameters
676
- # issues_url<String>:: The issues URL
677
- #
678
- # === Returns
679
- # issues_url<String>:: Returns the current issues URL.
680
- def issues_url(arg = nil)
681
- set_or_return(
682
- :issues_url,
683
- arg,
684
- :kind_of => [ String ]
685
- )
686
- end
687
-
688
- #
689
- # Sets the cookbook's privacy flag, or returns it.
690
- #
691
- # === Parameters
692
- # privacy<TrueClass,FalseClass>:: Whether this cookbook is private or not
693
- #
694
- # === Returns
695
- # privacy<TrueClass,FalseClass>:: Whether this cookbook is private or not
696
- #
697
- def privacy(arg = nil)
698
- set_or_return(
699
- :privacy,
700
- arg,
701
- :kind_of => [ TrueClass, FalseClass ]
702
- )
703
- end
704
-
705
- # Validates that the Ohai::VERSION of the running chef-client matches one of the
706
- # configured ohai_version statements in this cookbooks metadata.
707
- #
708
- # @raises [Chef::Exceptions::CookbookOhaiVersionMismatch] if the cookbook fails validation
709
- def validate_ohai_version!
710
- unless gem_dep_matches?("ohai", Gem::Version.new(Ohai::VERSION), *ohai_versions)
711
- raise Exceptions::CookbookOhaiVersionMismatch.new(Ohai::VERSION, name, version, *ohai_versions)
712
- end
713
- end
714
-
715
- # Validates that the Chef::VERSION of the running chef-client matches one of the
716
- # configured chef_version statements in this cookbooks metadata.
717
- #
718
- # @raises [Chef::Exceptions::CookbookChefVersionMismatch] if the cookbook fails validation
719
- def validate_chef_version!
720
- unless gem_dep_matches?("chef", Gem::Version.new(Chef::VERSION), *chef_versions)
721
- raise Exceptions::CookbookChefVersionMismatch.new(Chef::VERSION, name, version, *chef_versions)
722
- end
723
- end
724
-
725
- def method_missing(method, *args, &block)
726
- if block_given?
727
- super
728
- else
729
- Chef::Log.debug "ignoring method #{method} on cookbook with name #{name}, possible typo or future metadata?"
730
- end
731
- end
732
-
733
- private
734
-
735
- # Helper to match a gem style version (ohai_version/chef_version) against a set of
736
- # Gem::Dependency version constraints. If none are present, it always matches. if
737
- # multiple are present, one must match. Returns false if none matches.
738
- #
739
- # @param what [String] the name of the constraint (e.g. 'chef' or 'ohai')
740
- # @param version [String] the version to compare against the constraints
741
- # @param deps [Array<Gem::Dependency>] Multiple Gem-style version constraints
742
- # @return [Boolean] true if no constraints or a match, false if no match
743
- def gem_dep_matches?(what, version, *deps)
744
- # always match if we have no chef_version at all
745
- return true unless deps.length > 0
746
- # match if we match any of the chef_version lines
747
- deps.any? { |dep| dep.match?(what, version) }
748
- end
749
-
750
- def run_validation
751
- if name.nil?
752
- @errors = ["The `name' attribute is required in cookbook metadata"]
753
- end
754
- end
755
-
756
- def new_args_format(caller_name, dep_name, version_constraints)
757
- if version_constraints.empty?
758
- ">= 0.0.0"
759
- elsif version_constraints.size == 1
760
- version_constraints.first
761
- else
762
- msg = <<-OBSOLETED
763
- The dependency specification syntax you are using is no longer valid. You may not
764
- specify more than one version constraint for a particular cookbook.
765
- Consult https://docs.chef.io/config_rb_metadata.html for the updated syntax.
766
-
767
- Called by: #{caller_name} '#{dep_name}', #{version_constraints.map { |vc| vc.inspect }.join(", ")}
768
- Called from:
769
- #{caller[0...5].map { |line| " " + line }.join("\n")}
770
- OBSOLETED
771
- raise Exceptions::ObsoleteDependencySyntax, msg
772
- end
773
- end
774
-
775
- def validate_version_constraint(caller_name, dep_name, constraint_str)
776
- Chef::VersionConstraint::Platform.new(constraint_str)
777
- rescue Chef::Exceptions::InvalidVersionConstraint => e
778
- Log.debug(e)
779
-
780
- msg = <<-INVALID
781
- The version constraint syntax you are using is not valid. If you recently
782
- upgraded to Chef 0.10.0, be aware that you no may longer use "<<" and ">>" for
783
- 'less than' and 'greater than'; use '<' and '>' instead.
784
- Consult https://docs.chef.io/config_rb_metadata.html for more information.
785
-
786
- Called by: #{caller_name} '#{dep_name}', '#{constraint_str}'
787
- Called from:
788
- #{caller[0...5].map { |line| " " + line }.join("\n")}
789
- INVALID
790
- raise Exceptions::InvalidVersionConstraint, msg
791
- end
792
-
793
- # Verify that the given array is an array of strings
794
- #
795
- # Raise an exception if the members of the array are not Strings
796
- #
797
- # === Parameters
798
- # arry<Array>:: An array to be validated
799
- def validate_string_array(arry)
800
- if arry.kind_of?(Array)
801
- arry.each do |choice|
802
- validate( { :choice => choice }, { :choice => { :kind_of => String } } )
803
- end
804
- end
805
- end
806
-
807
- # Validate the choice of the options hash
808
- #
809
- # Raise an exception if the members of the array do not match the defaults
810
- # === Parameters
811
- # opts<Hash>:: The options hash
812
- def validate_choice_array(opts)
813
- if opts[:choice].kind_of?(Array)
814
- case opts[:type]
815
- when "string"
816
- validator = [ String ]
817
- when "array"
818
- validator = [ Array ]
819
- when "hash"
820
- validator = [ Hash ]
821
- when "symbol"
822
- validator = [ Symbol ]
823
- when "boolean"
824
- validator = [ TrueClass, FalseClass ]
825
- when "numeric"
826
- validator = [ Numeric ]
827
- end
828
-
829
- opts[:choice].each do |choice|
830
- validate( { :choice => choice }, { :choice => { :kind_of => validator } } )
831
- end
832
- end
833
- end
834
-
835
- # For backwards compatibility, remap Boolean values to String
836
- # true is mapped to "required"
837
- # false is mapped to "optional"
838
- #
839
- # === Parameters
840
- # required_attr<String><Boolean>:: The value of options[:required]
841
- #
842
- # === Returns
843
- # required_attr<String>:: "required", "recommended", or "optional"
844
- def remap_required_attribute(value)
845
- case value
846
- when true
847
- value = "required"
848
- when false
849
- value = "optional"
850
- end
851
- value
852
- end
853
-
854
- def validate_calculated_default_rule(options)
855
- calculated_conflict = ((options[:default].is_a?(Array) && !options[:default].empty?) ||
856
- (options[:default].is_a?(String) && !options[:default] != "")) &&
857
- options[:calculated] == true
858
- raise ArgumentError, "Default cannot be specified if calculated is true!" if calculated_conflict
859
- end
860
-
861
- def validate_choice_default_rule(options)
862
- return if !options[:choice].is_a?(Array) || options[:choice].empty?
863
-
864
- if options[:default].is_a?(String) && options[:default] != ""
865
- raise ArgumentError, "Default must be one of your choice values!" if options[:choice].index(options[:default]).nil?
866
- end
867
-
868
- if options[:default].is_a?(Array) && !options[:default].empty?
869
- options[:default].each do |val|
870
- raise ArgumentError, "Default values must be a subset of your choice values!" if options[:choice].index(val).nil?
871
- end
872
- end
873
- end
874
-
875
- # This method translates version constraint strings from
876
- # cookbooks with the old format.
877
- #
878
- # Before we began respecting version constraints, we allowed
879
- # multiple constraints to be placed on cookbooks, as well as the
880
- # << and >> operators, which are now just < and >. For
881
- # specifications with more than one constraint, we return an
882
- # empty array (otherwise, we're silently abiding only part of
883
- # the contract they have specified to us). If there is only one
884
- # constraint, we are replacing the old << and >> with the new <
885
- # and >.
886
- def handle_deprecated_constraints(specification)
887
- specification.inject(Mash.new) do |acc, (cb, constraints)|
888
- constraints = Array(constraints)
889
- acc[cb] = (constraints.empty? || constraints.size > 1) ? [] : constraints.first.gsub(/>>/, ">").gsub(/<</, "<")
890
- acc
891
- end
892
- end
893
-
894
- end
895
-
896
- #== Chef::Cookbook::MinimalMetadata
897
- # MinimalMetadata is a duck type of Cookbook::Metadata, used
898
- # internally by Chef Server when determining the optimal set of
899
- # cookbooks for a node.
900
- #
901
- # MinimalMetadata objects typically contain only enough information
902
- # to solve the cookbook collection for a run list, but not enough to
903
- # generate the proper response
904
- class MinimalMetadata < Metadata
905
- def initialize(name, params)
906
- @name = name
907
- from_hash(params)
908
- end
909
- end
910
-
911
- end
912
- end
1
+ #
2
+ # Author:: Adam Jacob (<adam@chef.io>)
3
+ # Author:: AJ Christensen (<aj@chef.io>)
4
+ # Author:: Seth Falcon (<seth@chef.io>)
5
+ # Copyright:: Copyright 2008-2016, Chef Software, Inc.
6
+ # License:: Apache License, Version 2.0
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+
21
+ require "chef/exceptions"
22
+ require "chef/mash"
23
+ require "chef/mixin/from_file"
24
+ require "chef/mixin/params_validate"
25
+ require "chef/log"
26
+ require "chef/version_class"
27
+ require "chef/version_constraint"
28
+ require "chef/version_constraint/platform"
29
+ require "chef/json_compat"
30
+
31
+ class Chef
32
+ class Cookbook
33
+
34
+ # == Chef::Cookbook::Metadata
35
+ # Chef::Cookbook::Metadata provides a convenient DSL for declaring metadata
36
+ # about Chef Cookbooks.
37
+ class Metadata
38
+
39
+ NAME = "name".freeze
40
+ DESCRIPTION = "description".freeze
41
+ LONG_DESCRIPTION = "long_description".freeze
42
+ MAINTAINER = "maintainer".freeze
43
+ MAINTAINER_EMAIL = "maintainer_email".freeze
44
+ LICENSE = "license".freeze
45
+ PLATFORMS = "platforms".freeze
46
+ DEPENDENCIES = "dependencies".freeze
47
+ RECOMMENDATIONS = "recommendations".freeze
48
+ SUGGESTIONS = "suggestions".freeze
49
+ CONFLICTING = "conflicting".freeze
50
+ PROVIDING = "providing".freeze
51
+ REPLACING = "replacing".freeze
52
+ ATTRIBUTES = "attributes".freeze
53
+ GROUPINGS = "groupings".freeze
54
+ RECIPES = "recipes".freeze
55
+ VERSION = "version".freeze
56
+ SOURCE_URL = "source_url".freeze
57
+ ISSUES_URL = "issues_url".freeze
58
+ PRIVACY = "privacy".freeze
59
+ CHEF_VERSIONS = "chef_versions".freeze
60
+ OHAI_VERSIONS = "ohai_versions".freeze
61
+ GEMS = "gems".freeze
62
+
63
+ COMPARISON_FIELDS = [ :name, :description, :long_description, :maintainer,
64
+ :maintainer_email, :license, :platforms, :dependencies,
65
+ :recommendations, :suggestions, :conflicting, :providing,
66
+ :replacing, :attributes, :groupings, :recipes, :version,
67
+ :source_url, :issues_url, :privacy, :chef_versions, :ohai_versions,
68
+ :gems ]
69
+
70
+ VERSION_CONSTRAINTS = { :depends => DEPENDENCIES,
71
+ :recommends => RECOMMENDATIONS,
72
+ :suggests => SUGGESTIONS,
73
+ :conflicts => CONFLICTING,
74
+ :provides => PROVIDING,
75
+ :replaces => REPLACING,
76
+ :chef_version => CHEF_VERSIONS,
77
+ :ohai_version => OHAI_VERSIONS }
78
+
79
+ include Chef::Mixin::ParamsValidate
80
+ include Chef::Mixin::FromFile
81
+
82
+ attr_reader :platforms
83
+ attr_reader :dependencies
84
+ attr_reader :recommendations
85
+ attr_reader :suggestions
86
+ attr_reader :conflicting
87
+ attr_reader :providing
88
+ attr_reader :replacing
89
+ attr_reader :attributes
90
+ attr_reader :groupings
91
+ attr_reader :recipes
92
+ attr_reader :version
93
+
94
+ # @return [Array<Gem::Dependency>] Array of supported Chef versions
95
+ attr_reader :chef_versions
96
+ # @return [Array<Gem::Dependency>] Array of supported Ohai versions
97
+ attr_reader :ohai_versions
98
+ # @return [Array<Array>] Array of gems to install with *args as an Array
99
+ attr_reader :gems
100
+
101
+ # Builds a new Chef::Cookbook::Metadata object.
102
+ #
103
+ # === Parameters
104
+ # cookbook<String>:: An optional cookbook object
105
+ # maintainer<String>:: An optional maintainer
106
+ # maintainer_email<String>:: An optional maintainer email
107
+ # license<String>::An optional license. Default is Apache v2.0
108
+ #
109
+ # === Returns
110
+ # metadata<Chef::Cookbook::Metadata>
111
+ def initialize
112
+ @name = nil
113
+
114
+ @description = ""
115
+ @long_description = ""
116
+ @license = "All rights reserved"
117
+
118
+ @maintainer = nil
119
+ @maintainer_email = nil
120
+
121
+ @platforms = Mash.new
122
+ @dependencies = Mash.new
123
+ @recommendations = Mash.new
124
+ @suggestions = Mash.new
125
+ @conflicting = Mash.new
126
+ @providing = Mash.new
127
+ @replacing = Mash.new
128
+ @attributes = Mash.new
129
+ @groupings = Mash.new
130
+ @recipes = Mash.new
131
+ @version = Version.new("0.0.0")
132
+ @source_url = ""
133
+ @issues_url = ""
134
+ @privacy = false
135
+ @chef_versions = []
136
+ @ohai_versions = []
137
+ @gems = []
138
+
139
+ @errors = []
140
+ end
141
+
142
+ def ==(other)
143
+ COMPARISON_FIELDS.inject(true) do |equal_so_far, field|
144
+ equal_so_far && other.respond_to?(field) && (other.send(field) == send(field))
145
+ end
146
+ end
147
+
148
+ # Whether this metadata is valid. In order to be valid, all required
149
+ # fields must be set. Chef's validation implementation checks the content
150
+ # of a given field when setting (and raises an error if the content does
151
+ # not meet the criteria), so the content of the fields is not considered
152
+ # when checking validity.
153
+ #
154
+ # === Returns
155
+ # valid<Boolean>:: Whether this metadata object is valid
156
+ def valid?
157
+ run_validation
158
+ @errors.empty?
159
+ end
160
+
161
+ # A list of validation errors for this metadata object. See #valid? for
162
+ # comments about the validation criteria.
163
+ #
164
+ # If there are any validation errors, one or more error strings will be
165
+ # returned. Otherwise an empty array is returned.
166
+ #
167
+ # === Returns
168
+ # error messages<Array>:: Whether this metadata object is valid
169
+ def errors
170
+ run_validation
171
+ @errors
172
+ end
173
+
174
+ # Sets the cookbooks maintainer, or returns it.
175
+ #
176
+ # === Parameters
177
+ # maintainer<String>:: The maintainers name
178
+ #
179
+ # === Returns
180
+ # maintainer<String>:: Returns the current maintainer.
181
+ def maintainer(arg = nil)
182
+ set_or_return(
183
+ :maintainer,
184
+ arg,
185
+ :kind_of => [ String ]
186
+ )
187
+ end
188
+
189
+ # Sets the maintainers email address, or returns it.
190
+ #
191
+ # === Parameters
192
+ # maintainer_email<String>:: The maintainers email address
193
+ #
194
+ # === Returns
195
+ # maintainer_email<String>:: Returns the current maintainer email.
196
+ def maintainer_email(arg = nil)
197
+ set_or_return(
198
+ :maintainer_email,
199
+ arg,
200
+ :kind_of => [ String ]
201
+ )
202
+ end
203
+
204
+ # Sets the current license, or returns it.
205
+ #
206
+ # === Parameters
207
+ # license<String>:: The current license.
208
+ #
209
+ # === Returns
210
+ # license<String>:: Returns the current license
211
+ def license(arg = nil)
212
+ set_or_return(
213
+ :license,
214
+ arg,
215
+ :kind_of => [ String ]
216
+ )
217
+ end
218
+
219
+ # Sets the current description, or returns it. Should be short - one line only!
220
+ #
221
+ # === Parameters
222
+ # description<String>:: The new description
223
+ #
224
+ # === Returns
225
+ # description<String>:: Returns the description
226
+ def description(arg = nil)
227
+ set_or_return(
228
+ :description,
229
+ arg,
230
+ :kind_of => [ String ]
231
+ )
232
+ end
233
+
234
+ # Sets the current long description, or returns it. Might come from a README, say.
235
+ #
236
+ # === Parameters
237
+ # long_description<String>:: The new long description
238
+ #
239
+ # === Returns
240
+ # long_description<String>:: Returns the long description
241
+ def long_description(arg = nil)
242
+ set_or_return(
243
+ :long_description,
244
+ arg,
245
+ :kind_of => [ String ]
246
+ )
247
+ end
248
+
249
+ # Sets the current cookbook version, or returns it. Can be two or three digits, separated
250
+ # by dots. ie: '2.1', '1.5.4' or '0.9'.
251
+ #
252
+ # === Parameters
253
+ # version<String>:: The current version, as a string
254
+ #
255
+ # === Returns
256
+ # version<String>:: Returns the current version
257
+ def version(arg = nil)
258
+ if arg
259
+ @version = Chef::Version.new(arg)
260
+ end
261
+
262
+ @version.to_s
263
+ end
264
+
265
+ # Sets the name of the cookbook, or returns it.
266
+ #
267
+ # === Parameters
268
+ # name<String>:: The current cookbook name.
269
+ #
270
+ # === Returns
271
+ # name<String>:: Returns the current cookbook name.
272
+ def name(arg = nil)
273
+ set_or_return(
274
+ :name,
275
+ arg,
276
+ :kind_of => [ String ]
277
+ )
278
+ end
279
+
280
+ # Adds a supported platform, with version checking strings.
281
+ #
282
+ # === Parameters
283
+ # platform<String>,<Symbol>:: The platform (like :ubuntu or :mac_os_x)
284
+ # version<String>:: A version constraint of the form "OP VERSION",
285
+ # where OP is one of < <= = > >= ~> and VERSION has
286
+ # the form x.y.z or x.y.
287
+ #
288
+ # === Returns
289
+ # versions<Array>:: Returns the list of versions for the platform
290
+ def supports(platform, *version_args)
291
+ version = new_args_format(:supports, platform, version_args)
292
+ constraint = validate_version_constraint(:supports, platform, version)
293
+ @platforms[platform] = constraint.to_s
294
+ @platforms[platform]
295
+ end
296
+
297
+ # Adds a dependency on another cookbook, with version checking strings.
298
+ #
299
+ # === Parameters
300
+ # cookbook<String>:: The cookbook
301
+ # version<String>:: A version constraint of the form "OP VERSION",
302
+ # where OP is one of < <= = > >= ~> and VERSION has
303
+ # the form x.y.z or x.y.
304
+ #
305
+ # === Returns
306
+ # versions<Array>:: Returns the list of versions for the platform
307
+ def depends(cookbook, *version_args)
308
+ if cookbook == name
309
+ Chef::Log.warn "Ignoring self-dependency in cookbook #{name}, please remove it (in the future this will be fatal)."
310
+ else
311
+ version = new_args_format(:depends, cookbook, version_args)
312
+ constraint = validate_version_constraint(:depends, cookbook, version)
313
+ @dependencies[cookbook] = constraint.to_s
314
+ end
315
+ @dependencies[cookbook]
316
+ end
317
+
318
+ # Adds a recommendation for another cookbook, with version checking strings.
319
+ #
320
+ # === Parameters
321
+ # cookbook<String>:: The cookbook
322
+ # version<String>:: A version constraint of the form "OP VERSION",
323
+ # where OP is one of < <= = > >= ~> and VERSION has
324
+ # the form x.y.z or x.y.
325
+ #
326
+ # === Returns
327
+ # versions<Array>:: Returns the list of versions for the platform
328
+ def recommends(cookbook, *version_args)
329
+ version = new_args_format(:recommends, cookbook, version_args)
330
+ constraint = validate_version_constraint(:recommends, cookbook, version)
331
+ @recommendations[cookbook] = constraint.to_s
332
+ @recommendations[cookbook]
333
+ end
334
+
335
+ # Adds a suggestion for another cookbook, with version checking strings.
336
+ #
337
+ # === Parameters
338
+ # cookbook<String>:: The cookbook
339
+ # version<String>:: A version constraint of the form "OP VERSION",
340
+ # where OP is one of < <= = > >= ~> and VERSION has the
341
+ # formx.y.z or x.y.
342
+ #
343
+ # === Returns
344
+ # versions<Array>:: Returns the list of versions for the platform
345
+ def suggests(cookbook, *version_args)
346
+ version = new_args_format(:suggests, cookbook, version_args)
347
+ constraint = validate_version_constraint(:suggests, cookbook, version)
348
+ @suggestions[cookbook] = constraint.to_s
349
+ @suggestions[cookbook]
350
+ end
351
+
352
+ # Adds a conflict for another cookbook, with version checking strings.
353
+ #
354
+ # === Parameters
355
+ # cookbook<String>:: The cookbook
356
+ # version<String>:: A version constraint of the form "OP VERSION",
357
+ # where OP is one of < <= = > >= ~> and VERSION has
358
+ # the form x.y.z or x.y.
359
+ #
360
+ # === Returns
361
+ # versions<Array>:: Returns the list of versions for the platform
362
+ def conflicts(cookbook, *version_args)
363
+ version = new_args_format(:conflicts, cookbook, version_args)
364
+ constraint = validate_version_constraint(:conflicts, cookbook, version)
365
+ @conflicting[cookbook] = constraint.to_s
366
+ @conflicting[cookbook]
367
+ end
368
+
369
+ # Adds a recipe, definition, or resource provided by this cookbook.
370
+ #
371
+ # Recipes are specified as normal
372
+ # Definitions are followed by (), and can include :params for prototyping
373
+ # Resources are the stringified version (service[apache2])
374
+ #
375
+ # === Parameters
376
+ # recipe, definition, resource<String>:: The thing we provide
377
+ # version<String>:: A version constraint of the form "OP VERSION",
378
+ # where OP is one of < <= = > >= ~> and VERSION has
379
+ # the form x.y.z or x.y.
380
+ #
381
+ # === Returns
382
+ # versions<Array>:: Returns the list of versions for the platform
383
+ def provides(cookbook, *version_args)
384
+ version = new_args_format(:provides, cookbook, version_args)
385
+ constraint = validate_version_constraint(:provides, cookbook, version)
386
+ @providing[cookbook] = constraint.to_s
387
+ @providing[cookbook]
388
+ end
389
+
390
+ # Adds a cookbook that is replaced by this one, with version checking strings.
391
+ #
392
+ # === Parameters
393
+ # cookbook<String>:: The cookbook we replace
394
+ # version<String>:: A version constraint of the form "OP VERSION",
395
+ # where OP is one of < <= = > >= ~> and VERSION has the form x.y.z or x.y.
396
+ #
397
+ # === Returns
398
+ # versions<Array>:: Returns the list of versions for the platform
399
+ def replaces(cookbook, *version_args)
400
+ version = new_args_format(:replaces, cookbook, version_args)
401
+ constraint = validate_version_constraint(:replaces, cookbook, version)
402
+ @replacing[cookbook] = constraint.to_s
403
+ @replacing[cookbook]
404
+ end
405
+
406
+ # Metadata DSL to set a valid chef_version. May be declared multiple times
407
+ # with the result being 'OR'd such that if any statements match, the version
408
+ # is considered supported. Uses Gem::Requirement for its implementation.
409
+ #
410
+ # @param version_args [Array<String>] Version constraint in String form
411
+ # @return [Array<Gem::Dependency>] Current chef_versions array
412
+ def chef_version(*version_args)
413
+ @chef_versions << Gem::Dependency.new("chef", *version_args) unless version_args.empty?
414
+ @chef_versions
415
+ end
416
+
417
+ # Metadata DSL to set a valid ohai_version. May be declared multiple times
418
+ # with the result being 'OR'd such that if any statements match, the version
419
+ # is considered supported. Uses Gem::Requirement for its implementation.
420
+ #
421
+ # @param version_args [Array<String>] Version constraint in String form
422
+ # @return [Array<Gem::Dependency>] Current ohai_versions array
423
+ def ohai_version(*version_args)
424
+ @ohai_versions << Gem::Dependency.new("ohai", *version_args) unless version_args.empty?
425
+ @ohai_versions
426
+ end
427
+
428
+ # Metadata DSL to set a gem to install from the cookbook metadata. May be declared
429
+ # multiple times. All the gems from all the cookbooks are combined into one Gemfile
430
+ # and depsolved together. Uses Bundler's DSL for its implementation.
431
+ #
432
+ # @param args [Array<String>] Gem name and options to pass to Bundler's DSL
433
+ # @return [Array<Array>] Array of gem statements as args
434
+ def gem(*args)
435
+ @gems << args unless args.empty?
436
+ @gems
437
+ end
438
+
439
+ # Adds a description for a recipe.
440
+ #
441
+ # === Parameters
442
+ # recipe<String>:: The recipe
443
+ # description<String>:: The description of the recipe
444
+ #
445
+ # === Returns
446
+ # description<String>:: Returns the current description
447
+ def recipe(name, description)
448
+ @recipes[name] = description
449
+ end
450
+
451
+ # Sets the cookbook's recipes to the list of recipes in the given
452
+ # +cookbook+. Any recipe that already has a description (if set by the
453
+ # #recipe method) will not be updated.
454
+ #
455
+ # === Parameters
456
+ # cookbook<CookbookVersion>:: CookbookVersion object representing the cookbook
457
+ # description<String>:: The description of the recipe
458
+ #
459
+ # === Returns
460
+ # recipe_unqualified_names<Array>:: An array of the recipe names given by the cookbook
461
+ def recipes_from_cookbook_version(cookbook)
462
+ cookbook.fully_qualified_recipe_names.map do |recipe_name|
463
+ unqualified_name =
464
+ if recipe_name =~ /::default$/
465
+ name.to_s
466
+ else
467
+ recipe_name
468
+ end
469
+
470
+ @recipes[unqualified_name] ||= ""
471
+ provides(unqualified_name)
472
+
473
+ unqualified_name
474
+ end
475
+ end
476
+
477
+ # Adds an attribute that a user needs to configure for this cookbook. Takes
478
+ # a name (with the / notation for a nested attribute), followed by any of
479
+ # these options
480
+ #
481
+ # display_name<String>:: What a UI should show for this attribute
482
+ # description<String>:: A hint as to what this attr is for
483
+ # choice<Array>:: An array of choices to present to the user.
484
+ # calculated<Boolean>:: If true, the default value is calculated by the recipe and cannot be displayed.
485
+ # type<String>:: "string" or "array" - default is "string" ("hash" is supported for backwards compatibility)
486
+ # required<String>:: Whether this attr is 'required', 'recommended' or 'optional' - default 'optional' (true/false values also supported for backwards compatibility)
487
+ # recipes<Array>:: An array of recipes which need this attr set.
488
+ # default<String>,<Array>,<Hash>:: The default value
489
+ #
490
+ # === Parameters
491
+ # name<String>:: The name of the attribute ('foo', or 'apache2/log_dir')
492
+ # options<Hash>:: The description of the options
493
+ #
494
+ # === Returns
495
+ # options<Hash>:: Returns the current options hash
496
+ def attribute(name, options)
497
+ validate(
498
+ options,
499
+ {
500
+ :display_name => { :kind_of => String },
501
+ :description => { :kind_of => String },
502
+ :choice => { :kind_of => [ Array ], :default => [] },
503
+ :calculated => { :equal_to => [ true, false ], :default => false },
504
+ :type => { :equal_to => %w{string array hash symbol boolean numeric}, :default => "string" },
505
+ :required => { :equal_to => [ "required", "recommended", "optional", true, false ], :default => "optional" },
506
+ :recipes => { :kind_of => [ Array ], :default => [] },
507
+ :default => { :kind_of => [ String, Array, Hash, Symbol, Numeric, TrueClass, FalseClass ] },
508
+ :source_url => { :kind_of => String },
509
+ :issues_url => { :kind_of => String },
510
+ :privacy => { :kind_of => [ TrueClass, FalseClass ] },
511
+ }
512
+ )
513
+ options[:required] = remap_required_attribute(options[:required]) unless options[:required].nil?
514
+ validate_choice_array(options)
515
+ validate_calculated_default_rule(options)
516
+ validate_choice_default_rule(options)
517
+
518
+ @attributes[name] = options
519
+ @attributes[name]
520
+ end
521
+
522
+ def grouping(name, options)
523
+ validate(
524
+ options,
525
+ {
526
+ :title => { :kind_of => String },
527
+ :description => { :kind_of => String },
528
+ }
529
+ )
530
+ @groupings[name] = options
531
+ @groupings[name]
532
+ end
533
+
534
+ # Convert an Array of Gem::Dependency objects (chef_version/ohai_version) to an Array.
535
+ #
536
+ # Gem::Dependencey#to_s is not useful, and there is no #to_json defined on it or its component
537
+ # objets, so we have to write our own rendering method.
538
+ #
539
+ # [ Gem::Dependency.new(">= 12.5"), Gem::Dependency.new(">= 11.18.0", "< 12.0") ]
540
+ #
541
+ # results in:
542
+ #
543
+ # [ [ ">= 12.5" ], [ ">= 11.18.0", "< 12.0" ] ]
544
+ #
545
+ # @param deps [Array<Gem::Dependency>] Multiple Gem-style version constraints
546
+ # @return [Array<Array<String>]] Simple object representation of version constraints (for json)
547
+ def gem_requirements_to_array(*deps)
548
+ deps.map do |dep|
549
+ dep.requirement.requirements.map do |op, version|
550
+ "#{op} #{version}"
551
+ end.sort
552
+ end
553
+ end
554
+
555
+ # Convert an Array of Gem::Dependency objects (chef_version/ohai_version) to a hash.
556
+ #
557
+ # This is the inverse of #gem_requirements_to_array
558
+ #
559
+ # @param what [String] What version constraint we are constructing ('chef' or 'ohai' presently)
560
+ # @param array [Array<Array<String>]] Simple object representation of version constraints (from json)
561
+ # @return [Array<Gem::Dependency>] Multiple Gem-style version constraints
562
+ def gem_requirements_from_array(what, array)
563
+ array.map do |dep|
564
+ Gem::Dependency.new(what, *dep)
565
+ end
566
+ end
567
+
568
+ def to_hash
569
+ {
570
+ NAME => name,
571
+ DESCRIPTION => description,
572
+ LONG_DESCRIPTION => long_description,
573
+ MAINTAINER => maintainer,
574
+ MAINTAINER_EMAIL => maintainer_email,
575
+ LICENSE => license,
576
+ PLATFORMS => platforms,
577
+ DEPENDENCIES => dependencies,
578
+ RECOMMENDATIONS => recommendations,
579
+ SUGGESTIONS => suggestions,
580
+ CONFLICTING => conflicting,
581
+ PROVIDING => providing,
582
+ REPLACING => replacing,
583
+ ATTRIBUTES => attributes,
584
+ GROUPINGS => groupings,
585
+ RECIPES => recipes,
586
+ VERSION => version,
587
+ SOURCE_URL => source_url,
588
+ ISSUES_URL => issues_url,
589
+ PRIVACY => privacy,
590
+ CHEF_VERSIONS => gem_requirements_to_array(*chef_versions),
591
+ OHAI_VERSIONS => gem_requirements_to_array(*ohai_versions),
592
+ GEMS => gems,
593
+ }
594
+ end
595
+
596
+ def to_json(*a)
597
+ Chef::JSONCompat.to_json(to_hash, *a)
598
+ end
599
+
600
+ def self.from_hash(o)
601
+ cm = new()
602
+ cm.from_hash(o)
603
+ cm
604
+ end
605
+
606
+ def from_hash(o)
607
+ @name = o[NAME] if o.has_key?(NAME)
608
+ @description = o[DESCRIPTION] if o.has_key?(DESCRIPTION)
609
+ @long_description = o[LONG_DESCRIPTION] if o.has_key?(LONG_DESCRIPTION)
610
+ @maintainer = o[MAINTAINER] if o.has_key?(MAINTAINER)
611
+ @maintainer_email = o[MAINTAINER_EMAIL] if o.has_key?(MAINTAINER_EMAIL)
612
+ @license = o[LICENSE] if o.has_key?(LICENSE)
613
+ @platforms = o[PLATFORMS] if o.has_key?(PLATFORMS)
614
+ @dependencies = handle_deprecated_constraints(o[DEPENDENCIES]) if o.has_key?(DEPENDENCIES)
615
+ @recommendations = handle_deprecated_constraints(o[RECOMMENDATIONS]) if o.has_key?(RECOMMENDATIONS)
616
+ @suggestions = handle_deprecated_constraints(o[SUGGESTIONS]) if o.has_key?(SUGGESTIONS)
617
+ @conflicting = handle_deprecated_constraints(o[CONFLICTING]) if o.has_key?(CONFLICTING)
618
+ @providing = o[PROVIDING] if o.has_key?(PROVIDING)
619
+ @replacing = handle_deprecated_constraints(o[REPLACING]) if o.has_key?(REPLACING)
620
+ @attributes = o[ATTRIBUTES] if o.has_key?(ATTRIBUTES)
621
+ @groupings = o[GROUPINGS] if o.has_key?(GROUPINGS)
622
+ @recipes = o[RECIPES] if o.has_key?(RECIPES)
623
+ @version = o[VERSION] if o.has_key?(VERSION)
624
+ @source_url = o[SOURCE_URL] if o.has_key?(SOURCE_URL)
625
+ @issues_url = o[ISSUES_URL] if o.has_key?(ISSUES_URL)
626
+ @privacy = o[PRIVACY] if o.has_key?(PRIVACY)
627
+ @chef_versions = gem_requirements_from_array("chef", o[CHEF_VERSIONS]) if o.has_key?(CHEF_VERSIONS)
628
+ @ohai_versions = gem_requirements_from_array("ohai", o[OHAI_VERSIONS]) if o.has_key?(OHAI_VERSIONS)
629
+ @gems = o[GEMS] if o.has_key?(GEMS)
630
+ self
631
+ end
632
+
633
+ def self.from_json(string)
634
+ o = Chef::JSONCompat.from_json(string)
635
+ from_hash(o)
636
+ end
637
+
638
+ def self.validate_json(json_str)
639
+ o = Chef::JSONCompat.from_json(json_str)
640
+ metadata = new()
641
+ VERSION_CONSTRAINTS.each do |dependency_type, hash_key|
642
+ if dependency_group = o[hash_key]
643
+ dependency_group.each do |cb_name, constraints|
644
+ if metadata.respond_to?(dependency_type)
645
+ metadata.public_send(dependency_type, cb_name, *Array(constraints))
646
+ end
647
+ end
648
+ end
649
+ end
650
+ true
651
+ end
652
+
653
+ def from_json(string)
654
+ o = Chef::JSONCompat.from_json(string)
655
+ from_hash(o)
656
+ end
657
+
658
+ # Sets the cookbook's source URL, or returns it.
659
+ #
660
+ # === Parameters
661
+ # maintainer<String>:: The source URL
662
+ #
663
+ # === Returns
664
+ # source_url<String>:: Returns the current source URL.
665
+ def source_url(arg = nil)
666
+ set_or_return(
667
+ :source_url,
668
+ arg,
669
+ :kind_of => [ String ]
670
+ )
671
+ end
672
+
673
+ # Sets the cookbook's issues URL, or returns it.
674
+ #
675
+ # === Parameters
676
+ # issues_url<String>:: The issues URL
677
+ #
678
+ # === Returns
679
+ # issues_url<String>:: Returns the current issues URL.
680
+ def issues_url(arg = nil)
681
+ set_or_return(
682
+ :issues_url,
683
+ arg,
684
+ :kind_of => [ String ]
685
+ )
686
+ end
687
+
688
+ #
689
+ # Sets the cookbook's privacy flag, or returns it.
690
+ #
691
+ # === Parameters
692
+ # privacy<TrueClass,FalseClass>:: Whether this cookbook is private or not
693
+ #
694
+ # === Returns
695
+ # privacy<TrueClass,FalseClass>:: Whether this cookbook is private or not
696
+ #
697
+ def privacy(arg = nil)
698
+ set_or_return(
699
+ :privacy,
700
+ arg,
701
+ :kind_of => [ TrueClass, FalseClass ]
702
+ )
703
+ end
704
+
705
+ # Validates that the Ohai::VERSION of the running chef-client matches one of the
706
+ # configured ohai_version statements in this cookbooks metadata.
707
+ #
708
+ # @raises [Chef::Exceptions::CookbookOhaiVersionMismatch] if the cookbook fails validation
709
+ def validate_ohai_version!
710
+ unless gem_dep_matches?("ohai", Gem::Version.new(Ohai::VERSION), *ohai_versions)
711
+ raise Exceptions::CookbookOhaiVersionMismatch.new(Ohai::VERSION, name, version, *ohai_versions)
712
+ end
713
+ end
714
+
715
+ # Validates that the Chef::VERSION of the running chef-client matches one of the
716
+ # configured chef_version statements in this cookbooks metadata.
717
+ #
718
+ # @raises [Chef::Exceptions::CookbookChefVersionMismatch] if the cookbook fails validation
719
+ def validate_chef_version!
720
+ unless gem_dep_matches?("chef", Gem::Version.new(Chef::VERSION), *chef_versions)
721
+ raise Exceptions::CookbookChefVersionMismatch.new(Chef::VERSION, name, version, *chef_versions)
722
+ end
723
+ end
724
+
725
+ def method_missing(method, *args, &block)
726
+ if block_given?
727
+ super
728
+ else
729
+ Chef::Log.debug "ignoring method #{method} on cookbook with name #{name}, possible typo or future metadata?"
730
+ end
731
+ end
732
+
733
+ private
734
+
735
+ # Helper to match a gem style version (ohai_version/chef_version) against a set of
736
+ # Gem::Dependency version constraints. If none are present, it always matches. if
737
+ # multiple are present, one must match. Returns false if none matches.
738
+ #
739
+ # @param what [String] the name of the constraint (e.g. 'chef' or 'ohai')
740
+ # @param version [String] the version to compare against the constraints
741
+ # @param deps [Array<Gem::Dependency>] Multiple Gem-style version constraints
742
+ # @return [Boolean] true if no constraints or a match, false if no match
743
+ def gem_dep_matches?(what, version, *deps)
744
+ # always match if we have no chef_version at all
745
+ return true unless deps.length > 0
746
+ # match if we match any of the chef_version lines
747
+ deps.any? { |dep| dep.match?(what, version) }
748
+ end
749
+
750
+ def run_validation
751
+ if name.nil?
752
+ @errors = ["The `name' attribute is required in cookbook metadata"]
753
+ end
754
+ end
755
+
756
+ def new_args_format(caller_name, dep_name, version_constraints)
757
+ if version_constraints.empty?
758
+ ">= 0.0.0"
759
+ elsif version_constraints.size == 1
760
+ version_constraints.first
761
+ else
762
+ msg = <<-OBSOLETED
763
+ The dependency specification syntax you are using is no longer valid. You may not
764
+ specify more than one version constraint for a particular cookbook.
765
+ Consult https://docs.chef.io/config_rb_metadata.html for the updated syntax.
766
+
767
+ Called by: #{caller_name} '#{dep_name}', #{version_constraints.map { |vc| vc.inspect }.join(", ")}
768
+ Called from:
769
+ #{caller[0...5].map { |line| " " + line }.join("\n")}
770
+ OBSOLETED
771
+ raise Exceptions::ObsoleteDependencySyntax, msg
772
+ end
773
+ end
774
+
775
+ def validate_version_constraint(caller_name, dep_name, constraint_str)
776
+ Chef::VersionConstraint::Platform.new(constraint_str)
777
+ rescue Chef::Exceptions::InvalidVersionConstraint => e
778
+ Log.debug(e)
779
+
780
+ msg = <<-INVALID
781
+ The version constraint syntax you are using is not valid. If you recently
782
+ upgraded to Chef 0.10.0, be aware that you no may longer use "<<" and ">>" for
783
+ 'less than' and 'greater than'; use '<' and '>' instead.
784
+ Consult https://docs.chef.io/config_rb_metadata.html for more information.
785
+
786
+ Called by: #{caller_name} '#{dep_name}', '#{constraint_str}'
787
+ Called from:
788
+ #{caller[0...5].map { |line| " " + line }.join("\n")}
789
+ INVALID
790
+ raise Exceptions::InvalidVersionConstraint, msg
791
+ end
792
+
793
+ # Verify that the given array is an array of strings
794
+ #
795
+ # Raise an exception if the members of the array are not Strings
796
+ #
797
+ # === Parameters
798
+ # arry<Array>:: An array to be validated
799
+ def validate_string_array(arry)
800
+ if arry.kind_of?(Array)
801
+ arry.each do |choice|
802
+ validate( { :choice => choice }, { :choice => { :kind_of => String } } )
803
+ end
804
+ end
805
+ end
806
+
807
+ # Validate the choice of the options hash
808
+ #
809
+ # Raise an exception if the members of the array do not match the defaults
810
+ # === Parameters
811
+ # opts<Hash>:: The options hash
812
+ def validate_choice_array(opts)
813
+ if opts[:choice].kind_of?(Array)
814
+ case opts[:type]
815
+ when "string"
816
+ validator = [ String ]
817
+ when "array"
818
+ validator = [ Array ]
819
+ when "hash"
820
+ validator = [ Hash ]
821
+ when "symbol"
822
+ validator = [ Symbol ]
823
+ when "boolean"
824
+ validator = [ TrueClass, FalseClass ]
825
+ when "numeric"
826
+ validator = [ Numeric ]
827
+ end
828
+
829
+ opts[:choice].each do |choice|
830
+ validate( { :choice => choice }, { :choice => { :kind_of => validator } } )
831
+ end
832
+ end
833
+ end
834
+
835
+ # For backwards compatibility, remap Boolean values to String
836
+ # true is mapped to "required"
837
+ # false is mapped to "optional"
838
+ #
839
+ # === Parameters
840
+ # required_attr<String><Boolean>:: The value of options[:required]
841
+ #
842
+ # === Returns
843
+ # required_attr<String>:: "required", "recommended", or "optional"
844
+ def remap_required_attribute(value)
845
+ case value
846
+ when true
847
+ value = "required"
848
+ when false
849
+ value = "optional"
850
+ end
851
+ value
852
+ end
853
+
854
+ def validate_calculated_default_rule(options)
855
+ calculated_conflict = ((options[:default].is_a?(Array) && !options[:default].empty?) ||
856
+ (options[:default].is_a?(String) && !options[:default] != "")) &&
857
+ options[:calculated] == true
858
+ raise ArgumentError, "Default cannot be specified if calculated is true!" if calculated_conflict
859
+ end
860
+
861
+ def validate_choice_default_rule(options)
862
+ return if !options[:choice].is_a?(Array) || options[:choice].empty?
863
+
864
+ if options[:default].is_a?(String) && options[:default] != ""
865
+ raise ArgumentError, "Default must be one of your choice values!" if options[:choice].index(options[:default]).nil?
866
+ end
867
+
868
+ if options[:default].is_a?(Array) && !options[:default].empty?
869
+ options[:default].each do |val|
870
+ raise ArgumentError, "Default values must be a subset of your choice values!" if options[:choice].index(val).nil?
871
+ end
872
+ end
873
+ end
874
+
875
+ # This method translates version constraint strings from
876
+ # cookbooks with the old format.
877
+ #
878
+ # Before we began respecting version constraints, we allowed
879
+ # multiple constraints to be placed on cookbooks, as well as the
880
+ # << and >> operators, which are now just < and >. For
881
+ # specifications with more than one constraint, we return an
882
+ # empty array (otherwise, we're silently abiding only part of
883
+ # the contract they have specified to us). If there is only one
884
+ # constraint, we are replacing the old << and >> with the new <
885
+ # and >.
886
+ def handle_deprecated_constraints(specification)
887
+ specification.inject(Mash.new) do |acc, (cb, constraints)|
888
+ constraints = Array(constraints)
889
+ acc[cb] = (constraints.empty? || constraints.size > 1) ? [] : constraints.first.gsub(/>>/, ">").gsub(/<</, "<")
890
+ acc
891
+ end
892
+ end
893
+
894
+ end
895
+
896
+ #== Chef::Cookbook::MinimalMetadata
897
+ # MinimalMetadata is a duck type of Cookbook::Metadata, used
898
+ # internally by Chef Server when determining the optimal set of
899
+ # cookbooks for a node.
900
+ #
901
+ # MinimalMetadata objects typically contain only enough information
902
+ # to solve the cookbook collection for a run list, but not enough to
903
+ # generate the proper response
904
+ class MinimalMetadata < Metadata
905
+ def initialize(name, params)
906
+ @name = name
907
+ from_hash(params)
908
+ end
909
+ end
910
+
911
+ end
912
+ end