chef 12.22.1-universal-mingw32 → 12.22.3-universal-mingw32

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