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,1548 +1,1548 @@
1
- #
2
- # Author:: John Keiser (<jkeiser@chef.io>)
3
- # Copyright:: Copyright 2013-2016, Chef Software, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
-
18
- require "support/shared/integration/integration_helper"
19
- require "chef/knife/upload"
20
- require "chef/knife/diff"
21
- require "chef/knife/raw"
22
- require "chef/json_compat"
23
-
24
- describe "knife upload", :workstation do
25
- include IntegrationSupport
26
- include KnifeSupport
27
-
28
- context "without versioned cookbooks" do
29
-
30
- when_the_chef_server "has one of each thing" do
31
-
32
- before do
33
- client "x", {}
34
- cookbook "x", "1.0.0"
35
- data_bag "x", { "y" => {} }
36
- environment "x", {}
37
- node "x", {}
38
- role "x", {}
39
- user "x", {}
40
- end
41
-
42
- when_the_repository "has only top-level directories" do
43
- before do
44
- directory "clients"
45
- directory "cookbooks"
46
- directory "data_bags"
47
- directory "environments"
48
- directory "nodes"
49
- directory "roles"
50
- directory "users"
51
- end
52
-
53
- it "knife upload does nothing" do
54
- knife("upload /").should_succeed ""
55
- knife("diff --name-status /").should_succeed <<EOM
56
- D\t/clients/chef-validator.json
57
- D\t/clients/chef-webui.json
58
- D\t/clients/x.json
59
- D\t/cookbooks/x
60
- D\t/data_bags/x
61
- D\t/environments/_default.json
62
- D\t/environments/x.json
63
- D\t/nodes/x.json
64
- D\t/roles/x.json
65
- D\t/users/admin.json
66
- D\t/users/x.json
67
- EOM
68
- end
69
-
70
- it "knife upload --purge deletes everything" do
71
- knife("upload --purge /").should_succeed(<<EOM, :stderr => "WARNING: /environments/_default.json cannot be deleted (default environment cannot be modified).\n")
72
- Deleted extra entry /clients/chef-validator.json (purge is on)
73
- Deleted extra entry /clients/chef-webui.json (purge is on)
74
- Deleted extra entry /clients/x.json (purge is on)
75
- Deleted extra entry /cookbooks/x (purge is on)
76
- Deleted extra entry /data_bags/x (purge is on)
77
- Deleted extra entry /environments/x.json (purge is on)
78
- Deleted extra entry /nodes/x.json (purge is on)
79
- Deleted extra entry /roles/x.json (purge is on)
80
- Deleted extra entry /users/admin.json (purge is on)
81
- Deleted extra entry /users/x.json (purge is on)
82
- EOM
83
- knife("diff --name-status /").should_succeed <<EOM
84
- D\t/environments/_default.json
85
- EOM
86
- end
87
- end
88
-
89
- when_the_repository "has an identical copy of each thing" do
90
-
91
- before do
92
- file "clients/chef-validator.json", { "validator" => true, "public_key" => ChefZero::PUBLIC_KEY }
93
- file "clients/chef-webui.json", { "admin" => true, "public_key" => ChefZero::PUBLIC_KEY }
94
- file "clients/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
95
- file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
96
- file "data_bags/x/y.json", {}
97
- file "environments/_default.json", { "description" => "The default Chef environment" }
98
- file "environments/x.json", {}
99
- file "nodes/x.json", { "normal" => { "tags" => [] } }
100
- file "roles/x.json", {}
101
- file "users/admin.json", { "admin" => true, "public_key" => ChefZero::PUBLIC_KEY }
102
- file "users/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
103
- end
104
-
105
- it "knife upload makes no changes" do
106
- knife("upload /cookbooks/x").should_succeed ""
107
- knife("diff --name-status /").should_succeed ""
108
- end
109
-
110
- it "knife upload --purge makes no changes" do
111
- knife("upload --purge /").should_succeed ""
112
- knife("diff --name-status /").should_succeed ""
113
- end
114
-
115
- context "except the role file" do
116
- before do
117
- file "roles/x.json", { "description" => "blarghle" }
118
- end
119
-
120
- it "knife upload changes the role" do
121
- knife("upload /").should_succeed "Updated /roles/x.json\n"
122
- knife("diff --name-status /").should_succeed ""
123
- end
124
- it "knife upload --no-diff does not change the role" do
125
- knife("upload --no-diff /").should_succeed ""
126
- knife("diff --name-status /").should_succeed "M\t/roles/x.json\n"
127
- end
128
- end
129
-
130
- context "except the role file is textually different, but not ACTUALLY different" do
131
- before do
132
- file "roles/x.json", <<EOM
133
- {
134
- "chef_type": "role",
135
- "default_attributes": {
136
- },
137
- "env_run_lists": {
138
- },
139
- "json_class": "Chef::Role",
140
- "name": "x",
141
- "description": "",
142
- "override_attributes": {
143
- },
144
- "run_list": [
145
-
146
- ]
147
- }
148
- EOM
149
- end
150
-
151
- it "knife upload / does not change anything" do
152
- knife("upload /").should_succeed ""
153
- knife("diff --name-status /").should_succeed ""
154
- end
155
- end
156
-
157
- context "the role is in ruby" do
158
- before do
159
- file "roles/x.rb", <<EOM
160
- name "x"
161
- description "blargle"
162
- EOM
163
- end
164
-
165
- it "knife upload changes the role" do
166
- knife("upload /").should_succeed "Updated /roles/x.json\n"
167
- knife("diff --name-status /").should_succeed ""
168
- end
169
-
170
- it "knife upload --no-diff does not change the role" do
171
- knife("upload --no-diff /").should_succeed ""
172
- knife("diff --name-status /").should_succeed "M\t/roles/x.rb\n"
173
- end
174
- end
175
-
176
- context "when cookbook metadata has a self-dependency" do
177
- before do
178
- file "cookbooks/x/metadata.rb", "name 'x'; version '1.0.0'; depends 'x'"
179
- end
180
-
181
- it "should warn", chef: "< 13" do
182
- knife("upload /cookbooks").should_succeed(
183
- stdout: "Updated /cookbooks/x\n",
184
- stderr: "WARN: Ignoring self-dependency in cookbook x, please remove it (in the future this will be fatal).\n"
185
- )
186
- knife("diff --name-status /").should_succeed ""
187
- end
188
- it "should fail in Chef 13", chef: ">= 13" do
189
- knife("upload /cookbooks").should_fail ""
190
- # FIXME: include the error message here
191
- end
192
- end
193
-
194
- context "as well as one extra copy of each thing" do
195
- before do
196
- file "clients/y.json", { "public_key" => ChefZero::PUBLIC_KEY }
197
- file "cookbooks/x/blah.rb", ""
198
- file "cookbooks/y/metadata.rb", cb_metadata("y", "1.0.0")
199
- file "data_bags/x/z.json", {}
200
- file "data_bags/y/zz.json", {}
201
- file "environments/y.json", {}
202
- file "nodes/y.json", {}
203
- file "roles/y.json", {}
204
- file "users/y.json", { "public_key" => ChefZero::PUBLIC_KEY }
205
- end
206
-
207
- it "knife upload adds the new files" do
208
- knife("upload /").should_succeed <<EOM
209
- Created /clients/y.json
210
- Updated /cookbooks/x
211
- Created /cookbooks/y
212
- Created /data_bags/x/z.json
213
- Created /data_bags/y
214
- Created /data_bags/y/zz.json
215
- Created /environments/y.json
216
- Created /nodes/y.json
217
- Created /roles/y.json
218
- Created /users/y.json
219
- EOM
220
- knife("diff /").should_succeed ""
221
- end
222
-
223
- it "knife upload --no-diff adds the new files" do
224
- knife("upload --no-diff /").should_succeed <<EOM
225
- Created /clients/y.json
226
- Updated /cookbooks/x
227
- Created /cookbooks/y
228
- Created /data_bags/x/z.json
229
- Created /data_bags/y
230
- Created /data_bags/y/zz.json
231
- Created /environments/y.json
232
- Created /nodes/y.json
233
- Created /roles/y.json
234
- Created /users/y.json
235
- EOM
236
- knife("diff --name-status /").should_succeed ""
237
- end
238
- end
239
- end
240
-
241
- when_the_repository "is empty" do
242
- it "knife upload does nothing" do
243
- knife("upload /").should_succeed ""
244
- knife("diff --name-status /").should_succeed <<EOM
245
- D\t/clients
246
- D\t/cookbooks
247
- D\t/data_bags
248
- D\t/environments
249
- D\t/nodes
250
- D\t/roles
251
- D\t/users
252
- EOM
253
- end
254
-
255
- it "knife upload --purge deletes nothing" do
256
- knife("upload --purge /").should_fail <<EOM
257
- ERROR: /clients cannot be deleted.
258
- ERROR: /cookbooks cannot be deleted.
259
- ERROR: /data_bags cannot be deleted.
260
- ERROR: /environments cannot be deleted.
261
- ERROR: /nodes cannot be deleted.
262
- ERROR: /roles cannot be deleted.
263
- ERROR: /users cannot be deleted.
264
- EOM
265
- knife("diff --name-status /").should_succeed <<EOM
266
- D\t/clients
267
- D\t/cookbooks
268
- D\t/data_bags
269
- D\t/environments
270
- D\t/nodes
271
- D\t/roles
272
- D\t/users
273
- EOM
274
- end
275
-
276
- context "when current directory is top level" do
277
- before do
278
- cwd "."
279
- end
280
-
281
- it "knife upload with no parameters reports an error" do
282
- knife("upload").should_fail "FATAL: You must specify at least one argument. If you want to upload everything in this directory, run \"knife upload .\"\n", :stdout => /USAGE/
283
- end
284
- end
285
- end
286
- end
287
-
288
- when_the_chef_server "is empty" do
289
- when_the_repository "has a data bag item" do
290
-
291
- before do
292
- file "data_bags/x/y.json", { "foo" => "bar" }
293
- end
294
-
295
- it "knife upload of the data bag uploads only the values in the data bag item and no other" do
296
- knife("upload /data_bags/x/y.json").should_succeed <<EOM
297
- Created /data_bags/x
298
- Created /data_bags/x/y.json
299
- EOM
300
- knife("diff --name-status /data_bags").should_succeed <<EOM
301
- EOM
302
- expect(Chef::JSONCompat.parse(knife("raw /data/x/y").stdout, :create_additions => false).keys.sort).to eq(%w{foo id})
303
- end
304
-
305
- it "knife upload /data_bags/x /data_bags/x/y.json uploads x once" do
306
- knife("upload /data_bags/x /data_bags/x/y.json").should_succeed <<EOM
307
- Created /data_bags/x
308
- Created /data_bags/x/y.json
309
- EOM
310
- end
311
- end
312
-
313
- when_the_repository "has a data bag item with keys chef_type and data_bag" do
314
-
315
- before do
316
- file "data_bags/x/y.json", { "chef_type" => "aaa", "data_bag" => "bbb" }
317
- end
318
-
319
- it "upload preserves chef_type and data_bag" do
320
- knife("upload /data_bags/x/y.json").should_succeed <<EOM
321
- Created /data_bags/x
322
- Created /data_bags/x/y.json
323
- EOM
324
- knife("diff --name-status /data_bags").should_succeed ""
325
- result = Chef::JSONCompat.parse(knife("raw /data/x/y").stdout, :create_additions => false)
326
- expect(result.keys.sort).to eq(%w{chef_type data_bag id})
327
- expect(result["chef_type"]).to eq("aaa")
328
- expect(result["data_bag"]).to eq("bbb")
329
- end
330
- end
331
-
332
- # Test upload of an item when the other end doesn't even have the container
333
- when_the_repository "has two data bag items" do
334
- before do
335
- file "data_bags/x/y.json", {}
336
- file "data_bags/x/z.json", {}
337
- end
338
- it "knife upload of one data bag item itself succeeds" do
339
- knife("upload /data_bags/x/y.json").should_succeed <<EOM
340
- Created /data_bags/x
341
- Created /data_bags/x/y.json
342
- EOM
343
- knife("diff --name-status /data_bags").should_succeed <<EOM
344
- A\t/data_bags/x/z.json
345
- EOM
346
- end
347
- end
348
- end
349
-
350
- when_the_chef_server "has three data bag items" do
351
-
352
- before do
353
- data_bag "x", { "deleted" => {}, "modified" => {}, "unmodified" => {} }
354
- end
355
-
356
- when_the_repository "has a modified, unmodified, added and deleted data bag item" do
357
- before do
358
- file "data_bags/x/added.json", {}
359
- file "data_bags/x/modified.json", { "foo" => "bar" }
360
- file "data_bags/x/unmodified.json", {}
361
- end
362
-
363
- it "knife upload of the modified file succeeds" do
364
- knife("upload /data_bags/x/modified.json").should_succeed <<EOM
365
- Updated /data_bags/x/modified.json
366
- EOM
367
- knife("diff --name-status /data_bags").should_succeed <<EOM
368
- D\t/data_bags/x/deleted.json
369
- A\t/data_bags/x/added.json
370
- EOM
371
- end
372
- it "knife upload of the unmodified file does nothing" do
373
- knife("upload /data_bags/x/unmodified.json").should_succeed ""
374
- knife("diff --name-status /data_bags").should_succeed <<EOM
375
- D\t/data_bags/x/deleted.json
376
- M\t/data_bags/x/modified.json
377
- A\t/data_bags/x/added.json
378
- EOM
379
- end
380
- it "knife upload of the added file succeeds" do
381
- knife("upload /data_bags/x/added.json").should_succeed <<EOM
382
- Created /data_bags/x/added.json
383
- EOM
384
- knife("diff --name-status /data_bags").should_succeed <<EOM
385
- D\t/data_bags/x/deleted.json
386
- M\t/data_bags/x/modified.json
387
- EOM
388
- end
389
- it "knife upload of the deleted file does nothing" do
390
- knife("upload /data_bags/x/deleted.json").should_succeed ""
391
- knife("diff --name-status /data_bags").should_succeed <<EOM
392
- D\t/data_bags/x/deleted.json
393
- M\t/data_bags/x/modified.json
394
- A\t/data_bags/x/added.json
395
- EOM
396
- end
397
- it "knife upload --purge of the deleted file deletes it" do
398
- knife("upload --purge /data_bags/x/deleted.json").should_succeed <<EOM
399
- Deleted extra entry /data_bags/x/deleted.json (purge is on)
400
- EOM
401
- knife("diff --name-status /data_bags").should_succeed <<EOM
402
- M\t/data_bags/x/modified.json
403
- A\t/data_bags/x/added.json
404
- EOM
405
- end
406
- it "knife upload of the entire data bag uploads everything" do
407
- knife("upload /data_bags/x").should_succeed <<EOM
408
- Created /data_bags/x/added.json
409
- Updated /data_bags/x/modified.json
410
- EOM
411
- knife("diff --name-status /data_bags").should_succeed <<EOM
412
- D\t/data_bags/x/deleted.json
413
- EOM
414
- end
415
- it "knife upload --purge of the entire data bag uploads everything" do
416
- knife("upload --purge /data_bags/x").should_succeed <<EOM
417
- Created /data_bags/x/added.json
418
- Updated /data_bags/x/modified.json
419
- Deleted extra entry /data_bags/x/deleted.json (purge is on)
420
- EOM
421
- knife("diff --name-status /data_bags").should_succeed ""
422
- end
423
- context "when cwd is the /data_bags directory" do
424
-
425
- before do
426
- cwd "data_bags"
427
- end
428
-
429
- it "knife upload fails" do
430
- knife("upload").should_fail "FATAL: You must specify at least one argument. If you want to upload everything in this directory, run \"knife upload .\"\n", :stdout => /USAGE/
431
- end
432
-
433
- it "knife upload --purge . uploads everything" do
434
- knife("upload --purge .").should_succeed <<EOM
435
- Created x/added.json
436
- Updated x/modified.json
437
- Deleted extra entry x/deleted.json (purge is on)
438
- EOM
439
- knife("diff --name-status /data_bags").should_succeed ""
440
- end
441
- it "knife upload --purge * uploads everything" do
442
- knife("upload --purge *").should_succeed <<EOM
443
- Created x/added.json
444
- Updated x/modified.json
445
- Deleted extra entry x/deleted.json (purge is on)
446
- EOM
447
- knife("diff --name-status /data_bags").should_succeed ""
448
- end
449
- end
450
- end
451
- end
452
-
453
- # Cookbook upload is a funny thing ... direct cookbook upload works, but
454
- # upload of a file is designed not to work at present. Make sure that is the
455
- # case.
456
- when_the_chef_server "has a cookbook" do
457
-
458
- before do
459
- cookbook "x", "1.0.0", { "z.rb" => "" }
460
- end
461
-
462
- when_the_repository "has a modified, extra and missing file for the cookbook" do
463
- before do
464
- file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0", "#modified")
465
- file "cookbooks/x/y.rb", "hi"
466
- end
467
-
468
- it "knife upload of any individual file fails" do
469
- knife("upload /cookbooks/x/metadata.rb").should_fail "ERROR: /cookbooks/x/metadata.rb cannot be updated.\n"
470
- knife("upload /cookbooks/x/y.rb").should_fail "ERROR: /cookbooks/x cannot have a child created under it.\n"
471
- knife("upload --purge /cookbooks/x/z.rb").should_fail "ERROR: /cookbooks/x/z.rb cannot be deleted.\n"
472
- end
473
- # TODO this is a bit of an inconsistency: if we didn't specify --purge,
474
- # technically we shouldn't have deleted missing files. But ... cookbooks
475
- # are a special case.
476
- it "knife upload of the cookbook itself succeeds" do
477
- knife("upload /cookbooks/x").should_succeed <<EOM
478
- Updated /cookbooks/x
479
- EOM
480
- knife("diff --name-status /cookbooks").should_succeed ""
481
- end
482
- it "knife upload --purge of the cookbook itself succeeds" do
483
- knife("upload /cookbooks/x").should_succeed <<EOM
484
- Updated /cookbooks/x
485
- EOM
486
- knife("diff --name-status /cookbooks").should_succeed ""
487
- end
488
- end
489
- when_the_repository "has a missing file for the cookbook" do
490
-
491
- before do
492
- file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
493
- end
494
-
495
- it "knife upload of the cookbook succeeds" do
496
- knife("upload /cookbooks/x").should_succeed <<EOM
497
- Updated /cookbooks/x
498
- EOM
499
- knife("diff --name-status /cookbooks").should_succeed ""
500
- end
501
- end
502
- when_the_repository "has an extra file for the cookbook" do
503
-
504
- before do
505
- file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
506
- file "cookbooks/x/z.rb", ""
507
- file "cookbooks/x/blah.rb", ""
508
- end
509
-
510
- it "knife upload of the cookbook succeeds" do
511
- knife("upload /cookbooks/x").should_succeed <<EOM
512
- Updated /cookbooks/x
513
- EOM
514
- knife("diff --name-status /cookbooks").should_succeed ""
515
- end
516
- end
517
-
518
- when_the_repository "has a different file in the cookbook" do
519
- before do
520
- file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
521
- end
522
-
523
- it "knife upload --freeze freezes the cookbook" do
524
- knife("upload --freeze /cookbooks/x").should_succeed <<EOM
525
- Updated /cookbooks/x
526
- EOM
527
- # Modify a file and attempt to upload
528
- file "cookbooks/x/metadata.rb", 'name "x"; version "1.0.0"#different'
529
- knife("upload /cookbooks/x").should_fail "ERROR: /cookbooks failed to write: Cookbook x is frozen\n"
530
- end
531
- end
532
- end
533
-
534
- when_the_chef_server "has a frozen cookbook" do
535
- before do
536
- cookbook "frozencook", "1.0.0", {}, :frozen => true
537
- end
538
-
539
- when_the_repository "has an update to said cookbook" do
540
-
541
- before do
542
- file "cookbooks/frozencook/metadata.rb", cb_metadata("frozencook", "1.0.0", "# This is different")
543
- end
544
-
545
- it "knife upload fails to upload the frozen cookbook" do
546
- knife("upload /cookbooks/frozencook").should_fail "ERROR: /cookbooks failed to write: Cookbook frozencook is frozen\n"
547
- end
548
- it "knife upload --force uploads the frozen cookbook" do
549
- knife("upload --force /cookbooks/frozencook").should_succeed <<EOM
550
- Updated /cookbooks/frozencook
551
- EOM
552
- end
553
- end
554
- end
555
-
556
- when_the_repository "has a cookbook" do
557
- before do
558
- file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
559
- file "cookbooks/x/onlyin1.0.0.rb", "old_text"
560
- end
561
-
562
- when_the_chef_server "has a later version for the cookbook" do
563
- before do
564
- cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
565
- cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
566
- end
567
-
568
- it "knife upload /cookbooks/x uploads the local version" do
569
- knife("diff --name-status /cookbooks").should_succeed <<EOM
570
- M\t/cookbooks/x/metadata.rb
571
- D\t/cookbooks/x/onlyin1.0.1.rb
572
- A\t/cookbooks/x/onlyin1.0.0.rb
573
- EOM
574
- knife("upload --purge /cookbooks/x").should_succeed <<EOM
575
- Updated /cookbooks/x
576
- EOM
577
- knife("diff --name-status /cookbooks").should_succeed <<EOM
578
- M\t/cookbooks/x/metadata.rb
579
- D\t/cookbooks/x/onlyin1.0.1.rb
580
- A\t/cookbooks/x/onlyin1.0.0.rb
581
- EOM
582
- end
583
- end
584
-
585
- when_the_chef_server "has an earlier version for the cookbook" do
586
- before do
587
- cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
588
- cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
589
- end
590
-
591
- it "knife upload /cookbooks/x uploads the local version" do
592
- knife("upload --purge /cookbooks/x").should_succeed <<EOM
593
- Updated /cookbooks/x
594
- EOM
595
- knife("diff --name-status /cookbooks").should_succeed ""
596
- end
597
- end
598
-
599
- when_the_chef_server "has a later version for the cookbook, and no current version" do
600
- before do
601
- cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
602
- end
603
-
604
- it "knife upload /cookbooks/x uploads the local version" do
605
- knife("diff --name-status /cookbooks").should_succeed <<EOM
606
- M\t/cookbooks/x/metadata.rb
607
- D\t/cookbooks/x/onlyin1.0.1.rb
608
- A\t/cookbooks/x/onlyin1.0.0.rb
609
- EOM
610
- knife("upload --purge /cookbooks/x").should_succeed <<EOM
611
- Updated /cookbooks/x
612
- EOM
613
- knife("diff --name-status /cookbooks").should_succeed <<EOM
614
- M\t/cookbooks/x/metadata.rb
615
- D\t/cookbooks/x/onlyin1.0.1.rb
616
- A\t/cookbooks/x/onlyin1.0.0.rb
617
- EOM
618
- end
619
- end
620
-
621
- when_the_chef_server "has an earlier version for the cookbook, and no current version" do
622
- before do
623
- cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
624
- end
625
-
626
- it "knife upload /cookbooks/x uploads the new version" do
627
- knife("upload --purge /cookbooks/x").should_succeed <<EOM
628
- Updated /cookbooks/x
629
- EOM
630
- knife("diff --name-status /cookbooks").should_succeed ""
631
- end
632
- end
633
- end
634
-
635
- when_the_chef_server "has an environment" do
636
- before do
637
- environment "x", {}
638
- end
639
-
640
- when_the_repository "has an environment with bad JSON" do
641
- before do
642
- file "environments/x.json", "{"
643
- end
644
-
645
- it "knife upload tries and fails" do
646
- error1 = <<-EOH
647
- WARN: Parse error reading #{path_to('environments/x.json')} as JSON: parse error: premature EOF
648
- {
649
- (right here) ------^
650
-
651
- ERROR: /environments/x.json failed to write: Parse error reading JSON: parse error: premature EOF
652
- {
653
- (right here) ------^
654
- EOH
655
-
656
- warn = <<-EOH
657
- WARN: Parse error reading #{path_to('environments/x.json')} as JSON: parse error: premature EOF
658
- {
659
- (right here) ------^
660
-
661
- EOH
662
- knife("upload /environments/x.json").should_fail(error1)
663
- knife("diff --name-status /environments/x.json").should_succeed("M\t/environments/x.json\n", :stderr => warn)
664
- end
665
- end
666
-
667
- when_the_repository "has the same environment with the wrong name in the file" do
668
- before do
669
- file "environments/x.json", { "name" => "y" }
670
- end
671
- it "knife upload fails" do
672
- knife("upload /environments/x.json").should_fail "ERROR: /environments/x.json failed to write: Name must be 'x' (is 'y')\n"
673
- knife("diff --name-status /environments/x.json").should_succeed "M\t/environments/x.json\n"
674
- end
675
- end
676
-
677
- when_the_repository "has the same environment with no name in the file" do
678
- before do
679
- file "environments/x.json", { "description" => "hi" }
680
- end
681
- it "knife upload succeeds" do
682
- knife("upload /environments/x.json").should_succeed "Updated /environments/x.json\n"
683
- knife("diff --name-status /environments/x.json").should_succeed ""
684
- end
685
- end
686
- end
687
-
688
- when_the_chef_server "is empty" do
689
-
690
- when_the_repository "has an environment with the wrong name in the file" do
691
- before do
692
- file "environments/x.json", { "name" => "y" }
693
- end
694
- it "knife upload fails" do
695
- knife("upload /environments/x.json").should_fail "ERROR: /environments failed to create_child: Error creating 'x.json': Name must be 'x' (is 'y')\n"
696
- knife("diff --name-status /environments/x.json").should_succeed "A\t/environments/x.json\n"
697
- end
698
- end
699
-
700
- when_the_repository "has an environment with no name in the file" do
701
-
702
- before do
703
- file "environments/x.json", { "description" => "hi" }
704
- end
705
- it "knife upload succeeds" do
706
- knife("upload /environments/x.json").should_succeed "Created /environments/x.json\n"
707
- knife("diff --name-status /environments/x.json").should_succeed ""
708
- end
709
- end
710
-
711
- when_the_repository "has a data bag with no id in the file" do
712
- before do
713
- file "data_bags/bag/x.json", { "foo" => "bar" }
714
- end
715
- it "knife upload succeeds" do
716
- knife("upload /data_bags/bag/x.json").should_succeed "Created /data_bags/bag\nCreated /data_bags/bag/x.json\n"
717
- knife("diff --name-status /data_bags/bag/x.json").should_succeed ""
718
- end
719
- end
720
- end
721
- when_the_chef_server "is empty" do
722
- when_the_repository "has a cookbook with an invalid chef_version constraint in it" do
723
- before do
724
- file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0", "\nchef_version '~> 999.0'")
725
- end
726
- it "knife upload succeeds" do
727
- knife("upload /cookbooks/x").should_succeed <<EOM
728
- Created /cookbooks/x
729
- EOM
730
- knife("diff --name-status /cookbooks").should_succeed ""
731
- end
732
- end
733
- end
734
- end # without versioned cookbooks
735
-
736
- with_versioned_cookbooks do
737
- when_the_chef_server "has one of each thing" do
738
-
739
- before do
740
- client "x", {}
741
- cookbook "x", "1.0.0"
742
- data_bag "x", { "y" => {} }
743
- environment "x", {}
744
- node "x", {}
745
- role "x", {}
746
- user "x", {}
747
- end
748
-
749
- when_the_repository "has only top-level directories" do
750
- before do
751
- directory "clients"
752
- directory "cookbooks"
753
- directory "data_bags"
754
- directory "environments"
755
- directory "nodes"
756
- directory "roles"
757
- directory "users"
758
- end
759
-
760
- it "knife upload does nothing" do
761
- knife("upload /").should_succeed ""
762
- knife("diff --name-status /").should_succeed <<EOM
763
- D\t/clients/chef-validator.json
764
- D\t/clients/chef-webui.json
765
- D\t/clients/x.json
766
- D\t/cookbooks/x-1.0.0
767
- D\t/data_bags/x
768
- D\t/environments/_default.json
769
- D\t/environments/x.json
770
- D\t/nodes/x.json
771
- D\t/roles/x.json
772
- D\t/users/admin.json
773
- D\t/users/x.json
774
- EOM
775
- end
776
-
777
- it "knife upload --purge deletes everything" do
778
- knife("upload --purge /").should_succeed(<<EOM, :stderr => "WARNING: /environments/_default.json cannot be deleted (default environment cannot be modified).\n")
779
- Deleted extra entry /clients/chef-validator.json (purge is on)
780
- Deleted extra entry /clients/chef-webui.json (purge is on)
781
- Deleted extra entry /clients/x.json (purge is on)
782
- Deleted extra entry /cookbooks/x-1.0.0 (purge is on)
783
- Deleted extra entry /data_bags/x (purge is on)
784
- Deleted extra entry /environments/x.json (purge is on)
785
- Deleted extra entry /nodes/x.json (purge is on)
786
- Deleted extra entry /roles/x.json (purge is on)
787
- Deleted extra entry /users/admin.json (purge is on)
788
- Deleted extra entry /users/x.json (purge is on)
789
- EOM
790
- knife("diff --name-status /").should_succeed <<EOM
791
- D\t/environments/_default.json
792
- EOM
793
- end
794
- end
795
-
796
- when_the_repository "has an identical copy of each thing" do
797
- before do
798
- file "clients/chef-validator.json", { "validator" => true, "public_key" => ChefZero::PUBLIC_KEY }
799
- file "clients/chef-webui.json", { "admin" => true, "public_key" => ChefZero::PUBLIC_KEY }
800
- file "clients/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
801
- file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0")
802
- file "data_bags/x/y.json", {}
803
- file "environments/_default.json", { "description" => "The default Chef environment" }
804
- file "environments/x.json", {}
805
- file "nodes/x.json", { "normal" => { "tags" => [] } }
806
- file "roles/x.json", {}
807
- file "users/admin.json", { "admin" => true, "public_key" => ChefZero::PUBLIC_KEY }
808
- file "users/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
809
- end
810
-
811
- it "knife upload makes no changes" do
812
- knife("upload /cookbooks/x-1.0.0").should_succeed ""
813
- knife("diff --name-status /").should_succeed ""
814
- end
815
-
816
- it "knife upload --purge makes no changes" do
817
- knife("upload --purge /").should_succeed ""
818
- knife("diff --name-status /").should_succeed ""
819
- end
820
-
821
- context "except the role file" do
822
- before do
823
- file "roles/x.json", { "description" => "blarghle" }
824
- end
825
-
826
- it "knife upload changes the role" do
827
- knife("upload /").should_succeed "Updated /roles/x.json\n"
828
- knife("diff --name-status /").should_succeed ""
829
- end
830
- end
831
-
832
- context "except the role file is textually different, but not ACTUALLY different" do
833
-
834
- before do
835
- file "roles/x.json", <<EOM
836
- {
837
- "chef_type": "role",
838
- "default_attributes": {
839
- },
840
- "env_run_lists": {
841
- },
842
- "json_class": "Chef::Role",
843
- "name": "x",
844
- "description": "",
845
- "override_attributes": {
846
- },
847
- "run_list": [
848
-
849
- ]
850
- }
851
- EOM
852
- end
853
-
854
- it "knife upload / does not change anything" do
855
- knife("upload /").should_succeed ""
856
- knife("diff --name-status /").should_succeed ""
857
- end
858
- end
859
-
860
- context "as well as one extra copy of each thing" do
861
- before do
862
- file "clients/y.json", { "public_key" => ChefZero::PUBLIC_KEY }
863
- file "cookbooks/x-1.0.0/blah.rb", ""
864
- file "cookbooks/x-2.0.0/metadata.rb", cb_metadata("x", "2.0.0")
865
- file "cookbooks/y-1.0.0/metadata.rb", cb_metadata("y", "1.0.0")
866
- file "data_bags/x/z.json", {}
867
- file "data_bags/y/zz.json", {}
868
- file "environments/y.json", {}
869
- file "nodes/y.json", {}
870
- file "roles/y.json", {}
871
- file "users/y.json", { "public_key" => ChefZero::PUBLIC_KEY }
872
- end
873
-
874
- it "knife upload adds the new files" do
875
- knife("upload /").should_succeed <<EOM
876
- Created /clients/y.json
877
- Updated /cookbooks/x-1.0.0
878
- Created /cookbooks/x-2.0.0
879
- Created /cookbooks/y-1.0.0
880
- Created /data_bags/x/z.json
881
- Created /data_bags/y
882
- Created /data_bags/y/zz.json
883
- Created /environments/y.json
884
- Created /nodes/y.json
885
- Created /roles/y.json
886
- Created /users/y.json
887
- EOM
888
- knife("diff --name-status /").should_succeed ""
889
- end
890
- end
891
- end
892
-
893
- when_the_repository "is empty" do
894
- it "knife upload does nothing" do
895
- knife("upload /").should_succeed ""
896
- knife("diff --name-status /").should_succeed <<EOM
897
- D\t/clients
898
- D\t/cookbooks
899
- D\t/data_bags
900
- D\t/environments
901
- D\t/nodes
902
- D\t/roles
903
- D\t/users
904
- EOM
905
- end
906
-
907
- it "knife upload --purge deletes nothing" do
908
- knife("upload --purge /").should_fail <<EOM
909
- ERROR: /clients cannot be deleted.
910
- ERROR: /cookbooks cannot be deleted.
911
- ERROR: /data_bags cannot be deleted.
912
- ERROR: /environments cannot be deleted.
913
- ERROR: /nodes cannot be deleted.
914
- ERROR: /roles cannot be deleted.
915
- ERROR: /users cannot be deleted.
916
- EOM
917
- knife("diff --name-status /").should_succeed <<EOM
918
- D\t/clients
919
- D\t/cookbooks
920
- D\t/data_bags
921
- D\t/environments
922
- D\t/nodes
923
- D\t/roles
924
- D\t/users
925
- EOM
926
- end
927
-
928
- context "when current directory is top level" do
929
- before do
930
- cwd "."
931
- end
932
- it "knife upload with no parameters reports an error" do
933
- knife("upload").should_fail "FATAL: You must specify at least one argument. If you want to upload everything in this directory, run \"knife upload .\"\n", :stdout => /USAGE/
934
- end
935
- end
936
- end
937
- end
938
-
939
- # Test upload of an item when the other end doesn't even have the container
940
- when_the_chef_server "is empty" do
941
- when_the_repository "has two data bag items" do
942
- before do
943
- file "data_bags/x/y.json", {}
944
- file "data_bags/x/z.json", {}
945
- end
946
-
947
- it "knife upload of one data bag item itself succeeds" do
948
- knife("upload /data_bags/x/y.json").should_succeed <<EOM
949
- Created /data_bags/x
950
- Created /data_bags/x/y.json
951
- EOM
952
- knife("diff --name-status /data_bags").should_succeed <<EOM
953
- A\t/data_bags/x/z.json
954
- EOM
955
- end
956
- end
957
- end
958
-
959
- when_the_chef_server "has three data bag items" do
960
- before do
961
- data_bag "x", { "deleted" => {}, "modified" => {}, "unmodified" => {} }
962
- end
963
- when_the_repository "has a modified, unmodified, added and deleted data bag item" do
964
- before do
965
- file "data_bags/x/added.json", {}
966
- file "data_bags/x/modified.json", { "foo" => "bar" }
967
- file "data_bags/x/unmodified.json", {}
968
- end
969
-
970
- it "knife upload of the modified file succeeds" do
971
- knife("upload /data_bags/x/modified.json").should_succeed <<EOM
972
- Updated /data_bags/x/modified.json
973
- EOM
974
- knife("diff --name-status /data_bags").should_succeed <<EOM
975
- D\t/data_bags/x/deleted.json
976
- A\t/data_bags/x/added.json
977
- EOM
978
- end
979
- it "knife upload of the unmodified file does nothing" do
980
- knife("upload /data_bags/x/unmodified.json").should_succeed ""
981
- knife("diff --name-status /data_bags").should_succeed <<EOM
982
- D\t/data_bags/x/deleted.json
983
- M\t/data_bags/x/modified.json
984
- A\t/data_bags/x/added.json
985
- EOM
986
- end
987
- it "knife upload of the added file succeeds" do
988
- knife("upload /data_bags/x/added.json").should_succeed <<EOM
989
- Created /data_bags/x/added.json
990
- EOM
991
- knife("diff --name-status /data_bags").should_succeed <<EOM
992
- D\t/data_bags/x/deleted.json
993
- M\t/data_bags/x/modified.json
994
- EOM
995
- end
996
- it "knife upload of the deleted file does nothing" do
997
- knife("upload /data_bags/x/deleted.json").should_succeed ""
998
- knife("diff --name-status /data_bags").should_succeed <<EOM
999
- D\t/data_bags/x/deleted.json
1000
- M\t/data_bags/x/modified.json
1001
- A\t/data_bags/x/added.json
1002
- EOM
1003
- end
1004
- it "knife upload --purge of the deleted file deletes it" do
1005
- knife("upload --purge /data_bags/x/deleted.json").should_succeed <<EOM
1006
- Deleted extra entry /data_bags/x/deleted.json (purge is on)
1007
- EOM
1008
- knife("diff --name-status /data_bags").should_succeed <<EOM
1009
- M\t/data_bags/x/modified.json
1010
- A\t/data_bags/x/added.json
1011
- EOM
1012
- end
1013
- it "knife upload of the entire data bag uploads everything" do
1014
- knife("upload /data_bags/x").should_succeed <<EOM
1015
- Created /data_bags/x/added.json
1016
- Updated /data_bags/x/modified.json
1017
- EOM
1018
- knife("diff --name-status /data_bags").should_succeed <<EOM
1019
- D\t/data_bags/x/deleted.json
1020
- EOM
1021
- end
1022
- it "knife upload --purge of the entire data bag uploads everything" do
1023
- knife("upload --purge /data_bags/x").should_succeed <<EOM
1024
- Created /data_bags/x/added.json
1025
- Updated /data_bags/x/modified.json
1026
- Deleted extra entry /data_bags/x/deleted.json (purge is on)
1027
- EOM
1028
- knife("diff --name-status /data_bags").should_succeed ""
1029
- end
1030
- context "when cwd is the /data_bags directory" do
1031
- before do
1032
- cwd "data_bags"
1033
- end
1034
- it "knife upload fails" do
1035
- knife("upload").should_fail "FATAL: You must specify at least one argument. If you want to upload everything in this directory, run \"knife upload .\"\n", :stdout => /USAGE/
1036
- end
1037
- it "knife upload --purge . uploads everything" do
1038
- knife("upload --purge .").should_succeed <<EOM
1039
- Created x/added.json
1040
- Updated x/modified.json
1041
- Deleted extra entry x/deleted.json (purge is on)
1042
- EOM
1043
- knife("diff --name-status /data_bags").should_succeed ""
1044
- end
1045
- it "knife upload --purge * uploads everything" do
1046
- knife("upload --purge *").should_succeed <<EOM
1047
- Created x/added.json
1048
- Updated x/modified.json
1049
- Deleted extra entry x/deleted.json (purge is on)
1050
- EOM
1051
- knife("diff --name-status /data_bags").should_succeed ""
1052
- end
1053
- end
1054
- end
1055
- end
1056
-
1057
- # Cookbook upload is a funny thing ... direct cookbook upload works, but
1058
- # upload of a file is designed not to work at present. Make sure that is the
1059
- # case.
1060
- when_the_chef_server "has a cookbook" do
1061
- before do
1062
- cookbook "x", "1.0.0", { "z.rb" => "" }
1063
- end
1064
-
1065
- when_the_repository "has a modified, extra and missing file for the cookbook" do
1066
- before do
1067
- file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0", "#modified")
1068
- file "cookbooks/x-1.0.0/y.rb", "hi"
1069
- end
1070
-
1071
- it "knife upload of any individual file fails" do
1072
- knife("upload /cookbooks/x-1.0.0/metadata.rb").should_fail "ERROR: /cookbooks/x-1.0.0/metadata.rb cannot be updated.\n"
1073
- knife("upload /cookbooks/x-1.0.0/y.rb").should_fail "ERROR: /cookbooks/x-1.0.0 cannot have a child created under it.\n"
1074
- knife("upload --purge /cookbooks/x-1.0.0/z.rb").should_fail "ERROR: /cookbooks/x-1.0.0/z.rb cannot be deleted.\n"
1075
- end
1076
-
1077
- # TODO this is a bit of an inconsistency: if we didn't specify --purge,
1078
- # technically we shouldn't have deleted missing files. But ... cookbooks
1079
- # are a special case.
1080
- it "knife upload of the cookbook itself succeeds" do
1081
- knife("upload /cookbooks/x-1.0.0").should_succeed <<EOM
1082
- Updated /cookbooks/x-1.0.0
1083
- EOM
1084
- knife("diff --name-status /cookbooks").should_succeed ""
1085
- end
1086
-
1087
- it "knife upload --purge of the cookbook itself succeeds" do
1088
- knife("upload /cookbooks/x-1.0.0").should_succeed <<EOM
1089
- Updated /cookbooks/x-1.0.0
1090
- EOM
1091
- knife("diff --name-status /cookbooks").should_succeed ""
1092
- end
1093
- end
1094
-
1095
- when_the_repository "has a missing file for the cookbook" do
1096
- before do
1097
- file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0")
1098
- end
1099
-
1100
- it "knife upload of the cookbook succeeds" do
1101
- knife("upload /cookbooks/x-1.0.0").should_succeed <<EOM
1102
- Updated /cookbooks/x-1.0.0
1103
- EOM
1104
- knife("diff --name-status /cookbooks").should_succeed ""
1105
- end
1106
- end
1107
-
1108
- when_the_repository "has an extra file for the cookbook" do
1109
- before do
1110
- file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0")
1111
- file "cookbooks/x-1.0.0/z.rb", ""
1112
- file "cookbooks/x-1.0.0/blah.rb", ""
1113
- end
1114
-
1115
- it "knife upload of the cookbook succeeds" do
1116
- knife("upload /cookbooks/x-1.0.0").should_succeed <<EOM
1117
- Updated /cookbooks/x-1.0.0
1118
- EOM
1119
- knife("diff --name-status /cookbooks").should_succeed ""
1120
- end
1121
- end
1122
- end
1123
-
1124
- when_the_repository "has a cookbook" do
1125
- before do
1126
- file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0")
1127
- file "cookbooks/x-1.0.0/onlyin1.0.0.rb", "old_text"
1128
- end
1129
-
1130
- when_the_chef_server "has a later version for the cookbook" do
1131
- before do
1132
- cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
1133
- cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
1134
- end
1135
-
1136
- it "knife upload /cookbooks uploads the local version" do
1137
- knife("diff --name-status /cookbooks").should_succeed <<EOM
1138
- M\t/cookbooks/x-1.0.0/onlyin1.0.0.rb
1139
- D\t/cookbooks/x-1.0.1
1140
- EOM
1141
- knife("upload --purge /cookbooks").should_succeed <<EOM
1142
- Updated /cookbooks/x-1.0.0
1143
- Deleted extra entry /cookbooks/x-1.0.1 (purge is on)
1144
- EOM
1145
- knife("diff --name-status /cookbooks").should_succeed ""
1146
- end
1147
- end
1148
-
1149
- when_the_chef_server "has an earlier version for the cookbook" do
1150
- before do
1151
- cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
1152
- cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
1153
- end
1154
- it "knife upload /cookbooks uploads the local version" do
1155
- knife("upload --purge /cookbooks").should_succeed <<EOM
1156
- Updated /cookbooks/x-1.0.0
1157
- Deleted extra entry /cookbooks/x-0.9.9 (purge is on)
1158
- EOM
1159
- knife("diff --name-status /cookbooks").should_succeed ""
1160
- end
1161
- end
1162
-
1163
- when_the_chef_server "has a later version for the cookbook, and no current version" do
1164
- before do
1165
- cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
1166
- end
1167
-
1168
- it "knife upload /cookbooks/x uploads the local version" do
1169
- knife("diff --name-status /cookbooks").should_succeed <<EOM
1170
- D\t/cookbooks/x-1.0.1
1171
- A\t/cookbooks/x-1.0.0
1172
- EOM
1173
- knife("upload --purge /cookbooks").should_succeed <<EOM
1174
- Created /cookbooks/x-1.0.0
1175
- Deleted extra entry /cookbooks/x-1.0.1 (purge is on)
1176
- EOM
1177
- knife("diff --name-status /cookbooks").should_succeed ""
1178
- end
1179
- end
1180
-
1181
- when_the_chef_server "has an earlier version for the cookbook, and no current version" do
1182
- before do
1183
- cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
1184
- end
1185
-
1186
- it "knife upload /cookbooks/x uploads the new version" do
1187
- knife("upload --purge /cookbooks").should_succeed <<EOM
1188
- Created /cookbooks/x-1.0.0
1189
- Deleted extra entry /cookbooks/x-0.9.9 (purge is on)
1190
- EOM
1191
- knife("diff --name-status /cookbooks").should_succeed ""
1192
- end
1193
- end
1194
- end
1195
-
1196
- when_the_chef_server "has an environment" do
1197
- before do
1198
- environment "x", {}
1199
- end
1200
-
1201
- when_the_repository "has the same environment with the wrong name in the file" do
1202
- before do
1203
- file "environments/x.json", { "name" => "y" }
1204
- end
1205
- it "knife upload fails" do
1206
- knife("upload /environments/x.json").should_fail "ERROR: /environments/x.json failed to write: Name must be 'x' (is 'y')\n"
1207
- knife("diff --name-status /environments/x.json").should_succeed "M\t/environments/x.json\n"
1208
- end
1209
- end
1210
-
1211
- when_the_repository "has the same environment with no name in the file" do
1212
- before do
1213
- file "environments/x.json", { "description" => "hi" }
1214
- end
1215
- it "knife upload succeeds" do
1216
- knife("upload /environments/x.json").should_succeed "Updated /environments/x.json\n"
1217
- knife("diff --name-status /environments/x.json").should_succeed ""
1218
- end
1219
- end
1220
- end
1221
-
1222
- when_the_chef_server "is empty" do
1223
-
1224
- when_the_repository "has an environment with the wrong name in the file" do
1225
- before do
1226
- file "environments/x.json", { "name" => "y" }
1227
- end
1228
- it "knife upload fails" do
1229
- knife("upload /environments/x.json").should_fail "ERROR: /environments failed to create_child: Error creating 'x.json': Name must be 'x' (is 'y')\n"
1230
- knife("diff --name-status /environments/x.json").should_succeed "A\t/environments/x.json\n"
1231
- end
1232
- end
1233
-
1234
- when_the_repository "has an environment with no name in the file" do
1235
- before do
1236
- file "environments/x.json", { "description" => "hi" }
1237
- end
1238
- it "knife upload succeeds" do
1239
- knife("upload /environments/x.json").should_succeed "Created /environments/x.json\n"
1240
- knife("diff --name-status /environments/x.json").should_succeed ""
1241
- end
1242
- end
1243
-
1244
- when_the_repository "has a data bag with no id in the file" do
1245
- before do
1246
- file "data_bags/bag/x.json", { "foo" => "bar" }
1247
- end
1248
- it "knife upload succeeds" do
1249
- knife("upload /data_bags/bag/x.json").should_succeed "Created /data_bags/bag\nCreated /data_bags/bag/x.json\n"
1250
- knife("diff --name-status /data_bags/bag/x.json").should_succeed ""
1251
- end
1252
- end
1253
- end
1254
-
1255
- when_the_chef_server "is empty" do
1256
- when_the_repository "has a cookbook with an invalid chef_version constraint in it" do
1257
- before do
1258
- file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0", "\nchef_version '~> 999.0'")
1259
- end
1260
- it "knife upload succeeds" do
1261
- knife("upload /cookbooks/x-1.0.0").should_succeed <<EOM
1262
- Created /cookbooks/x-1.0.0
1263
- EOM
1264
- knife("diff --name-status /cookbooks").should_succeed ""
1265
- end
1266
- end
1267
- end
1268
- end # with versioned cookbooks
1269
-
1270
- when_the_chef_server "has a user" do
1271
- before do
1272
- user "x", {}
1273
- end
1274
-
1275
- when_the_repository "has the same user with json_class in it" do
1276
- before do
1277
- file "users/x.json", { "admin" => true, "json_class" => "Chef::WebUIUser" }
1278
- end
1279
- it "knife upload /users/x.json succeeds" do
1280
- knife("upload /users/x.json").should_succeed "Updated /users/x.json\n"
1281
- end
1282
- end
1283
- end
1284
-
1285
- when_the_chef_server "is in Enterprise mode", :osc_compat => false, :single_org => false do
1286
- before do
1287
- user "foo", {}
1288
- user "bar", {}
1289
- user "foobar", {}
1290
- organization "foo", { "full_name" => "Something" }
1291
- end
1292
-
1293
- before :each do
1294
- Chef::Config.chef_server_url = URI.join(Chef::Config.chef_server_url, "/organizations/foo")
1295
- end
1296
-
1297
- context "and has nothing but a single group named blah" do
1298
- group "blah", {}
1299
-
1300
- when_the_repository "has at least one of each thing" do
1301
-
1302
- before do
1303
- # TODO We have to upload acls for an existing group due to a lack of
1304
- # dependency detection during upload. Fix that!
1305
- file "acls/groups/blah.json", {}
1306
- file "clients/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
1307
- file "containers/x.json", {}
1308
- file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
1309
- file "cookbook_artifacts/x-1x1/metadata.rb", cb_metadata("x", "1.0.0")
1310
- file "data_bags/x/y.json", {}
1311
- file "environments/x.json", {}
1312
- file "groups/x.json", {}
1313
- file "invitations.json", [ "foo" ]
1314
- file "members.json", [ "bar" ]
1315
- file "org.json", { "full_name" => "wootles" }
1316
- file "nodes/x.json", { "normal" => { "tags" => [] } }
1317
- file "policies/x-1.0.0.json", {}
1318
- file "policies/blah-1.0.0.json", {}
1319
- file "policy_groups/x.json", { "policies" => { "x" => { "revision_id" => "1.0.0" }, "blah" => { "revision_id" => "1.0.0" } } }
1320
- file "roles/x.json", {}
1321
- end
1322
-
1323
- it "knife upload / uploads everything" do
1324
- knife("upload /").should_succeed <<EOM
1325
- Updated /acls/groups/blah.json
1326
- Created /clients/x.json
1327
- Created /containers/x.json
1328
- Created /cookbook_artifacts/x-1x1
1329
- Created /cookbooks/x
1330
- Created /data_bags/x
1331
- Created /data_bags/x/y.json
1332
- Created /environments/x.json
1333
- Created /groups/x.json
1334
- Updated /invitations.json
1335
- Updated /members.json
1336
- Created /nodes/x.json
1337
- Updated /org.json
1338
- Created /policies/blah-1.0.0.json
1339
- Created /policies/x-1.0.0.json
1340
- Created /policy_groups/x.json
1341
- Created /roles/x.json
1342
- EOM
1343
- expect(api.get("association_requests").map { |a| a["username"] }).to eq([ "foo" ])
1344
- expect(api.get("users").map { |a| a["user"]["username"] }).to eq([ "bar" ])
1345
- knife("diff --name-status --diff-filter=AMT /").should_succeed ""
1346
- end
1347
-
1348
- context "When the chef server has an identical copy of each thing" do
1349
- before do
1350
- file "invitations.json", [ "foo" ]
1351
- file "members.json", [ "bar" ]
1352
- file "org.json", { "full_name" => "Something" }
1353
-
1354
- # acl_for %w(organizations foo groups blah)
1355
- client "x", {}
1356
- cookbook "x", "1.0.0"
1357
- cookbook_artifact "x", "1x1", "metadata.rb" => cb_metadata("x", "1.0.0")
1358
- container "x", {}
1359
- data_bag "x", { "y" => {} }
1360
- environment "x", {}
1361
- group "x", {}
1362
- org_invite "foo"
1363
- org_member "bar"
1364
- node "x", {}
1365
- policy "x", "1.0.0", {}
1366
- policy "blah", "1.0.0", {}
1367
- policy_group "x", {
1368
- "policies" => {
1369
- "x" => { "revision_id" => "1.0.0" },
1370
- "blah" => { "revision_id" => "1.0.0" },
1371
- },
1372
- }
1373
- role "x", {}
1374
- end
1375
-
1376
- it "knife upload makes no changes" do
1377
- knife("upload /").should_succeed <<EOM
1378
- Updated /acls/groups/blah.json
1379
- EOM
1380
- end
1381
- end
1382
-
1383
- context "When the chef server has a slightly different copy of the policy revision" do
1384
- before do
1385
- policy "x", "1.0.0", { "run_list" => [ "blah" ] }
1386
- end
1387
-
1388
- it "should fail because policies are not updateable" do
1389
- knife("upload /policies/x-1.0.0.json").should_fail <<EOM
1390
- ERROR: /policies/x-1.0.0.json cannot be updated: policy revisions are immutable once uploaded. If you want to change the policy, create a new revision with your changes.
1391
- EOM
1392
- end
1393
- end
1394
-
1395
- context "When the chef server has a slightly different copy of the cookbook artifact" do
1396
- before do
1397
- cookbook_artifact "x", "1x1", { "recipes" => { "default.rb" => "" } }
1398
- end
1399
-
1400
- it "should fail because cookbook_artifacts cannot be updated" do
1401
- knife("upload /cookbook_artifacts/x-1x1").should_fail <<EOM
1402
- ERROR: /cookbook_artifacts/x-1x1 cannot be updated: cookbook artifacts are immutable once uploaded.
1403
- EOM
1404
- end
1405
- end
1406
-
1407
- context "When the chef server has a slightly different copy of each thing (except policy revisions)" do
1408
- before do
1409
- # acl_for %w(organizations foo groups blah)
1410
- client "x", { "validator" => true }
1411
- container "x", {}
1412
- cookbook "x", "1.0.0", { "recipes" => { "default.rb" => "" } }
1413
- cookbook_artifact "x", "1x1", { "metadata.rb" => cb_metadata("x", "1.0.0") }
1414
- data_bag "x", { "y" => { "a" => "b" } }
1415
- environment "x", { "description" => "foo" }
1416
- group "x", { "groups" => [ "admin" ] }
1417
- node "x", { "run_list" => [ "blah" ] }
1418
- policy "x", "1.0.0", {}
1419
- policy "x", "1.0.1", {}
1420
- policy "y", "1.0.0", {}
1421
- policy_group "x", {
1422
- "policies" => {
1423
- "x" => { "revision_id" => "1.0.1" },
1424
- "y" => { "revision_id" => "1.0.0" },
1425
- },
1426
- }
1427
- role "x", { "run_list" => [ "blah" ] }
1428
- end
1429
-
1430
- it "knife upload updates everything" do
1431
- knife("upload /").should_succeed <<EOM
1432
- Updated /acls/groups/blah.json
1433
- Updated /clients/x.json
1434
- Updated /cookbooks/x
1435
- Updated /data_bags/x/y.json
1436
- Updated /environments/x.json
1437
- Updated /groups/x.json
1438
- Updated /invitations.json
1439
- Updated /members.json
1440
- Updated /nodes/x.json
1441
- Updated /org.json
1442
- Created /policies/blah-1.0.0.json
1443
- Updated /policy_groups/x.json
1444
- Updated /roles/x.json
1445
- EOM
1446
- knife("diff --name-status --diff-filter=AMT /").should_succeed ""
1447
- end
1448
- end
1449
- end
1450
-
1451
- when_the_repository "has an org.json that does not change full_name" do
1452
- before do
1453
- file "org.json", { "full_name" => "Something" }
1454
- end
1455
-
1456
- it "knife upload / emits a warning for bar and adds foo and foobar" do
1457
- knife("upload /").should_succeed ""
1458
- expect(api.get("/")["full_name"]).to eq("Something")
1459
- end
1460
- end
1461
-
1462
- when_the_repository "has an org.json that changes full_name" do
1463
- before do
1464
- file "org.json", { "full_name" => "Something Else" }
1465
- end
1466
-
1467
- it "knife upload / emits a warning for bar and adds foo and foobar" do
1468
- knife("upload /").should_succeed "Updated /org.json\n"
1469
- expect(api.get("/")["full_name"]).to eq("Something Else")
1470
- end
1471
- end
1472
-
1473
- context "and has invited foo and bar is already a member" do
1474
- org_invite "foo"
1475
- org_member "bar"
1476
-
1477
- when_the_repository "wants to invite foo, bar and foobar" do
1478
- before do
1479
- file "invitations.json", %w{foo bar foobar}
1480
- end
1481
-
1482
- it "knife upload / emits a warning for bar and invites foobar" do
1483
- knife("upload /").should_succeed "Updated /invitations.json\n", :stderr => "WARN: Could not invite bar to organization foo: User bar is already in organization foo\n"
1484
- expect(api.get("association_requests").map { |a| a["username"] }).to eq(%w{foo foobar})
1485
- expect(api.get("users").map { |a| a["user"]["username"] }).to eq([ "bar" ])
1486
- end
1487
- end
1488
-
1489
- when_the_repository "wants to make foo, bar and foobar members" do
1490
- before do
1491
- file "members.json", %w{foo bar foobar}
1492
- end
1493
-
1494
- it "knife upload / emits a warning for bar and adds foo and foobar" do
1495
- knife("upload /").should_succeed "Updated /members.json\n"
1496
- expect(api.get("association_requests").map { |a| a["username"] }).to eq([ ])
1497
- expect(api.get("users").map { |a| a["user"]["username"] }).to eq(%w{bar foo foobar})
1498
- end
1499
- end
1500
-
1501
- when_the_repository "wants to invite foo and have bar as a member" do
1502
- before do
1503
- file "invitations.json", [ "foo" ]
1504
- file "members.json", [ "bar" ]
1505
- end
1506
-
1507
- it "knife upload / does nothing" do
1508
- knife("upload /").should_succeed ""
1509
- expect(api.get("association_requests").map { |a| a["username"] }).to eq([ "foo" ])
1510
- expect(api.get("users").map { |a| a["user"]["username"] }).to eq([ "bar" ])
1511
- end
1512
- end
1513
- end
1514
-
1515
- context "and has invited bar and foo" do
1516
- org_invite "bar", "foo"
1517
-
1518
- when_the_repository "wants to invite foo and bar (different order)" do
1519
- before do
1520
- file "invitations.json", %w{foo bar}
1521
- end
1522
-
1523
- it "knife upload / does nothing" do
1524
- knife("upload /").should_succeed ""
1525
- expect(api.get("association_requests").map { |a| a["username"] }).to eq(%w{bar foo})
1526
- expect(api.get("users").map { |a| a["user"]["username"] }).to eq([ ])
1527
- end
1528
- end
1529
- end
1530
-
1531
- context "and has already added bar and foo as members of the org" do
1532
- org_member "bar", "foo"
1533
-
1534
- when_the_repository "wants to add foo and bar (different order)" do
1535
- before do
1536
- file "members.json", %w{foo bar}
1537
- end
1538
-
1539
- it "knife upload / does nothing" do
1540
- knife("upload /").should_succeed ""
1541
- expect(api.get("association_requests").map { |a| a["username"] }).to eq([ ])
1542
- expect(api.get("users").map { |a| a["user"]["username"] }).to eq(%w{bar foo})
1543
- end
1544
- end
1545
- end
1546
- end
1547
- end
1548
- end
1
+ #
2
+ # Author:: John Keiser (<jkeiser@chef.io>)
3
+ # Copyright:: Copyright 2013-2016, Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ require "support/shared/integration/integration_helper"
19
+ require "chef/knife/upload"
20
+ require "chef/knife/diff"
21
+ require "chef/knife/raw"
22
+ require "chef/json_compat"
23
+
24
+ describe "knife upload", :workstation do
25
+ include IntegrationSupport
26
+ include KnifeSupport
27
+
28
+ context "without versioned cookbooks" do
29
+
30
+ when_the_chef_server "has one of each thing" do
31
+
32
+ before do
33
+ client "x", {}
34
+ cookbook "x", "1.0.0"
35
+ data_bag "x", { "y" => {} }
36
+ environment "x", {}
37
+ node "x", {}
38
+ role "x", {}
39
+ user "x", {}
40
+ end
41
+
42
+ when_the_repository "has only top-level directories" do
43
+ before do
44
+ directory "clients"
45
+ directory "cookbooks"
46
+ directory "data_bags"
47
+ directory "environments"
48
+ directory "nodes"
49
+ directory "roles"
50
+ directory "users"
51
+ end
52
+
53
+ it "knife upload does nothing" do
54
+ knife("upload /").should_succeed ""
55
+ knife("diff --name-status /").should_succeed <<EOM
56
+ D\t/clients/chef-validator.json
57
+ D\t/clients/chef-webui.json
58
+ D\t/clients/x.json
59
+ D\t/cookbooks/x
60
+ D\t/data_bags/x
61
+ D\t/environments/_default.json
62
+ D\t/environments/x.json
63
+ D\t/nodes/x.json
64
+ D\t/roles/x.json
65
+ D\t/users/admin.json
66
+ D\t/users/x.json
67
+ EOM
68
+ end
69
+
70
+ it "knife upload --purge deletes everything" do
71
+ knife("upload --purge /").should_succeed(<<EOM, :stderr => "WARNING: /environments/_default.json cannot be deleted (default environment cannot be modified).\n")
72
+ Deleted extra entry /clients/chef-validator.json (purge is on)
73
+ Deleted extra entry /clients/chef-webui.json (purge is on)
74
+ Deleted extra entry /clients/x.json (purge is on)
75
+ Deleted extra entry /cookbooks/x (purge is on)
76
+ Deleted extra entry /data_bags/x (purge is on)
77
+ Deleted extra entry /environments/x.json (purge is on)
78
+ Deleted extra entry /nodes/x.json (purge is on)
79
+ Deleted extra entry /roles/x.json (purge is on)
80
+ Deleted extra entry /users/admin.json (purge is on)
81
+ Deleted extra entry /users/x.json (purge is on)
82
+ EOM
83
+ knife("diff --name-status /").should_succeed <<EOM
84
+ D\t/environments/_default.json
85
+ EOM
86
+ end
87
+ end
88
+
89
+ when_the_repository "has an identical copy of each thing" do
90
+
91
+ before do
92
+ file "clients/chef-validator.json", { "validator" => true, "public_key" => ChefZero::PUBLIC_KEY }
93
+ file "clients/chef-webui.json", { "admin" => true, "public_key" => ChefZero::PUBLIC_KEY }
94
+ file "clients/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
95
+ file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
96
+ file "data_bags/x/y.json", {}
97
+ file "environments/_default.json", { "description" => "The default Chef environment" }
98
+ file "environments/x.json", {}
99
+ file "nodes/x.json", { "normal" => { "tags" => [] } }
100
+ file "roles/x.json", {}
101
+ file "users/admin.json", { "admin" => true, "public_key" => ChefZero::PUBLIC_KEY }
102
+ file "users/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
103
+ end
104
+
105
+ it "knife upload makes no changes" do
106
+ knife("upload /cookbooks/x").should_succeed ""
107
+ knife("diff --name-status /").should_succeed ""
108
+ end
109
+
110
+ it "knife upload --purge makes no changes" do
111
+ knife("upload --purge /").should_succeed ""
112
+ knife("diff --name-status /").should_succeed ""
113
+ end
114
+
115
+ context "except the role file" do
116
+ before do
117
+ file "roles/x.json", { "description" => "blarghle" }
118
+ end
119
+
120
+ it "knife upload changes the role" do
121
+ knife("upload /").should_succeed "Updated /roles/x.json\n"
122
+ knife("diff --name-status /").should_succeed ""
123
+ end
124
+ it "knife upload --no-diff does not change the role" do
125
+ knife("upload --no-diff /").should_succeed ""
126
+ knife("diff --name-status /").should_succeed "M\t/roles/x.json\n"
127
+ end
128
+ end
129
+
130
+ context "except the role file is textually different, but not ACTUALLY different" do
131
+ before do
132
+ file "roles/x.json", <<EOM
133
+ {
134
+ "chef_type": "role",
135
+ "default_attributes": {
136
+ },
137
+ "env_run_lists": {
138
+ },
139
+ "json_class": "Chef::Role",
140
+ "name": "x",
141
+ "description": "",
142
+ "override_attributes": {
143
+ },
144
+ "run_list": [
145
+
146
+ ]
147
+ }
148
+ EOM
149
+ end
150
+
151
+ it "knife upload / does not change anything" do
152
+ knife("upload /").should_succeed ""
153
+ knife("diff --name-status /").should_succeed ""
154
+ end
155
+ end
156
+
157
+ context "the role is in ruby" do
158
+ before do
159
+ file "roles/x.rb", <<EOM
160
+ name "x"
161
+ description "blargle"
162
+ EOM
163
+ end
164
+
165
+ it "knife upload changes the role" do
166
+ knife("upload /").should_succeed "Updated /roles/x.json\n"
167
+ knife("diff --name-status /").should_succeed ""
168
+ end
169
+
170
+ it "knife upload --no-diff does not change the role" do
171
+ knife("upload --no-diff /").should_succeed ""
172
+ knife("diff --name-status /").should_succeed "M\t/roles/x.rb\n"
173
+ end
174
+ end
175
+
176
+ context "when cookbook metadata has a self-dependency" do
177
+ before do
178
+ file "cookbooks/x/metadata.rb", "name 'x'; version '1.0.0'; depends 'x'"
179
+ end
180
+
181
+ it "should warn", chef: "< 13" do
182
+ knife("upload /cookbooks").should_succeed(
183
+ stdout: "Updated /cookbooks/x\n",
184
+ stderr: "WARN: Ignoring self-dependency in cookbook x, please remove it (in the future this will be fatal).\n"
185
+ )
186
+ knife("diff --name-status /").should_succeed ""
187
+ end
188
+ it "should fail in Chef 13", chef: ">= 13" do
189
+ knife("upload /cookbooks").should_fail ""
190
+ # FIXME: include the error message here
191
+ end
192
+ end
193
+
194
+ context "as well as one extra copy of each thing" do
195
+ before do
196
+ file "clients/y.json", { "public_key" => ChefZero::PUBLIC_KEY }
197
+ file "cookbooks/x/blah.rb", ""
198
+ file "cookbooks/y/metadata.rb", cb_metadata("y", "1.0.0")
199
+ file "data_bags/x/z.json", {}
200
+ file "data_bags/y/zz.json", {}
201
+ file "environments/y.json", {}
202
+ file "nodes/y.json", {}
203
+ file "roles/y.json", {}
204
+ file "users/y.json", { "public_key" => ChefZero::PUBLIC_KEY }
205
+ end
206
+
207
+ it "knife upload adds the new files" do
208
+ knife("upload /").should_succeed <<EOM
209
+ Created /clients/y.json
210
+ Updated /cookbooks/x
211
+ Created /cookbooks/y
212
+ Created /data_bags/x/z.json
213
+ Created /data_bags/y
214
+ Created /data_bags/y/zz.json
215
+ Created /environments/y.json
216
+ Created /nodes/y.json
217
+ Created /roles/y.json
218
+ Created /users/y.json
219
+ EOM
220
+ knife("diff /").should_succeed ""
221
+ end
222
+
223
+ it "knife upload --no-diff adds the new files" do
224
+ knife("upload --no-diff /").should_succeed <<EOM
225
+ Created /clients/y.json
226
+ Updated /cookbooks/x
227
+ Created /cookbooks/y
228
+ Created /data_bags/x/z.json
229
+ Created /data_bags/y
230
+ Created /data_bags/y/zz.json
231
+ Created /environments/y.json
232
+ Created /nodes/y.json
233
+ Created /roles/y.json
234
+ Created /users/y.json
235
+ EOM
236
+ knife("diff --name-status /").should_succeed ""
237
+ end
238
+ end
239
+ end
240
+
241
+ when_the_repository "is empty" do
242
+ it "knife upload does nothing" do
243
+ knife("upload /").should_succeed ""
244
+ knife("diff --name-status /").should_succeed <<EOM
245
+ D\t/clients
246
+ D\t/cookbooks
247
+ D\t/data_bags
248
+ D\t/environments
249
+ D\t/nodes
250
+ D\t/roles
251
+ D\t/users
252
+ EOM
253
+ end
254
+
255
+ it "knife upload --purge deletes nothing" do
256
+ knife("upload --purge /").should_fail <<EOM
257
+ ERROR: /clients cannot be deleted.
258
+ ERROR: /cookbooks cannot be deleted.
259
+ ERROR: /data_bags cannot be deleted.
260
+ ERROR: /environments cannot be deleted.
261
+ ERROR: /nodes cannot be deleted.
262
+ ERROR: /roles cannot be deleted.
263
+ ERROR: /users cannot be deleted.
264
+ EOM
265
+ knife("diff --name-status /").should_succeed <<EOM
266
+ D\t/clients
267
+ D\t/cookbooks
268
+ D\t/data_bags
269
+ D\t/environments
270
+ D\t/nodes
271
+ D\t/roles
272
+ D\t/users
273
+ EOM
274
+ end
275
+
276
+ context "when current directory is top level" do
277
+ before do
278
+ cwd "."
279
+ end
280
+
281
+ it "knife upload with no parameters reports an error" do
282
+ knife("upload").should_fail "FATAL: You must specify at least one argument. If you want to upload everything in this directory, run \"knife upload .\"\n", :stdout => /USAGE/
283
+ end
284
+ end
285
+ end
286
+ end
287
+
288
+ when_the_chef_server "is empty" do
289
+ when_the_repository "has a data bag item" do
290
+
291
+ before do
292
+ file "data_bags/x/y.json", { "foo" => "bar" }
293
+ end
294
+
295
+ it "knife upload of the data bag uploads only the values in the data bag item and no other" do
296
+ knife("upload /data_bags/x/y.json").should_succeed <<EOM
297
+ Created /data_bags/x
298
+ Created /data_bags/x/y.json
299
+ EOM
300
+ knife("diff --name-status /data_bags").should_succeed <<EOM
301
+ EOM
302
+ expect(Chef::JSONCompat.parse(knife("raw /data/x/y").stdout, :create_additions => false).keys.sort).to eq(%w{foo id})
303
+ end
304
+
305
+ it "knife upload /data_bags/x /data_bags/x/y.json uploads x once" do
306
+ knife("upload /data_bags/x /data_bags/x/y.json").should_succeed <<EOM
307
+ Created /data_bags/x
308
+ Created /data_bags/x/y.json
309
+ EOM
310
+ end
311
+ end
312
+
313
+ when_the_repository "has a data bag item with keys chef_type and data_bag" do
314
+
315
+ before do
316
+ file "data_bags/x/y.json", { "chef_type" => "aaa", "data_bag" => "bbb" }
317
+ end
318
+
319
+ it "upload preserves chef_type and data_bag" do
320
+ knife("upload /data_bags/x/y.json").should_succeed <<EOM
321
+ Created /data_bags/x
322
+ Created /data_bags/x/y.json
323
+ EOM
324
+ knife("diff --name-status /data_bags").should_succeed ""
325
+ result = Chef::JSONCompat.parse(knife("raw /data/x/y").stdout, :create_additions => false)
326
+ expect(result.keys.sort).to eq(%w{chef_type data_bag id})
327
+ expect(result["chef_type"]).to eq("aaa")
328
+ expect(result["data_bag"]).to eq("bbb")
329
+ end
330
+ end
331
+
332
+ # Test upload of an item when the other end doesn't even have the container
333
+ when_the_repository "has two data bag items" do
334
+ before do
335
+ file "data_bags/x/y.json", {}
336
+ file "data_bags/x/z.json", {}
337
+ end
338
+ it "knife upload of one data bag item itself succeeds" do
339
+ knife("upload /data_bags/x/y.json").should_succeed <<EOM
340
+ Created /data_bags/x
341
+ Created /data_bags/x/y.json
342
+ EOM
343
+ knife("diff --name-status /data_bags").should_succeed <<EOM
344
+ A\t/data_bags/x/z.json
345
+ EOM
346
+ end
347
+ end
348
+ end
349
+
350
+ when_the_chef_server "has three data bag items" do
351
+
352
+ before do
353
+ data_bag "x", { "deleted" => {}, "modified" => {}, "unmodified" => {} }
354
+ end
355
+
356
+ when_the_repository "has a modified, unmodified, added and deleted data bag item" do
357
+ before do
358
+ file "data_bags/x/added.json", {}
359
+ file "data_bags/x/modified.json", { "foo" => "bar" }
360
+ file "data_bags/x/unmodified.json", {}
361
+ end
362
+
363
+ it "knife upload of the modified file succeeds" do
364
+ knife("upload /data_bags/x/modified.json").should_succeed <<EOM
365
+ Updated /data_bags/x/modified.json
366
+ EOM
367
+ knife("diff --name-status /data_bags").should_succeed <<EOM
368
+ D\t/data_bags/x/deleted.json
369
+ A\t/data_bags/x/added.json
370
+ EOM
371
+ end
372
+ it "knife upload of the unmodified file does nothing" do
373
+ knife("upload /data_bags/x/unmodified.json").should_succeed ""
374
+ knife("diff --name-status /data_bags").should_succeed <<EOM
375
+ D\t/data_bags/x/deleted.json
376
+ M\t/data_bags/x/modified.json
377
+ A\t/data_bags/x/added.json
378
+ EOM
379
+ end
380
+ it "knife upload of the added file succeeds" do
381
+ knife("upload /data_bags/x/added.json").should_succeed <<EOM
382
+ Created /data_bags/x/added.json
383
+ EOM
384
+ knife("diff --name-status /data_bags").should_succeed <<EOM
385
+ D\t/data_bags/x/deleted.json
386
+ M\t/data_bags/x/modified.json
387
+ EOM
388
+ end
389
+ it "knife upload of the deleted file does nothing" do
390
+ knife("upload /data_bags/x/deleted.json").should_succeed ""
391
+ knife("diff --name-status /data_bags").should_succeed <<EOM
392
+ D\t/data_bags/x/deleted.json
393
+ M\t/data_bags/x/modified.json
394
+ A\t/data_bags/x/added.json
395
+ EOM
396
+ end
397
+ it "knife upload --purge of the deleted file deletes it" do
398
+ knife("upload --purge /data_bags/x/deleted.json").should_succeed <<EOM
399
+ Deleted extra entry /data_bags/x/deleted.json (purge is on)
400
+ EOM
401
+ knife("diff --name-status /data_bags").should_succeed <<EOM
402
+ M\t/data_bags/x/modified.json
403
+ A\t/data_bags/x/added.json
404
+ EOM
405
+ end
406
+ it "knife upload of the entire data bag uploads everything" do
407
+ knife("upload /data_bags/x").should_succeed <<EOM
408
+ Created /data_bags/x/added.json
409
+ Updated /data_bags/x/modified.json
410
+ EOM
411
+ knife("diff --name-status /data_bags").should_succeed <<EOM
412
+ D\t/data_bags/x/deleted.json
413
+ EOM
414
+ end
415
+ it "knife upload --purge of the entire data bag uploads everything" do
416
+ knife("upload --purge /data_bags/x").should_succeed <<EOM
417
+ Created /data_bags/x/added.json
418
+ Updated /data_bags/x/modified.json
419
+ Deleted extra entry /data_bags/x/deleted.json (purge is on)
420
+ EOM
421
+ knife("diff --name-status /data_bags").should_succeed ""
422
+ end
423
+ context "when cwd is the /data_bags directory" do
424
+
425
+ before do
426
+ cwd "data_bags"
427
+ end
428
+
429
+ it "knife upload fails" do
430
+ knife("upload").should_fail "FATAL: You must specify at least one argument. If you want to upload everything in this directory, run \"knife upload .\"\n", :stdout => /USAGE/
431
+ end
432
+
433
+ it "knife upload --purge . uploads everything" do
434
+ knife("upload --purge .").should_succeed <<EOM
435
+ Created x/added.json
436
+ Updated x/modified.json
437
+ Deleted extra entry x/deleted.json (purge is on)
438
+ EOM
439
+ knife("diff --name-status /data_bags").should_succeed ""
440
+ end
441
+ it "knife upload --purge * uploads everything" do
442
+ knife("upload --purge *").should_succeed <<EOM
443
+ Created x/added.json
444
+ Updated x/modified.json
445
+ Deleted extra entry x/deleted.json (purge is on)
446
+ EOM
447
+ knife("diff --name-status /data_bags").should_succeed ""
448
+ end
449
+ end
450
+ end
451
+ end
452
+
453
+ # Cookbook upload is a funny thing ... direct cookbook upload works, but
454
+ # upload of a file is designed not to work at present. Make sure that is the
455
+ # case.
456
+ when_the_chef_server "has a cookbook" do
457
+
458
+ before do
459
+ cookbook "x", "1.0.0", { "z.rb" => "" }
460
+ end
461
+
462
+ when_the_repository "has a modified, extra and missing file for the cookbook" do
463
+ before do
464
+ file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0", "#modified")
465
+ file "cookbooks/x/y.rb", "hi"
466
+ end
467
+
468
+ it "knife upload of any individual file fails" do
469
+ knife("upload /cookbooks/x/metadata.rb").should_fail "ERROR: /cookbooks/x/metadata.rb cannot be updated.\n"
470
+ knife("upload /cookbooks/x/y.rb").should_fail "ERROR: /cookbooks/x cannot have a child created under it.\n"
471
+ knife("upload --purge /cookbooks/x/z.rb").should_fail "ERROR: /cookbooks/x/z.rb cannot be deleted.\n"
472
+ end
473
+ # TODO this is a bit of an inconsistency: if we didn't specify --purge,
474
+ # technically we shouldn't have deleted missing files. But ... cookbooks
475
+ # are a special case.
476
+ it "knife upload of the cookbook itself succeeds" do
477
+ knife("upload /cookbooks/x").should_succeed <<EOM
478
+ Updated /cookbooks/x
479
+ EOM
480
+ knife("diff --name-status /cookbooks").should_succeed ""
481
+ end
482
+ it "knife upload --purge of the cookbook itself succeeds" do
483
+ knife("upload /cookbooks/x").should_succeed <<EOM
484
+ Updated /cookbooks/x
485
+ EOM
486
+ knife("diff --name-status /cookbooks").should_succeed ""
487
+ end
488
+ end
489
+ when_the_repository "has a missing file for the cookbook" do
490
+
491
+ before do
492
+ file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
493
+ end
494
+
495
+ it "knife upload of the cookbook succeeds" do
496
+ knife("upload /cookbooks/x").should_succeed <<EOM
497
+ Updated /cookbooks/x
498
+ EOM
499
+ knife("diff --name-status /cookbooks").should_succeed ""
500
+ end
501
+ end
502
+ when_the_repository "has an extra file for the cookbook" do
503
+
504
+ before do
505
+ file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
506
+ file "cookbooks/x/z.rb", ""
507
+ file "cookbooks/x/blah.rb", ""
508
+ end
509
+
510
+ it "knife upload of the cookbook succeeds" do
511
+ knife("upload /cookbooks/x").should_succeed <<EOM
512
+ Updated /cookbooks/x
513
+ EOM
514
+ knife("diff --name-status /cookbooks").should_succeed ""
515
+ end
516
+ end
517
+
518
+ when_the_repository "has a different file in the cookbook" do
519
+ before do
520
+ file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
521
+ end
522
+
523
+ it "knife upload --freeze freezes the cookbook" do
524
+ knife("upload --freeze /cookbooks/x").should_succeed <<EOM
525
+ Updated /cookbooks/x
526
+ EOM
527
+ # Modify a file and attempt to upload
528
+ file "cookbooks/x/metadata.rb", 'name "x"; version "1.0.0"#different'
529
+ knife("upload /cookbooks/x").should_fail "ERROR: /cookbooks failed to write: Cookbook x is frozen\n"
530
+ end
531
+ end
532
+ end
533
+
534
+ when_the_chef_server "has a frozen cookbook" do
535
+ before do
536
+ cookbook "frozencook", "1.0.0", {}, :frozen => true
537
+ end
538
+
539
+ when_the_repository "has an update to said cookbook" do
540
+
541
+ before do
542
+ file "cookbooks/frozencook/metadata.rb", cb_metadata("frozencook", "1.0.0", "# This is different")
543
+ end
544
+
545
+ it "knife upload fails to upload the frozen cookbook" do
546
+ knife("upload /cookbooks/frozencook").should_fail "ERROR: /cookbooks failed to write: Cookbook frozencook is frozen\n"
547
+ end
548
+ it "knife upload --force uploads the frozen cookbook" do
549
+ knife("upload --force /cookbooks/frozencook").should_succeed <<EOM
550
+ Updated /cookbooks/frozencook
551
+ EOM
552
+ end
553
+ end
554
+ end
555
+
556
+ when_the_repository "has a cookbook" do
557
+ before do
558
+ file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
559
+ file "cookbooks/x/onlyin1.0.0.rb", "old_text"
560
+ end
561
+
562
+ when_the_chef_server "has a later version for the cookbook" do
563
+ before do
564
+ cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
565
+ cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
566
+ end
567
+
568
+ it "knife upload /cookbooks/x uploads the local version" do
569
+ knife("diff --name-status /cookbooks").should_succeed <<EOM
570
+ M\t/cookbooks/x/metadata.rb
571
+ D\t/cookbooks/x/onlyin1.0.1.rb
572
+ A\t/cookbooks/x/onlyin1.0.0.rb
573
+ EOM
574
+ knife("upload --purge /cookbooks/x").should_succeed <<EOM
575
+ Updated /cookbooks/x
576
+ EOM
577
+ knife("diff --name-status /cookbooks").should_succeed <<EOM
578
+ M\t/cookbooks/x/metadata.rb
579
+ D\t/cookbooks/x/onlyin1.0.1.rb
580
+ A\t/cookbooks/x/onlyin1.0.0.rb
581
+ EOM
582
+ end
583
+ end
584
+
585
+ when_the_chef_server "has an earlier version for the cookbook" do
586
+ before do
587
+ cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
588
+ cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
589
+ end
590
+
591
+ it "knife upload /cookbooks/x uploads the local version" do
592
+ knife("upload --purge /cookbooks/x").should_succeed <<EOM
593
+ Updated /cookbooks/x
594
+ EOM
595
+ knife("diff --name-status /cookbooks").should_succeed ""
596
+ end
597
+ end
598
+
599
+ when_the_chef_server "has a later version for the cookbook, and no current version" do
600
+ before do
601
+ cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
602
+ end
603
+
604
+ it "knife upload /cookbooks/x uploads the local version" do
605
+ knife("diff --name-status /cookbooks").should_succeed <<EOM
606
+ M\t/cookbooks/x/metadata.rb
607
+ D\t/cookbooks/x/onlyin1.0.1.rb
608
+ A\t/cookbooks/x/onlyin1.0.0.rb
609
+ EOM
610
+ knife("upload --purge /cookbooks/x").should_succeed <<EOM
611
+ Updated /cookbooks/x
612
+ EOM
613
+ knife("diff --name-status /cookbooks").should_succeed <<EOM
614
+ M\t/cookbooks/x/metadata.rb
615
+ D\t/cookbooks/x/onlyin1.0.1.rb
616
+ A\t/cookbooks/x/onlyin1.0.0.rb
617
+ EOM
618
+ end
619
+ end
620
+
621
+ when_the_chef_server "has an earlier version for the cookbook, and no current version" do
622
+ before do
623
+ cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
624
+ end
625
+
626
+ it "knife upload /cookbooks/x uploads the new version" do
627
+ knife("upload --purge /cookbooks/x").should_succeed <<EOM
628
+ Updated /cookbooks/x
629
+ EOM
630
+ knife("diff --name-status /cookbooks").should_succeed ""
631
+ end
632
+ end
633
+ end
634
+
635
+ when_the_chef_server "has an environment" do
636
+ before do
637
+ environment "x", {}
638
+ end
639
+
640
+ when_the_repository "has an environment with bad JSON" do
641
+ before do
642
+ file "environments/x.json", "{"
643
+ end
644
+
645
+ it "knife upload tries and fails" do
646
+ error1 = <<-EOH
647
+ WARN: Parse error reading #{path_to('environments/x.json')} as JSON: parse error: premature EOF
648
+ {
649
+ (right here) ------^
650
+
651
+ ERROR: /environments/x.json failed to write: Parse error reading JSON: parse error: premature EOF
652
+ {
653
+ (right here) ------^
654
+ EOH
655
+
656
+ warn = <<-EOH
657
+ WARN: Parse error reading #{path_to('environments/x.json')} as JSON: parse error: premature EOF
658
+ {
659
+ (right here) ------^
660
+
661
+ EOH
662
+ knife("upload /environments/x.json").should_fail(error1)
663
+ knife("diff --name-status /environments/x.json").should_succeed("M\t/environments/x.json\n", :stderr => warn)
664
+ end
665
+ end
666
+
667
+ when_the_repository "has the same environment with the wrong name in the file" do
668
+ before do
669
+ file "environments/x.json", { "name" => "y" }
670
+ end
671
+ it "knife upload fails" do
672
+ knife("upload /environments/x.json").should_fail "ERROR: /environments/x.json failed to write: Name must be 'x' (is 'y')\n"
673
+ knife("diff --name-status /environments/x.json").should_succeed "M\t/environments/x.json\n"
674
+ end
675
+ end
676
+
677
+ when_the_repository "has the same environment with no name in the file" do
678
+ before do
679
+ file "environments/x.json", { "description" => "hi" }
680
+ end
681
+ it "knife upload succeeds" do
682
+ knife("upload /environments/x.json").should_succeed "Updated /environments/x.json\n"
683
+ knife("diff --name-status /environments/x.json").should_succeed ""
684
+ end
685
+ end
686
+ end
687
+
688
+ when_the_chef_server "is empty" do
689
+
690
+ when_the_repository "has an environment with the wrong name in the file" do
691
+ before do
692
+ file "environments/x.json", { "name" => "y" }
693
+ end
694
+ it "knife upload fails" do
695
+ knife("upload /environments/x.json").should_fail "ERROR: /environments failed to create_child: Error creating 'x.json': Name must be 'x' (is 'y')\n"
696
+ knife("diff --name-status /environments/x.json").should_succeed "A\t/environments/x.json\n"
697
+ end
698
+ end
699
+
700
+ when_the_repository "has an environment with no name in the file" do
701
+
702
+ before do
703
+ file "environments/x.json", { "description" => "hi" }
704
+ end
705
+ it "knife upload succeeds" do
706
+ knife("upload /environments/x.json").should_succeed "Created /environments/x.json\n"
707
+ knife("diff --name-status /environments/x.json").should_succeed ""
708
+ end
709
+ end
710
+
711
+ when_the_repository "has a data bag with no id in the file" do
712
+ before do
713
+ file "data_bags/bag/x.json", { "foo" => "bar" }
714
+ end
715
+ it "knife upload succeeds" do
716
+ knife("upload /data_bags/bag/x.json").should_succeed "Created /data_bags/bag\nCreated /data_bags/bag/x.json\n"
717
+ knife("diff --name-status /data_bags/bag/x.json").should_succeed ""
718
+ end
719
+ end
720
+ end
721
+ when_the_chef_server "is empty" do
722
+ when_the_repository "has a cookbook with an invalid chef_version constraint in it" do
723
+ before do
724
+ file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0", "\nchef_version '~> 999.0'")
725
+ end
726
+ it "knife upload succeeds" do
727
+ knife("upload /cookbooks/x").should_succeed <<EOM
728
+ Created /cookbooks/x
729
+ EOM
730
+ knife("diff --name-status /cookbooks").should_succeed ""
731
+ end
732
+ end
733
+ end
734
+ end # without versioned cookbooks
735
+
736
+ with_versioned_cookbooks do
737
+ when_the_chef_server "has one of each thing" do
738
+
739
+ before do
740
+ client "x", {}
741
+ cookbook "x", "1.0.0"
742
+ data_bag "x", { "y" => {} }
743
+ environment "x", {}
744
+ node "x", {}
745
+ role "x", {}
746
+ user "x", {}
747
+ end
748
+
749
+ when_the_repository "has only top-level directories" do
750
+ before do
751
+ directory "clients"
752
+ directory "cookbooks"
753
+ directory "data_bags"
754
+ directory "environments"
755
+ directory "nodes"
756
+ directory "roles"
757
+ directory "users"
758
+ end
759
+
760
+ it "knife upload does nothing" do
761
+ knife("upload /").should_succeed ""
762
+ knife("diff --name-status /").should_succeed <<EOM
763
+ D\t/clients/chef-validator.json
764
+ D\t/clients/chef-webui.json
765
+ D\t/clients/x.json
766
+ D\t/cookbooks/x-1.0.0
767
+ D\t/data_bags/x
768
+ D\t/environments/_default.json
769
+ D\t/environments/x.json
770
+ D\t/nodes/x.json
771
+ D\t/roles/x.json
772
+ D\t/users/admin.json
773
+ D\t/users/x.json
774
+ EOM
775
+ end
776
+
777
+ it "knife upload --purge deletes everything" do
778
+ knife("upload --purge /").should_succeed(<<EOM, :stderr => "WARNING: /environments/_default.json cannot be deleted (default environment cannot be modified).\n")
779
+ Deleted extra entry /clients/chef-validator.json (purge is on)
780
+ Deleted extra entry /clients/chef-webui.json (purge is on)
781
+ Deleted extra entry /clients/x.json (purge is on)
782
+ Deleted extra entry /cookbooks/x-1.0.0 (purge is on)
783
+ Deleted extra entry /data_bags/x (purge is on)
784
+ Deleted extra entry /environments/x.json (purge is on)
785
+ Deleted extra entry /nodes/x.json (purge is on)
786
+ Deleted extra entry /roles/x.json (purge is on)
787
+ Deleted extra entry /users/admin.json (purge is on)
788
+ Deleted extra entry /users/x.json (purge is on)
789
+ EOM
790
+ knife("diff --name-status /").should_succeed <<EOM
791
+ D\t/environments/_default.json
792
+ EOM
793
+ end
794
+ end
795
+
796
+ when_the_repository "has an identical copy of each thing" do
797
+ before do
798
+ file "clients/chef-validator.json", { "validator" => true, "public_key" => ChefZero::PUBLIC_KEY }
799
+ file "clients/chef-webui.json", { "admin" => true, "public_key" => ChefZero::PUBLIC_KEY }
800
+ file "clients/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
801
+ file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0")
802
+ file "data_bags/x/y.json", {}
803
+ file "environments/_default.json", { "description" => "The default Chef environment" }
804
+ file "environments/x.json", {}
805
+ file "nodes/x.json", { "normal" => { "tags" => [] } }
806
+ file "roles/x.json", {}
807
+ file "users/admin.json", { "admin" => true, "public_key" => ChefZero::PUBLIC_KEY }
808
+ file "users/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
809
+ end
810
+
811
+ it "knife upload makes no changes" do
812
+ knife("upload /cookbooks/x-1.0.0").should_succeed ""
813
+ knife("diff --name-status /").should_succeed ""
814
+ end
815
+
816
+ it "knife upload --purge makes no changes" do
817
+ knife("upload --purge /").should_succeed ""
818
+ knife("diff --name-status /").should_succeed ""
819
+ end
820
+
821
+ context "except the role file" do
822
+ before do
823
+ file "roles/x.json", { "description" => "blarghle" }
824
+ end
825
+
826
+ it "knife upload changes the role" do
827
+ knife("upload /").should_succeed "Updated /roles/x.json\n"
828
+ knife("diff --name-status /").should_succeed ""
829
+ end
830
+ end
831
+
832
+ context "except the role file is textually different, but not ACTUALLY different" do
833
+
834
+ before do
835
+ file "roles/x.json", <<EOM
836
+ {
837
+ "chef_type": "role",
838
+ "default_attributes": {
839
+ },
840
+ "env_run_lists": {
841
+ },
842
+ "json_class": "Chef::Role",
843
+ "name": "x",
844
+ "description": "",
845
+ "override_attributes": {
846
+ },
847
+ "run_list": [
848
+
849
+ ]
850
+ }
851
+ EOM
852
+ end
853
+
854
+ it "knife upload / does not change anything" do
855
+ knife("upload /").should_succeed ""
856
+ knife("diff --name-status /").should_succeed ""
857
+ end
858
+ end
859
+
860
+ context "as well as one extra copy of each thing" do
861
+ before do
862
+ file "clients/y.json", { "public_key" => ChefZero::PUBLIC_KEY }
863
+ file "cookbooks/x-1.0.0/blah.rb", ""
864
+ file "cookbooks/x-2.0.0/metadata.rb", cb_metadata("x", "2.0.0")
865
+ file "cookbooks/y-1.0.0/metadata.rb", cb_metadata("y", "1.0.0")
866
+ file "data_bags/x/z.json", {}
867
+ file "data_bags/y/zz.json", {}
868
+ file "environments/y.json", {}
869
+ file "nodes/y.json", {}
870
+ file "roles/y.json", {}
871
+ file "users/y.json", { "public_key" => ChefZero::PUBLIC_KEY }
872
+ end
873
+
874
+ it "knife upload adds the new files" do
875
+ knife("upload /").should_succeed <<EOM
876
+ Created /clients/y.json
877
+ Updated /cookbooks/x-1.0.0
878
+ Created /cookbooks/x-2.0.0
879
+ Created /cookbooks/y-1.0.0
880
+ Created /data_bags/x/z.json
881
+ Created /data_bags/y
882
+ Created /data_bags/y/zz.json
883
+ Created /environments/y.json
884
+ Created /nodes/y.json
885
+ Created /roles/y.json
886
+ Created /users/y.json
887
+ EOM
888
+ knife("diff --name-status /").should_succeed ""
889
+ end
890
+ end
891
+ end
892
+
893
+ when_the_repository "is empty" do
894
+ it "knife upload does nothing" do
895
+ knife("upload /").should_succeed ""
896
+ knife("diff --name-status /").should_succeed <<EOM
897
+ D\t/clients
898
+ D\t/cookbooks
899
+ D\t/data_bags
900
+ D\t/environments
901
+ D\t/nodes
902
+ D\t/roles
903
+ D\t/users
904
+ EOM
905
+ end
906
+
907
+ it "knife upload --purge deletes nothing" do
908
+ knife("upload --purge /").should_fail <<EOM
909
+ ERROR: /clients cannot be deleted.
910
+ ERROR: /cookbooks cannot be deleted.
911
+ ERROR: /data_bags cannot be deleted.
912
+ ERROR: /environments cannot be deleted.
913
+ ERROR: /nodes cannot be deleted.
914
+ ERROR: /roles cannot be deleted.
915
+ ERROR: /users cannot be deleted.
916
+ EOM
917
+ knife("diff --name-status /").should_succeed <<EOM
918
+ D\t/clients
919
+ D\t/cookbooks
920
+ D\t/data_bags
921
+ D\t/environments
922
+ D\t/nodes
923
+ D\t/roles
924
+ D\t/users
925
+ EOM
926
+ end
927
+
928
+ context "when current directory is top level" do
929
+ before do
930
+ cwd "."
931
+ end
932
+ it "knife upload with no parameters reports an error" do
933
+ knife("upload").should_fail "FATAL: You must specify at least one argument. If you want to upload everything in this directory, run \"knife upload .\"\n", :stdout => /USAGE/
934
+ end
935
+ end
936
+ end
937
+ end
938
+
939
+ # Test upload of an item when the other end doesn't even have the container
940
+ when_the_chef_server "is empty" do
941
+ when_the_repository "has two data bag items" do
942
+ before do
943
+ file "data_bags/x/y.json", {}
944
+ file "data_bags/x/z.json", {}
945
+ end
946
+
947
+ it "knife upload of one data bag item itself succeeds" do
948
+ knife("upload /data_bags/x/y.json").should_succeed <<EOM
949
+ Created /data_bags/x
950
+ Created /data_bags/x/y.json
951
+ EOM
952
+ knife("diff --name-status /data_bags").should_succeed <<EOM
953
+ A\t/data_bags/x/z.json
954
+ EOM
955
+ end
956
+ end
957
+ end
958
+
959
+ when_the_chef_server "has three data bag items" do
960
+ before do
961
+ data_bag "x", { "deleted" => {}, "modified" => {}, "unmodified" => {} }
962
+ end
963
+ when_the_repository "has a modified, unmodified, added and deleted data bag item" do
964
+ before do
965
+ file "data_bags/x/added.json", {}
966
+ file "data_bags/x/modified.json", { "foo" => "bar" }
967
+ file "data_bags/x/unmodified.json", {}
968
+ end
969
+
970
+ it "knife upload of the modified file succeeds" do
971
+ knife("upload /data_bags/x/modified.json").should_succeed <<EOM
972
+ Updated /data_bags/x/modified.json
973
+ EOM
974
+ knife("diff --name-status /data_bags").should_succeed <<EOM
975
+ D\t/data_bags/x/deleted.json
976
+ A\t/data_bags/x/added.json
977
+ EOM
978
+ end
979
+ it "knife upload of the unmodified file does nothing" do
980
+ knife("upload /data_bags/x/unmodified.json").should_succeed ""
981
+ knife("diff --name-status /data_bags").should_succeed <<EOM
982
+ D\t/data_bags/x/deleted.json
983
+ M\t/data_bags/x/modified.json
984
+ A\t/data_bags/x/added.json
985
+ EOM
986
+ end
987
+ it "knife upload of the added file succeeds" do
988
+ knife("upload /data_bags/x/added.json").should_succeed <<EOM
989
+ Created /data_bags/x/added.json
990
+ EOM
991
+ knife("diff --name-status /data_bags").should_succeed <<EOM
992
+ D\t/data_bags/x/deleted.json
993
+ M\t/data_bags/x/modified.json
994
+ EOM
995
+ end
996
+ it "knife upload of the deleted file does nothing" do
997
+ knife("upload /data_bags/x/deleted.json").should_succeed ""
998
+ knife("diff --name-status /data_bags").should_succeed <<EOM
999
+ D\t/data_bags/x/deleted.json
1000
+ M\t/data_bags/x/modified.json
1001
+ A\t/data_bags/x/added.json
1002
+ EOM
1003
+ end
1004
+ it "knife upload --purge of the deleted file deletes it" do
1005
+ knife("upload --purge /data_bags/x/deleted.json").should_succeed <<EOM
1006
+ Deleted extra entry /data_bags/x/deleted.json (purge is on)
1007
+ EOM
1008
+ knife("diff --name-status /data_bags").should_succeed <<EOM
1009
+ M\t/data_bags/x/modified.json
1010
+ A\t/data_bags/x/added.json
1011
+ EOM
1012
+ end
1013
+ it "knife upload of the entire data bag uploads everything" do
1014
+ knife("upload /data_bags/x").should_succeed <<EOM
1015
+ Created /data_bags/x/added.json
1016
+ Updated /data_bags/x/modified.json
1017
+ EOM
1018
+ knife("diff --name-status /data_bags").should_succeed <<EOM
1019
+ D\t/data_bags/x/deleted.json
1020
+ EOM
1021
+ end
1022
+ it "knife upload --purge of the entire data bag uploads everything" do
1023
+ knife("upload --purge /data_bags/x").should_succeed <<EOM
1024
+ Created /data_bags/x/added.json
1025
+ Updated /data_bags/x/modified.json
1026
+ Deleted extra entry /data_bags/x/deleted.json (purge is on)
1027
+ EOM
1028
+ knife("diff --name-status /data_bags").should_succeed ""
1029
+ end
1030
+ context "when cwd is the /data_bags directory" do
1031
+ before do
1032
+ cwd "data_bags"
1033
+ end
1034
+ it "knife upload fails" do
1035
+ knife("upload").should_fail "FATAL: You must specify at least one argument. If you want to upload everything in this directory, run \"knife upload .\"\n", :stdout => /USAGE/
1036
+ end
1037
+ it "knife upload --purge . uploads everything" do
1038
+ knife("upload --purge .").should_succeed <<EOM
1039
+ Created x/added.json
1040
+ Updated x/modified.json
1041
+ Deleted extra entry x/deleted.json (purge is on)
1042
+ EOM
1043
+ knife("diff --name-status /data_bags").should_succeed ""
1044
+ end
1045
+ it "knife upload --purge * uploads everything" do
1046
+ knife("upload --purge *").should_succeed <<EOM
1047
+ Created x/added.json
1048
+ Updated x/modified.json
1049
+ Deleted extra entry x/deleted.json (purge is on)
1050
+ EOM
1051
+ knife("diff --name-status /data_bags").should_succeed ""
1052
+ end
1053
+ end
1054
+ end
1055
+ end
1056
+
1057
+ # Cookbook upload is a funny thing ... direct cookbook upload works, but
1058
+ # upload of a file is designed not to work at present. Make sure that is the
1059
+ # case.
1060
+ when_the_chef_server "has a cookbook" do
1061
+ before do
1062
+ cookbook "x", "1.0.0", { "z.rb" => "" }
1063
+ end
1064
+
1065
+ when_the_repository "has a modified, extra and missing file for the cookbook" do
1066
+ before do
1067
+ file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0", "#modified")
1068
+ file "cookbooks/x-1.0.0/y.rb", "hi"
1069
+ end
1070
+
1071
+ it "knife upload of any individual file fails" do
1072
+ knife("upload /cookbooks/x-1.0.0/metadata.rb").should_fail "ERROR: /cookbooks/x-1.0.0/metadata.rb cannot be updated.\n"
1073
+ knife("upload /cookbooks/x-1.0.0/y.rb").should_fail "ERROR: /cookbooks/x-1.0.0 cannot have a child created under it.\n"
1074
+ knife("upload --purge /cookbooks/x-1.0.0/z.rb").should_fail "ERROR: /cookbooks/x-1.0.0/z.rb cannot be deleted.\n"
1075
+ end
1076
+
1077
+ # TODO this is a bit of an inconsistency: if we didn't specify --purge,
1078
+ # technically we shouldn't have deleted missing files. But ... cookbooks
1079
+ # are a special case.
1080
+ it "knife upload of the cookbook itself succeeds" do
1081
+ knife("upload /cookbooks/x-1.0.0").should_succeed <<EOM
1082
+ Updated /cookbooks/x-1.0.0
1083
+ EOM
1084
+ knife("diff --name-status /cookbooks").should_succeed ""
1085
+ end
1086
+
1087
+ it "knife upload --purge of the cookbook itself succeeds" do
1088
+ knife("upload /cookbooks/x-1.0.0").should_succeed <<EOM
1089
+ Updated /cookbooks/x-1.0.0
1090
+ EOM
1091
+ knife("diff --name-status /cookbooks").should_succeed ""
1092
+ end
1093
+ end
1094
+
1095
+ when_the_repository "has a missing file for the cookbook" do
1096
+ before do
1097
+ file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0")
1098
+ end
1099
+
1100
+ it "knife upload of the cookbook succeeds" do
1101
+ knife("upload /cookbooks/x-1.0.0").should_succeed <<EOM
1102
+ Updated /cookbooks/x-1.0.0
1103
+ EOM
1104
+ knife("diff --name-status /cookbooks").should_succeed ""
1105
+ end
1106
+ end
1107
+
1108
+ when_the_repository "has an extra file for the cookbook" do
1109
+ before do
1110
+ file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0")
1111
+ file "cookbooks/x-1.0.0/z.rb", ""
1112
+ file "cookbooks/x-1.0.0/blah.rb", ""
1113
+ end
1114
+
1115
+ it "knife upload of the cookbook succeeds" do
1116
+ knife("upload /cookbooks/x-1.0.0").should_succeed <<EOM
1117
+ Updated /cookbooks/x-1.0.0
1118
+ EOM
1119
+ knife("diff --name-status /cookbooks").should_succeed ""
1120
+ end
1121
+ end
1122
+ end
1123
+
1124
+ when_the_repository "has a cookbook" do
1125
+ before do
1126
+ file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0")
1127
+ file "cookbooks/x-1.0.0/onlyin1.0.0.rb", "old_text"
1128
+ end
1129
+
1130
+ when_the_chef_server "has a later version for the cookbook" do
1131
+ before do
1132
+ cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
1133
+ cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
1134
+ end
1135
+
1136
+ it "knife upload /cookbooks uploads the local version" do
1137
+ knife("diff --name-status /cookbooks").should_succeed <<EOM
1138
+ M\t/cookbooks/x-1.0.0/onlyin1.0.0.rb
1139
+ D\t/cookbooks/x-1.0.1
1140
+ EOM
1141
+ knife("upload --purge /cookbooks").should_succeed <<EOM
1142
+ Updated /cookbooks/x-1.0.0
1143
+ Deleted extra entry /cookbooks/x-1.0.1 (purge is on)
1144
+ EOM
1145
+ knife("diff --name-status /cookbooks").should_succeed ""
1146
+ end
1147
+ end
1148
+
1149
+ when_the_chef_server "has an earlier version for the cookbook" do
1150
+ before do
1151
+ cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
1152
+ cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
1153
+ end
1154
+ it "knife upload /cookbooks uploads the local version" do
1155
+ knife("upload --purge /cookbooks").should_succeed <<EOM
1156
+ Updated /cookbooks/x-1.0.0
1157
+ Deleted extra entry /cookbooks/x-0.9.9 (purge is on)
1158
+ EOM
1159
+ knife("diff --name-status /cookbooks").should_succeed ""
1160
+ end
1161
+ end
1162
+
1163
+ when_the_chef_server "has a later version for the cookbook, and no current version" do
1164
+ before do
1165
+ cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
1166
+ end
1167
+
1168
+ it "knife upload /cookbooks/x uploads the local version" do
1169
+ knife("diff --name-status /cookbooks").should_succeed <<EOM
1170
+ D\t/cookbooks/x-1.0.1
1171
+ A\t/cookbooks/x-1.0.0
1172
+ EOM
1173
+ knife("upload --purge /cookbooks").should_succeed <<EOM
1174
+ Created /cookbooks/x-1.0.0
1175
+ Deleted extra entry /cookbooks/x-1.0.1 (purge is on)
1176
+ EOM
1177
+ knife("diff --name-status /cookbooks").should_succeed ""
1178
+ end
1179
+ end
1180
+
1181
+ when_the_chef_server "has an earlier version for the cookbook, and no current version" do
1182
+ before do
1183
+ cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
1184
+ end
1185
+
1186
+ it "knife upload /cookbooks/x uploads the new version" do
1187
+ knife("upload --purge /cookbooks").should_succeed <<EOM
1188
+ Created /cookbooks/x-1.0.0
1189
+ Deleted extra entry /cookbooks/x-0.9.9 (purge is on)
1190
+ EOM
1191
+ knife("diff --name-status /cookbooks").should_succeed ""
1192
+ end
1193
+ end
1194
+ end
1195
+
1196
+ when_the_chef_server "has an environment" do
1197
+ before do
1198
+ environment "x", {}
1199
+ end
1200
+
1201
+ when_the_repository "has the same environment with the wrong name in the file" do
1202
+ before do
1203
+ file "environments/x.json", { "name" => "y" }
1204
+ end
1205
+ it "knife upload fails" do
1206
+ knife("upload /environments/x.json").should_fail "ERROR: /environments/x.json failed to write: Name must be 'x' (is 'y')\n"
1207
+ knife("diff --name-status /environments/x.json").should_succeed "M\t/environments/x.json\n"
1208
+ end
1209
+ end
1210
+
1211
+ when_the_repository "has the same environment with no name in the file" do
1212
+ before do
1213
+ file "environments/x.json", { "description" => "hi" }
1214
+ end
1215
+ it "knife upload succeeds" do
1216
+ knife("upload /environments/x.json").should_succeed "Updated /environments/x.json\n"
1217
+ knife("diff --name-status /environments/x.json").should_succeed ""
1218
+ end
1219
+ end
1220
+ end
1221
+
1222
+ when_the_chef_server "is empty" do
1223
+
1224
+ when_the_repository "has an environment with the wrong name in the file" do
1225
+ before do
1226
+ file "environments/x.json", { "name" => "y" }
1227
+ end
1228
+ it "knife upload fails" do
1229
+ knife("upload /environments/x.json").should_fail "ERROR: /environments failed to create_child: Error creating 'x.json': Name must be 'x' (is 'y')\n"
1230
+ knife("diff --name-status /environments/x.json").should_succeed "A\t/environments/x.json\n"
1231
+ end
1232
+ end
1233
+
1234
+ when_the_repository "has an environment with no name in the file" do
1235
+ before do
1236
+ file "environments/x.json", { "description" => "hi" }
1237
+ end
1238
+ it "knife upload succeeds" do
1239
+ knife("upload /environments/x.json").should_succeed "Created /environments/x.json\n"
1240
+ knife("diff --name-status /environments/x.json").should_succeed ""
1241
+ end
1242
+ end
1243
+
1244
+ when_the_repository "has a data bag with no id in the file" do
1245
+ before do
1246
+ file "data_bags/bag/x.json", { "foo" => "bar" }
1247
+ end
1248
+ it "knife upload succeeds" do
1249
+ knife("upload /data_bags/bag/x.json").should_succeed "Created /data_bags/bag\nCreated /data_bags/bag/x.json\n"
1250
+ knife("diff --name-status /data_bags/bag/x.json").should_succeed ""
1251
+ end
1252
+ end
1253
+ end
1254
+
1255
+ when_the_chef_server "is empty" do
1256
+ when_the_repository "has a cookbook with an invalid chef_version constraint in it" do
1257
+ before do
1258
+ file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0", "\nchef_version '~> 999.0'")
1259
+ end
1260
+ it "knife upload succeeds" do
1261
+ knife("upload /cookbooks/x-1.0.0").should_succeed <<EOM
1262
+ Created /cookbooks/x-1.0.0
1263
+ EOM
1264
+ knife("diff --name-status /cookbooks").should_succeed ""
1265
+ end
1266
+ end
1267
+ end
1268
+ end # with versioned cookbooks
1269
+
1270
+ when_the_chef_server "has a user" do
1271
+ before do
1272
+ user "x", {}
1273
+ end
1274
+
1275
+ when_the_repository "has the same user with json_class in it" do
1276
+ before do
1277
+ file "users/x.json", { "admin" => true, "json_class" => "Chef::WebUIUser" }
1278
+ end
1279
+ it "knife upload /users/x.json succeeds" do
1280
+ knife("upload /users/x.json").should_succeed "Updated /users/x.json\n"
1281
+ end
1282
+ end
1283
+ end
1284
+
1285
+ when_the_chef_server "is in Enterprise mode", :osc_compat => false, :single_org => false do
1286
+ before do
1287
+ user "foo", {}
1288
+ user "bar", {}
1289
+ user "foobar", {}
1290
+ organization "foo", { "full_name" => "Something" }
1291
+ end
1292
+
1293
+ before :each do
1294
+ Chef::Config.chef_server_url = URI.join(Chef::Config.chef_server_url, "/organizations/foo")
1295
+ end
1296
+
1297
+ context "and has nothing but a single group named blah" do
1298
+ group "blah", {}
1299
+
1300
+ when_the_repository "has at least one of each thing" do
1301
+
1302
+ before do
1303
+ # TODO We have to upload acls for an existing group due to a lack of
1304
+ # dependency detection during upload. Fix that!
1305
+ file "acls/groups/blah.json", {}
1306
+ file "clients/x.json", { "public_key" => ChefZero::PUBLIC_KEY }
1307
+ file "containers/x.json", {}
1308
+ file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
1309
+ file "cookbook_artifacts/x-1x1/metadata.rb", cb_metadata("x", "1.0.0")
1310
+ file "data_bags/x/y.json", {}
1311
+ file "environments/x.json", {}
1312
+ file "groups/x.json", {}
1313
+ file "invitations.json", [ "foo" ]
1314
+ file "members.json", [ "bar" ]
1315
+ file "org.json", { "full_name" => "wootles" }
1316
+ file "nodes/x.json", { "normal" => { "tags" => [] } }
1317
+ file "policies/x-1.0.0.json", {}
1318
+ file "policies/blah-1.0.0.json", {}
1319
+ file "policy_groups/x.json", { "policies" => { "x" => { "revision_id" => "1.0.0" }, "blah" => { "revision_id" => "1.0.0" } } }
1320
+ file "roles/x.json", {}
1321
+ end
1322
+
1323
+ it "knife upload / uploads everything" do
1324
+ knife("upload /").should_succeed <<EOM
1325
+ Updated /acls/groups/blah.json
1326
+ Created /clients/x.json
1327
+ Created /containers/x.json
1328
+ Created /cookbook_artifacts/x-1x1
1329
+ Created /cookbooks/x
1330
+ Created /data_bags/x
1331
+ Created /data_bags/x/y.json
1332
+ Created /environments/x.json
1333
+ Created /groups/x.json
1334
+ Updated /invitations.json
1335
+ Updated /members.json
1336
+ Created /nodes/x.json
1337
+ Updated /org.json
1338
+ Created /policies/blah-1.0.0.json
1339
+ Created /policies/x-1.0.0.json
1340
+ Created /policy_groups/x.json
1341
+ Created /roles/x.json
1342
+ EOM
1343
+ expect(api.get("association_requests").map { |a| a["username"] }).to eq([ "foo" ])
1344
+ expect(api.get("users").map { |a| a["user"]["username"] }).to eq([ "bar" ])
1345
+ knife("diff --name-status --diff-filter=AMT /").should_succeed ""
1346
+ end
1347
+
1348
+ context "When the chef server has an identical copy of each thing" do
1349
+ before do
1350
+ file "invitations.json", [ "foo" ]
1351
+ file "members.json", [ "bar" ]
1352
+ file "org.json", { "full_name" => "Something" }
1353
+
1354
+ # acl_for %w(organizations foo groups blah)
1355
+ client "x", {}
1356
+ cookbook "x", "1.0.0"
1357
+ cookbook_artifact "x", "1x1", "metadata.rb" => cb_metadata("x", "1.0.0")
1358
+ container "x", {}
1359
+ data_bag "x", { "y" => {} }
1360
+ environment "x", {}
1361
+ group "x", {}
1362
+ org_invite "foo"
1363
+ org_member "bar"
1364
+ node "x", {}
1365
+ policy "x", "1.0.0", {}
1366
+ policy "blah", "1.0.0", {}
1367
+ policy_group "x", {
1368
+ "policies" => {
1369
+ "x" => { "revision_id" => "1.0.0" },
1370
+ "blah" => { "revision_id" => "1.0.0" },
1371
+ },
1372
+ }
1373
+ role "x", {}
1374
+ end
1375
+
1376
+ it "knife upload makes no changes" do
1377
+ knife("upload /").should_succeed <<EOM
1378
+ Updated /acls/groups/blah.json
1379
+ EOM
1380
+ end
1381
+ end
1382
+
1383
+ context "When the chef server has a slightly different copy of the policy revision" do
1384
+ before do
1385
+ policy "x", "1.0.0", { "run_list" => [ "blah" ] }
1386
+ end
1387
+
1388
+ it "should fail because policies are not updateable" do
1389
+ knife("upload /policies/x-1.0.0.json").should_fail <<EOM
1390
+ ERROR: /policies/x-1.0.0.json cannot be updated: policy revisions are immutable once uploaded. If you want to change the policy, create a new revision with your changes.
1391
+ EOM
1392
+ end
1393
+ end
1394
+
1395
+ context "When the chef server has a slightly different copy of the cookbook artifact" do
1396
+ before do
1397
+ cookbook_artifact "x", "1x1", { "recipes" => { "default.rb" => "" } }
1398
+ end
1399
+
1400
+ it "should fail because cookbook_artifacts cannot be updated" do
1401
+ knife("upload /cookbook_artifacts/x-1x1").should_fail <<EOM
1402
+ ERROR: /cookbook_artifacts/x-1x1 cannot be updated: cookbook artifacts are immutable once uploaded.
1403
+ EOM
1404
+ end
1405
+ end
1406
+
1407
+ context "When the chef server has a slightly different copy of each thing (except policy revisions)" do
1408
+ before do
1409
+ # acl_for %w(organizations foo groups blah)
1410
+ client "x", { "validator" => true }
1411
+ container "x", {}
1412
+ cookbook "x", "1.0.0", { "recipes" => { "default.rb" => "" } }
1413
+ cookbook_artifact "x", "1x1", { "metadata.rb" => cb_metadata("x", "1.0.0") }
1414
+ data_bag "x", { "y" => { "a" => "b" } }
1415
+ environment "x", { "description" => "foo" }
1416
+ group "x", { "groups" => [ "admin" ] }
1417
+ node "x", { "run_list" => [ "blah" ] }
1418
+ policy "x", "1.0.0", {}
1419
+ policy "x", "1.0.1", {}
1420
+ policy "y", "1.0.0", {}
1421
+ policy_group "x", {
1422
+ "policies" => {
1423
+ "x" => { "revision_id" => "1.0.1" },
1424
+ "y" => { "revision_id" => "1.0.0" },
1425
+ },
1426
+ }
1427
+ role "x", { "run_list" => [ "blah" ] }
1428
+ end
1429
+
1430
+ it "knife upload updates everything" do
1431
+ knife("upload /").should_succeed <<EOM
1432
+ Updated /acls/groups/blah.json
1433
+ Updated /clients/x.json
1434
+ Updated /cookbooks/x
1435
+ Updated /data_bags/x/y.json
1436
+ Updated /environments/x.json
1437
+ Updated /groups/x.json
1438
+ Updated /invitations.json
1439
+ Updated /members.json
1440
+ Updated /nodes/x.json
1441
+ Updated /org.json
1442
+ Created /policies/blah-1.0.0.json
1443
+ Updated /policy_groups/x.json
1444
+ Updated /roles/x.json
1445
+ EOM
1446
+ knife("diff --name-status --diff-filter=AMT /").should_succeed ""
1447
+ end
1448
+ end
1449
+ end
1450
+
1451
+ when_the_repository "has an org.json that does not change full_name" do
1452
+ before do
1453
+ file "org.json", { "full_name" => "Something" }
1454
+ end
1455
+
1456
+ it "knife upload / emits a warning for bar and adds foo and foobar" do
1457
+ knife("upload /").should_succeed ""
1458
+ expect(api.get("/")["full_name"]).to eq("Something")
1459
+ end
1460
+ end
1461
+
1462
+ when_the_repository "has an org.json that changes full_name" do
1463
+ before do
1464
+ file "org.json", { "full_name" => "Something Else" }
1465
+ end
1466
+
1467
+ it "knife upload / emits a warning for bar and adds foo and foobar" do
1468
+ knife("upload /").should_succeed "Updated /org.json\n"
1469
+ expect(api.get("/")["full_name"]).to eq("Something Else")
1470
+ end
1471
+ end
1472
+
1473
+ context "and has invited foo and bar is already a member" do
1474
+ org_invite "foo"
1475
+ org_member "bar"
1476
+
1477
+ when_the_repository "wants to invite foo, bar and foobar" do
1478
+ before do
1479
+ file "invitations.json", %w{foo bar foobar}
1480
+ end
1481
+
1482
+ it "knife upload / emits a warning for bar and invites foobar" do
1483
+ knife("upload /").should_succeed "Updated /invitations.json\n", :stderr => "WARN: Could not invite bar to organization foo: User bar is already in organization foo\n"
1484
+ expect(api.get("association_requests").map { |a| a["username"] }).to eq(%w{foo foobar})
1485
+ expect(api.get("users").map { |a| a["user"]["username"] }).to eq([ "bar" ])
1486
+ end
1487
+ end
1488
+
1489
+ when_the_repository "wants to make foo, bar and foobar members" do
1490
+ before do
1491
+ file "members.json", %w{foo bar foobar}
1492
+ end
1493
+
1494
+ it "knife upload / emits a warning for bar and adds foo and foobar" do
1495
+ knife("upload /").should_succeed "Updated /members.json\n"
1496
+ expect(api.get("association_requests").map { |a| a["username"] }).to eq([ ])
1497
+ expect(api.get("users").map { |a| a["user"]["username"] }).to eq(%w{bar foo foobar})
1498
+ end
1499
+ end
1500
+
1501
+ when_the_repository "wants to invite foo and have bar as a member" do
1502
+ before do
1503
+ file "invitations.json", [ "foo" ]
1504
+ file "members.json", [ "bar" ]
1505
+ end
1506
+
1507
+ it "knife upload / does nothing" do
1508
+ knife("upload /").should_succeed ""
1509
+ expect(api.get("association_requests").map { |a| a["username"] }).to eq([ "foo" ])
1510
+ expect(api.get("users").map { |a| a["user"]["username"] }).to eq([ "bar" ])
1511
+ end
1512
+ end
1513
+ end
1514
+
1515
+ context "and has invited bar and foo" do
1516
+ org_invite "bar", "foo"
1517
+
1518
+ when_the_repository "wants to invite foo and bar (different order)" do
1519
+ before do
1520
+ file "invitations.json", %w{foo bar}
1521
+ end
1522
+
1523
+ it "knife upload / does nothing" do
1524
+ knife("upload /").should_succeed ""
1525
+ expect(api.get("association_requests").map { |a| a["username"] }).to eq(%w{bar foo})
1526
+ expect(api.get("users").map { |a| a["user"]["username"] }).to eq([ ])
1527
+ end
1528
+ end
1529
+ end
1530
+
1531
+ context "and has already added bar and foo as members of the org" do
1532
+ org_member "bar", "foo"
1533
+
1534
+ when_the_repository "wants to add foo and bar (different order)" do
1535
+ before do
1536
+ file "members.json", %w{foo bar}
1537
+ end
1538
+
1539
+ it "knife upload / does nothing" do
1540
+ knife("upload /").should_succeed ""
1541
+ expect(api.get("association_requests").map { |a| a["username"] }).to eq([ ])
1542
+ expect(api.get("users").map { |a| a["user"]["username"] }).to eq(%w{bar foo})
1543
+ end
1544
+ end
1545
+ end
1546
+ end
1547
+ end
1548
+ end