chef 12.11.18-universal-mingw32 → 12.12.13-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 (142) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -4
  3. data/Rakefile +3 -2
  4. data/VERSION +1 -1
  5. data/acceptance/Gemfile.lock +22 -23
  6. data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +2 -41
  7. data/lib/chef/application/solo.rb +7 -0
  8. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +1 -1
  9. data/lib/chef/data_collector.rb +79 -43
  10. data/lib/chef/data_collector/messages.rb +4 -33
  11. data/lib/chef/data_collector/messages/helpers.rb +2 -2
  12. data/lib/chef/data_collector/resource_report.rb +21 -11
  13. data/lib/chef/decorator/unchain.rb +43 -0
  14. data/lib/chef/exceptions.rb +5 -0
  15. data/lib/chef/http.rb +5 -5
  16. data/lib/chef/knife/cookbook_create.rb +4 -0
  17. data/lib/chef/knife/cookbook_site_download.rb +8 -1
  18. data/lib/chef/knife/cookbook_site_install.rb +8 -0
  19. data/lib/chef/knife/cookbook_site_list.rb +8 -1
  20. data/lib/chef/knife/cookbook_site_search.rb +8 -1
  21. data/lib/chef/knife/cookbook_site_share.rb +8 -1
  22. data/lib/chef/knife/cookbook_site_show.rb +14 -3
  23. data/lib/chef/knife/cookbook_site_unshare.rb +8 -1
  24. data/lib/chef/knife/core/bootstrap_context.rb +1 -1
  25. data/lib/chef/knife/supermarket_download.rb +33 -0
  26. data/lib/chef/knife/supermarket_install.rb +33 -0
  27. data/lib/chef/knife/supermarket_list.rb +33 -0
  28. data/lib/chef/knife/supermarket_search.rb +33 -0
  29. data/lib/chef/knife/supermarket_share.rb +33 -0
  30. data/lib/chef/knife/supermarket_show.rb +33 -0
  31. data/lib/chef/knife/supermarket_unshare.rb +33 -0
  32. data/lib/chef/node.rb +13 -32
  33. data/lib/chef/node/attribute.rb +123 -70
  34. data/lib/chef/node/attribute_collections.rb +9 -130
  35. data/lib/chef/node/common_api.rb +124 -0
  36. data/lib/chef/node/immutable_collections.rb +27 -2
  37. data/lib/chef/property.rb +6 -2
  38. data/lib/chef/provider.rb +4 -5
  39. data/lib/chef/provider/batch.rb +1 -1
  40. data/lib/chef/provider/directory.rb +3 -1
  41. data/lib/chef/provider/package/openbsd.rb +1 -1
  42. data/lib/chef/provider/package/rubygems.rb +9 -3
  43. data/lib/chef/provider/package/windows/exe.rb +2 -5
  44. data/lib/chef/provider/powershell_script.rb +1 -1
  45. data/lib/chef/provider/remote_directory.rb +2 -0
  46. data/lib/chef/resource.rb +22 -17
  47. data/lib/chef/resource_builder.rb +9 -4
  48. data/lib/chef/shell.rb +1 -1
  49. data/lib/chef/version.rb +1 -1
  50. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +2 -4
  51. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +2 -3
  52. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
  53. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
  54. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +2 -3
  55. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +2 -3
  56. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +2 -3
  57. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +2 -3
  58. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +2 -3
  59. data/spec/functional/assets/chocolatey_feed/test-A.1.0.nupkg +0 -0
  60. data/spec/functional/assets/chocolatey_feed/test-A.1.5.nupkg +0 -0
  61. data/spec/functional/assets/chocolatey_feed/test-A.2.0.nupkg +0 -0
  62. data/spec/functional/assets/chocolatey_feed/test-B.1.0.nupkg +0 -0
  63. data/spec/functional/resource/dsc_script_spec.rb +1 -0
  64. data/spec/functional/resource/package_spec.rb +1 -1
  65. data/spec/functional/resource/template_spec.rb +3 -3
  66. data/spec/functional/shell_spec.rb +1 -1
  67. data/spec/integration/knife/client_bulk_delete_spec.rb +130 -0
  68. data/spec/integration/knife/client_create_spec.rb +69 -0
  69. data/spec/integration/knife/client_delete_spec.rb +63 -0
  70. data/spec/integration/knife/client_key_create_spec.rb +65 -0
  71. data/spec/integration/knife/client_key_delete_spec.rb +42 -0
  72. data/spec/integration/knife/client_key_list_spec.rb +60 -0
  73. data/spec/integration/knife/client_key_show_spec.rb +44 -0
  74. data/spec/integration/knife/client_list_spec.rb +48 -0
  75. data/spec/integration/knife/client_show_spec.rb +36 -0
  76. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +64 -0
  77. data/spec/integration/knife/cookbook_download_spec.rb +95 -0
  78. data/spec/integration/knife/cookbook_list_spec.rb +54 -0
  79. data/spec/integration/knife/cookbook_show_spec.rb +159 -0
  80. data/spec/integration/knife/cookbook_upload_spec.rb +90 -0
  81. data/spec/integration/knife/data_bag_create_spec.rb +58 -0
  82. data/spec/integration/knife/data_bag_delete_spec.rb +58 -0
  83. data/spec/integration/knife/data_bag_from_file_spec.rb +115 -0
  84. data/spec/integration/knife/data_bag_list_spec.rb +43 -0
  85. data/spec/integration/knife/data_bag_show_spec.rb +53 -0
  86. data/spec/integration/knife/environment_compare_spec.rb +74 -0
  87. data/spec/integration/knife/environment_create_spec.rb +40 -0
  88. data/spec/integration/knife/environment_delete_spec.rb +36 -0
  89. data/spec/integration/knife/environment_from_file_spec.rb +115 -0
  90. data/spec/integration/knife/environment_list_spec.rb +41 -0
  91. data/spec/integration/knife/environment_show_spec.rb +56 -0
  92. data/spec/integration/knife/node_bulk_delete_spec.rb +51 -0
  93. data/spec/integration/knife/node_create_spec.rb +46 -0
  94. data/spec/integration/knife/node_delete_spec.rb +47 -0
  95. data/spec/integration/knife/node_environment_set_spec.rb +42 -0
  96. data/spec/integration/knife/node_from_file_spec.rb +58 -0
  97. data/spec/integration/knife/node_list_spec.rb +44 -0
  98. data/spec/integration/knife/node_run_list_add_spec.rb +53 -0
  99. data/spec/integration/knife/node_run_list_remove_spec.rb +35 -0
  100. data/spec/integration/knife/node_run_list_set_spec.rb +40 -0
  101. data/spec/integration/knife/node_show_spec.rb +35 -0
  102. data/spec/integration/knife/role_bulk_delete_spec.rb +51 -0
  103. data/spec/integration/knife/role_create_spec.rb +40 -0
  104. data/spec/integration/knife/role_delete_spec.rb +47 -0
  105. data/spec/integration/knife/role_from_file_spec.rb +95 -0
  106. data/spec/integration/knife/role_list_spec.rb +44 -0
  107. data/spec/integration/knife/role_show_spec.rb +50 -0
  108. data/spec/support/shared/integration/knife_support.rb +10 -3
  109. data/spec/unit/application/solo_spec.rb +7 -0
  110. data/spec/unit/cookbook_version_spec.rb +4 -4
  111. data/spec/unit/data_collector/messages/helpers_spec.rb +3 -7
  112. data/spec/unit/data_collector/messages_spec.rb +28 -45
  113. data/spec/unit/data_collector_spec.rb +40 -47
  114. data/spec/unit/knife/cookbook_create_spec.rb +1 -0
  115. data/spec/unit/knife/cookbook_site_download_spec.rb +1 -0
  116. data/spec/unit/knife/node_environment_set_spec.rb +0 -24
  117. data/spec/unit/knife/node_run_list_set_spec.rb +0 -25
  118. data/spec/unit/node/attribute_spec.rb +7 -9
  119. data/spec/unit/node/immutable_collections_spec.rb +4 -0
  120. data/spec/unit/node/vivid_mash_spec.rb +344 -0
  121. data/spec/unit/node_spec.rb +115 -26
  122. data/spec/unit/provider/directory_spec.rb +11 -1
  123. data/spec/unit/provider/package/windows/exe_spec.rb +14 -9
  124. data/spec/unit/provider/powershell_script_spec.rb +4 -4
  125. data/spec/unit/provider/remote_directory_spec.rb +15 -0
  126. data/spec/unit/recipe_spec.rb +31 -6
  127. data/spec/unit/run_context_spec.rb +2 -2
  128. data/spec/unit/shell/shell_session_spec.rb +1 -1
  129. data/tasks/dependencies.rb +0 -2
  130. metadata +55 -786
  131. data/acceptance/.bundle/config +0 -2
  132. data/acceptance/basics/.kitchen/logs/chef-current-install-ubuntu-1404.log +0 -2
  133. data/acceptance/basics/.kitchen/logs/kitchen.log +0 -3
  134. data/acceptance/fips/.kitchen/logs/fips-integration-centos-6.log +0 -3
  135. data/acceptance/fips/.kitchen/logs/fips-integration-windows-2012r2.log +0 -3
  136. data/acceptance/fips/.kitchen/logs/fips-unit-functional-centos-6.log +0 -3
  137. data/acceptance/fips/.kitchen/logs/fips-unit-functional-windows-2012r2.log +0 -3
  138. data/acceptance/fips/.kitchen/logs/kitchen.log +0 -6
  139. data/acceptance/trivial/.kitchen/logs/chef-current-install-windows-2012r2.log +0 -2
  140. data/acceptance/trivial/.kitchen/logs/kitchen.log +0 -3
  141. data/acceptance/windows-service/.kitchen/logs/chef-windows-service-windows-2012r2.log +0 -2
  142. data/acceptance/windows-service/.kitchen/logs/kitchen.log +0 -3
@@ -0,0 +1,63 @@
1
+ #
2
+ # Copyright:: Copyright 2013-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "support/shared/integration/integration_helper"
18
+ require "support/shared/context/config"
19
+
20
+ describe "knife client delete", :workstation do
21
+ include IntegrationSupport
22
+ include KnifeSupport
23
+
24
+ include_context "default config options"
25
+
26
+ when_the_chef_server "has some clients" do
27
+ before do
28
+ client "cons", {}
29
+ client "car", {}
30
+ client "car-validator", { validator: true }
31
+ client "cdr", {}
32
+ client "cat", {}
33
+ end
34
+
35
+ it "deletes a client" do
36
+ knife("client delete car", input: "Y").should_succeed <<EOM
37
+ Do you really want to delete car? (Y/N) Deleted client[car]
38
+ EOM
39
+
40
+ knife("client list").should_succeed <<EOM
41
+ car-validator
42
+ cat
43
+ cdr
44
+ chef-validator
45
+ chef-webui
46
+ cons
47
+ EOM
48
+ end
49
+
50
+ it "refuses to delete a validator normally" do
51
+ knife("client delete car-validator", input: "Y").should_fail exit_code: 2, stdout: "Do you really want to delete car-validator? (Y/N) ", stderr: <<EOM
52
+ FATAL: You must specify --delete-validators to delete the validator client car-validator
53
+ EOM
54
+ end
55
+
56
+ it "deletes a validator correctly" do
57
+ knife("client delete car-validator -D", input: "Y").should_succeed <<EOM
58
+ Do you really want to delete car-validator? (Y/N) Deleted client[car-validator]
59
+ EOM
60
+ end
61
+
62
+ end
63
+ end
@@ -0,0 +1,65 @@
1
+ #
2
+ # Copyright:: Copyright 2013-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "support/shared/integration/integration_helper"
18
+ require "support/shared/context/config"
19
+ require "openssl"
20
+
21
+ describe "knife client key create", :workstation do
22
+ include IntegrationSupport
23
+ include KnifeSupport
24
+
25
+ include_context "default config options"
26
+
27
+ let(:out) { "Created key: new" }
28
+
29
+ when_the_chef_server "has a client" do
30
+ before do
31
+ client "bah", {}
32
+ end
33
+
34
+ it "creates a new client key" do
35
+ knife("client key create -k new bah").should_succeed stderr: /^#{out}/, stdout: /.*BEGIN RSA PRIVATE KEY/
36
+ end
37
+
38
+ it "creates a new client key with an expiration date" do
39
+ date = "2017-12-31T23:59:59Z"
40
+ knife("client key create -k new -e #{date} bah").should_succeed stderr: /^#{out}/, stdout: /.*BEGIN RSA PRIVATE KEY/
41
+ knife("client key show bah new").should_succeed /expiration_date:.*#{date}/
42
+ end
43
+
44
+ it "refuses to add an already existing key" do
45
+ knife("client key create -k new bah")
46
+ expect { knife("client key create -k new bah") }.to raise_error(Net::HTTPServerException)
47
+ end
48
+
49
+ it "saves the private key to a file" do
50
+ Dir.mktmpdir do |tgt|
51
+ knife("client key create -f #{tgt}/bah.pem -k new bah").should_succeed stderr: /^#{out}/
52
+ expect(File).to exist("#{tgt}/bah.pem")
53
+ end
54
+ end
55
+
56
+ it "reads the public key from a file" do
57
+ Dir.mktmpdir do |tgt|
58
+ key = OpenSSL::PKey::RSA.generate(1024)
59
+ File.open("#{tgt}/public.pem", "w") { |pub| pub.write(key.public_key.to_pem) }
60
+ knife("client key create -p #{tgt}/public.pem -k new bah").should_succeed stderr: /^#{out}/
61
+ end
62
+ end
63
+
64
+ end
65
+ end
@@ -0,0 +1,42 @@
1
+ #
2
+ # Copyright:: Copyright 2013-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "support/shared/integration/integration_helper"
18
+ require "support/shared/context/config"
19
+
20
+ describe "knife client key delete", :workstation do
21
+ include IntegrationSupport
22
+ include KnifeSupport
23
+
24
+ include_context "default config options"
25
+
26
+ when_the_chef_server "has a client" do
27
+ before do
28
+ client "car", {}
29
+ end
30
+
31
+ it "deletes a client" do
32
+ out = "Do you really want to delete the key named new for the client named car? (Y/N) "
33
+ knife("client key create -k new car")
34
+ knife("client key delete car new", input: "Y").should_succeed stdout: out, stderr: <<EOM
35
+ Deleted key named new for the client named car
36
+ EOM
37
+
38
+ knife("client key list car").should_succeed ""
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,60 @@
1
+ #
2
+ # Copyright:: Copyright 2013-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "support/shared/integration/integration_helper"
18
+ require "support/shared/context/config"
19
+ require "date"
20
+
21
+ describe "knife client key list", :workstation do
22
+ include IntegrationSupport
23
+ include KnifeSupport
24
+
25
+ include_context "default config options"
26
+
27
+ let(:now) { DateTime.now }
28
+ let(:last_month) { (now << 1).strftime("%FT%TZ") }
29
+ let(:next_month) { (now >> 1).strftime("%FT%TZ") }
30
+
31
+ when_the_chef_server "has a client" do
32
+ before do
33
+ client "cons", {}
34
+ knife("client key create cons -k new")
35
+ knife("client key create cons -k next_month -e #{next_month}")
36
+ knife("client key create cons -k expired -e #{last_month}")
37
+ end
38
+
39
+ it "lists the keys for a client" do
40
+ knife("client key list cons").should_succeed "expired\nnew\nnext_month\n"
41
+ end
42
+
43
+ it "shows detailed output" do
44
+ knife("client key list -w cons").should_succeed <<EOM
45
+ expired: http://127.0.0.1:8900/clients/cons/keys/expired (expired)
46
+ new: http://127.0.0.1:8900/clients/cons/keys/new
47
+ next_month: http://127.0.0.1:8900/clients/cons/keys/next_month
48
+ EOM
49
+ end
50
+
51
+ it "lists the expired keys for a client" do
52
+ knife("client key list -e cons").should_succeed "expired\n"
53
+ end
54
+
55
+ it "lists the unexpired keys for a client" do
56
+ knife("client key list -n cons").should_succeed "new\nnext_month\n"
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,44 @@
1
+ #
2
+ # Copyright:: Copyright 2013-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "support/shared/integration/integration_helper"
18
+ require "support/shared/context/config"
19
+ require "date"
20
+
21
+ describe "knife client key show", :workstation do
22
+ include IntegrationSupport
23
+ include KnifeSupport
24
+
25
+ include_context "default config options"
26
+
27
+ let(:now) { DateTime.now }
28
+ let(:last_month) { (now << 1).strftime("%FT%TZ") }
29
+ let(:next_month) { (now >> 1).strftime("%FT%TZ") }
30
+
31
+ when_the_chef_server "has a client" do
32
+ before do
33
+ client "cons", {}
34
+ knife("client key create cons -k new")
35
+ knife("client key create cons -k next_month -e #{next_month}")
36
+ knife("client key create cons -k expired -e #{last_month}")
37
+ end
38
+
39
+ it "shows a key for a client" do
40
+ knife("client key show cons new").should_succeed stdout: /.*name:.*new/
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,48 @@
1
+ #
2
+ # Copyright:: Copyright 2013-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "support/shared/integration/integration_helper"
18
+ require "support/shared/context/config"
19
+
20
+ describe "knife client list", :workstation do
21
+ include IntegrationSupport
22
+ include KnifeSupport
23
+
24
+ include_context "default config options"
25
+
26
+ when_the_chef_server "has some clients" do
27
+ before do
28
+ client "cons", {}
29
+ client "car", {}
30
+ client "car-validator", { validator: true }
31
+ client "cdr", {}
32
+ client "cat", {}
33
+ end
34
+
35
+ it "lists the clients" do
36
+ knife("client list").should_succeed <<EOM
37
+ car
38
+ car-validator
39
+ cat
40
+ cdr
41
+ chef-validator
42
+ chef-webui
43
+ cons
44
+ EOM
45
+ end
46
+
47
+ end
48
+ end
@@ -0,0 +1,36 @@
1
+ #
2
+ # Copyright:: Copyright 2013-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "support/shared/integration/integration_helper"
18
+ require "support/shared/context/config"
19
+
20
+ describe "knife client show", :workstation do
21
+ include IntegrationSupport
22
+ include KnifeSupport
23
+
24
+ include_context "default config options"
25
+
26
+ when_the_chef_server "has a client" do
27
+ before do
28
+ client "cons", {}
29
+ end
30
+
31
+ it "shows a client" do
32
+ knife("client show cons").should_succeed stdout: /.*name:.*cons/
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,64 @@
1
+ #
2
+ # Copyright:: Copyright 2013-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "support/shared/integration/integration_helper"
18
+ require "support/shared/context/config"
19
+ require "chef/knife/cookbook_bulk_delete"
20
+
21
+ describe "knife cookbook bulk delete", :workstation do
22
+ include IntegrationSupport
23
+ include KnifeSupport
24
+
25
+ include_context "default config options"
26
+
27
+ when_the_chef_server "has a cookbook" do
28
+ before do
29
+ cookbook "foo", "1.0.0"
30
+ cookbook "foo", "0.6.5"
31
+ cookbook "fox", "0.6.0"
32
+ cookbook "fox", "0.6.5"
33
+ cookbook "fax", "0.6.0"
34
+ cookbook "zfa", "0.6.5"
35
+ end
36
+
37
+ # rubocop:disable Style/TrailingWhitespace
38
+ it "knife cookbook bulk delete deletes all matching cookbooks" do
39
+ stdout = <<EOM
40
+ All versions of the following cookbooks will be deleted:
41
+
42
+ foo fox
43
+
44
+ Do you really want to delete these cookbooks? (Y/N)
45
+ EOM
46
+
47
+ stderr = <<EOM
48
+ Deleted cookbook foo [1.0.0]
49
+ Deleted cookbook foo [0.6.5]
50
+ Deleted cookbook fox [0.6.5]
51
+ Deleted cookbook fox [0.6.0]
52
+ EOM
53
+
54
+ knife("cookbook bulk delete ^fo.*", input: "Y").should_succeed(stderr: stderr, stdout: stdout)
55
+
56
+ knife("cookbook list -a").should_succeed <<EOM
57
+ fax 0.6.0
58
+ zfa 0.6.5
59
+ EOM
60
+ end
61
+ # rubocop:enable Style/TrailingWhitespace
62
+
63
+ end
64
+ end
@@ -0,0 +1,95 @@
1
+ #
2
+ # Copyright:: Copyright 2013-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "support/shared/integration/integration_helper"
18
+ require "support/shared/context/config"
19
+ require "chef/knife/cookbook_download"
20
+ require "tmpdir"
21
+
22
+ describe "knife cookbook download", :workstation do
23
+ include IntegrationSupport
24
+ include KnifeSupport
25
+
26
+ include_context "default config options"
27
+
28
+ let(:tmpdir) { Dir.mktmpdir }
29
+
30
+ when_the_chef_server "has only one cookbook" do
31
+ before do
32
+ cookbook "x", "1.0.1"
33
+ end
34
+
35
+ it "knife cookbook download downloads the latest version" do
36
+ knife("cookbook download -d #{tmpdir} x").should_succeed stderr: <<EOM
37
+ Downloading x cookbook version 1.0.1
38
+ Downloading resources
39
+ Downloading providers
40
+ Downloading recipes
41
+ Downloading definitions
42
+ Downloading libraries
43
+ Downloading attributes
44
+ Downloading files
45
+ Downloading templates
46
+ Downloading root_files
47
+ Cookbook downloaded to #{tmpdir}/x-1.0.1
48
+ EOM
49
+ end
50
+
51
+ it "knife cookbook download with a version downloads the specified version" do
52
+ knife("cookbook download -d #{tmpdir} x 1.0.1").should_succeed stderr: <<EOM
53
+ Downloading x cookbook version 1.0.1
54
+ Downloading resources
55
+ Downloading providers
56
+ Downloading recipes
57
+ Downloading definitions
58
+ Downloading libraries
59
+ Downloading attributes
60
+ Downloading files
61
+ Downloading templates
62
+ Downloading root_files
63
+ Cookbook downloaded to #{tmpdir}/x-1.0.1
64
+ EOM
65
+ end
66
+
67
+ it "knife cookbook download with an unknown version raises an error" do
68
+ expect { knife("cookbook download -d #{tmpdir} x 1.0.0") }.to raise_error(Net::HTTPServerException)
69
+ end
70
+ end
71
+
72
+ when_the_chef_server "has multiple cookbook versions" do
73
+ before do
74
+ cookbook "x", "1.0.1"
75
+ cookbook "x", "1.0.0"
76
+ end
77
+
78
+ it "knife cookbook download with no version prompts" do
79
+ knife("cookbook download -d #{tmpdir} x", input: "2\n").should_succeed(stderr: <<EOM, stdout: "Which version do you want to download?\n1. x 1.0.0\n2. x 1.0.1\n\n"
80
+ Downloading x cookbook version 1.0.1
81
+ Downloading resources
82
+ Downloading providers
83
+ Downloading recipes
84
+ Downloading definitions
85
+ Downloading libraries
86
+ Downloading attributes
87
+ Downloading files
88
+ Downloading templates
89
+ Downloading root_files
90
+ Cookbook downloaded to #{tmpdir}/x-1.0.1
91
+ EOM
92
+ )
93
+ end
94
+ end
95
+ end