chef 12.0.0.alpha.0-x86-mingw32 → 12.0.0.alpha.1-x86-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.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +3 -5
- data/lib/chef/api_client.rb +1 -1
- data/lib/chef/application.rb +16 -8
- data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
- data/lib/chef/chef_fs/command_line.rb +1 -1
- data/lib/chef/chef_fs/file_system.rb +1 -1
- data/lib/chef/chef_fs/file_system/acl_entry.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +3 -3
- data/lib/chef/chef_fs/file_system/cookbook_file.rb +2 -2
- data/lib/chef/chef_fs/file_system/rest_list_dir.rb +2 -2
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +4 -4
- data/lib/chef/config.rb +6 -5
- data/lib/chef/config_fetcher.rb +1 -1
- data/lib/chef/cookbook/cookbook_version_loader.rb +126 -43
- data/lib/chef/cookbook/metadata.rb +102 -53
- data/lib/chef/cookbook/syntax_check.rb +1 -1
- data/lib/chef/cookbook_loader.rb +62 -14
- data/lib/chef/cookbook_site_streaming_uploader.rb +12 -1
- data/lib/chef/cookbook_version.rb +13 -4
- data/lib/chef/data_bag.rb +28 -15
- data/lib/chef/data_bag_item.rb +5 -7
- data/lib/chef/digester.rb +5 -9
- data/lib/chef/dsl/recipe.rb +14 -0
- data/lib/chef/encrypted_data_bag_item.rb +1 -0
- data/lib/chef/encrypted_data_bag_item/assertions.rb +57 -0
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +52 -28
- data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +37 -0
- data/lib/chef/encrypted_data_bag_item/encryption_failure.rb +22 -0
- data/lib/chef/encrypted_data_bag_item/encryptor.rb +79 -8
- data/lib/chef/environment.rb +1 -3
- data/lib/chef/exceptions.rb +18 -3
- data/lib/chef/formatters/base.rb +7 -0
- data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +1 -1
- data/lib/chef/handler/json_file.rb +0 -1
- data/lib/chef/http/json_output.rb +1 -1
- data/lib/chef/json_compat.rb +24 -6
- data/lib/chef/knife/bootstrap.rb +2 -2
- data/lib/chef/knife/client_delete.rb +1 -1
- data/lib/chef/knife/cookbook_site_download.rb +1 -1
- data/lib/chef/knife/cookbook_site_list.rb +1 -1
- data/lib/chef/knife/cookbook_site_search.rb +1 -1
- data/lib/chef/knife/cookbook_site_share.rb +2 -2
- data/lib/chef/knife/cookbook_site_show.rb +3 -3
- data/lib/chef/knife/cookbook_site_unshare.rb +1 -1
- data/lib/chef/knife/core/node_editor.rb +2 -3
- data/lib/chef/knife/core/ui.rb +2 -2
- data/lib/chef/knife/deps.rb +2 -3
- data/lib/chef/mixin/shell_out.rb +1 -1
- data/lib/chef/mixin/windows_architecture_helper.rb +1 -0
- data/lib/chef/node.rb +1 -2
- data/lib/chef/platform/provider_mapping.rb +33 -6
- data/lib/chef/provider.rb +0 -2
- data/lib/chef/provider/cookbook_file/content.rb +1 -1
- data/lib/chef/provider/cron.rb +11 -0
- data/lib/chef/provider/deploy.rb +3 -2
- data/lib/chef/provider/deploy/revision.rb +2 -2
- data/lib/chef/provider/env.rb +1 -1
- data/lib/chef/provider/env/windows.rb +5 -9
- data/lib/chef/provider/file.rb +84 -33
- data/lib/chef/provider/git.rb +2 -1
- data/lib/chef/provider/group/aix.rb +17 -2
- data/lib/chef/provider/group/dscl.rb +27 -9
- data/lib/chef/provider/group/pw.rb +8 -1
- data/lib/chef/provider/http_request.rb +4 -4
- data/lib/chef/provider/log.rb +4 -14
- data/lib/chef/provider/mount/mount.rb +2 -2
- data/lib/chef/provider/package/ips.rb +17 -23
- data/lib/chef/provider/package/paludis.rb +2 -2
- data/lib/chef/provider/package/rpm.rb +2 -2
- data/lib/chef/provider/package/rubygems.rb +2 -0
- data/lib/chef/provider/package/yum.rb +2 -0
- data/lib/chef/provider/package/zypper.rb +1 -1
- data/lib/chef/provider/remote_file/cache_control_data.rb +2 -2
- data/lib/chef/provider/service/windows.rb +87 -21
- data/lib/chef/provider/user/aix.rb +95 -0
- data/lib/chef/provider/user/dscl.rb +544 -156
- data/lib/chef/provider/user/useradd.rb +1 -0
- data/lib/chef/providers.rb +1 -0
- data/lib/chef/resource.rb +4 -3
- data/lib/chef/resource/freebsd_package.rb +10 -2
- data/lib/chef/resource/paludis_package.rb +1 -0
- data/lib/chef/resource/scm.rb +10 -0
- data/lib/chef/resource/user.rb +27 -0
- data/lib/chef/resource/windows_service.rb +53 -0
- data/lib/chef/resource_collection.rb +23 -12
- data/lib/chef/resource_reporter.rb +10 -10
- data/lib/chef/resources.rb +1 -0
- data/lib/chef/role.rb +3 -3
- data/lib/chef/run_list.rb +6 -3
- data/lib/chef/user.rb +1 -1
- data/lib/chef/util/diff.rb +1 -2
- data/lib/chef/version.rb +1 -1
- data/lib/chef/version_constraint.rb +4 -4
- data/spec/data/cookbooks/angrybash/metadata.rb +2 -0
- data/spec/data/cookbooks/apache2/metadata.rb +2 -0
- data/spec/data/cookbooks/borken/metadata.rb +2 -0
- data/spec/data/cookbooks/ignorken/metadata.rb +2 -0
- data/spec/data/cookbooks/java/metadata.rb +2 -0
- data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -0
- data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -0
- data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +8 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -0
- data/spec/data/cookbooks/preseed/metadata.rb +2 -0
- data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -0
- data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -0
- data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +8 -0
- data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -0
- data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +10 -0
- data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +8 -0
- data/spec/data/mac_users/10.7-8.plist.xml +559 -0
- data/spec/data/mac_users/10.7-8.shadow.xml +11 -0
- data/spec/data/mac_users/10.7.plist.xml +559 -0
- data/spec/data/mac_users/10.7.shadow.xml +11 -0
- data/spec/data/mac_users/10.8.plist.xml +559 -0
- data/spec/data/mac_users/10.8.shadow.xml +21 -0
- data/spec/data/mac_users/10.9.plist.xml +560 -0
- data/spec/data/mac_users/10.9.shadow.xml +21 -0
- data/spec/data/object_loader/environments/test.json +2 -0
- data/spec/data/object_loader/environments/test_json_class.json +2 -0
- data/spec/data/object_loader/nodes/test.json +2 -0
- data/spec/data/object_loader/nodes/test_json_class.json +2 -0
- data/spec/data/object_loader/roles/test.json +2 -0
- data/spec/data/object_loader/roles/test_json_class.json +2 -0
- data/spec/functional/resource/bff_spec.rb +1 -1
- data/spec/functional/resource/cron_spec.rb +20 -1
- data/spec/functional/resource/env_spec.rb +137 -0
- data/spec/functional/resource/group_spec.rb +7 -5
- data/spec/functional/resource/remote_file_spec.rb +12 -1
- data/spec/functional/resource/user/dscl_spec.rb +198 -0
- data/spec/functional/resource/{user_spec.rb → user/useradd_spec.rb} +175 -37
- data/spec/integration/client/client_spec.rb +6 -4
- data/spec/integration/client/ipv6_spec.rb +16 -14
- data/spec/integration/knife/chef_fs_data_store_spec.rb +57 -46
- data/spec/integration/knife/chef_repo_path_spec.rb +105 -78
- data/spec/integration/knife/chef_repository_file_system_spec.rb +100 -84
- data/spec/integration/knife/chefignore_spec.rb +76 -46
- data/spec/integration/knife/common_options_spec.rb +16 -21
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +3 -3
- data/spec/integration/knife/delete_spec.rb +66 -46
- data/spec/integration/knife/deps_spec.rb +145 -94
- data/spec/integration/knife/diff_spec.rb +176 -110
- data/spec/integration/knife/download_spec.rb +229 -133
- data/spec/integration/knife/list_spec.rb +62 -54
- data/spec/integration/knife/raw_spec.rb +24 -9
- data/spec/integration/knife/redirection_spec.rb +2 -2
- data/spec/integration/knife/serve_spec.rb +2 -2
- data/spec/integration/knife/show_spec.rb +32 -26
- data/spec/integration/knife/upload_spec.rb +308 -165
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +10 -8
- data/spec/integration/solo/solo_spec.rb +22 -11
- data/spec/spec_helper.rb +3 -0
- data/spec/support/lib/chef/resource/zen_follower.rb +46 -0
- data/spec/support/platform_helpers.rb +12 -0
- data/spec/support/shared/functional/file_resource.rb +10 -0
- data/spec/support/shared/integration/chef_zero_support.rb +130 -0
- data/spec/support/shared/integration/integration_helper.rb +100 -98
- data/spec/support/shared/integration/knife_support.rb +0 -1
- data/spec/support/shared/unit/provider/file.rb +6 -4
- data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +10 -1
- data/spec/unit/api_client/registration_spec.rb +83 -74
- data/spec/unit/application_spec.rb +32 -9
- data/spec/unit/cookbook/cookbook_version_loader_spec.rb +179 -0
- data/spec/unit/cookbook/metadata_spec.rb +190 -150
- data/spec/unit/cookbook/syntax_check_spec.rb +3 -2
- data/spec/unit/cookbook_loader_spec.rb +114 -53
- data/spec/unit/{cookbook_site_streaming_uploader.rb → cookbook_site_streaming_uploader_spec.rb} +21 -1
- data/spec/unit/data_bag_spec.rb +88 -13
- data/spec/unit/deprecation_spec.rb +1 -2
- data/spec/unit/encrypted_data_bag_item_spec.rb +145 -9
- data/spec/unit/environment_spec.rb +1 -1
- data/spec/unit/formatters/base_spec.rb +48 -0
- data/spec/unit/json_compat_spec.rb +48 -17
- data/spec/unit/knife/client_delete_spec.rb +4 -4
- data/spec/unit/knife/client_show_spec.rb +15 -5
- data/spec/unit/knife/cookbook_site_download_spec.rb +1 -1
- data/spec/unit/knife/cookbook_site_share_spec.rb +3 -3
- data/spec/unit/knife/data_bag_from_file_spec.rb +0 -2
- data/spec/unit/knife/data_bag_show_spec.rb +23 -14
- data/spec/unit/knife/node_show_spec.rb +32 -15
- data/spec/unit/knife/role_show_spec.rb +59 -0
- data/spec/unit/platform_spec.rb +10 -0
- data/spec/unit/provider/deploy_spec.rb +4 -0
- data/spec/unit/provider/env_spec.rb +19 -0
- data/spec/unit/provider/git_spec.rb +22 -2
- data/spec/unit/provider/group/dscl_spec.rb +38 -1
- data/spec/unit/provider/group/pw_spec.rb +2 -2
- data/spec/unit/provider/http_request_spec.rb +8 -8
- data/spec/unit/provider/log_spec.rb +33 -53
- data/spec/unit/provider/mount/mount_spec.rb +12 -3
- data/spec/unit/provider/package/ips_spec.rb +96 -63
- data/spec/unit/provider/package/paludis_spec.rb +5 -5
- data/spec/unit/provider/package/rpm_spec.rb +12 -0
- data/spec/unit/provider/package/zypper_spec.rb +28 -16
- data/spec/unit/provider/service/windows_spec.rb +77 -17
- data/spec/unit/provider/user/dscl_spec.rb +659 -264
- data/spec/unit/provider/user/useradd_spec.rb +1 -0
- data/spec/unit/recipe_spec.rb +41 -0
- data/spec/unit/resource/scm_spec.rb +11 -0
- data/spec/unit/resource/user_spec.rb +4 -0
- data/spec/unit/resource/windows_service_spec.rb +46 -0
- data/spec/unit/resource_collection_spec.rb +33 -0
- data/spec/unit/resource_reporter_spec.rb +48 -0
- data/spec/unit/resource_spec.rb +9 -2
- data/spec/unit/role_spec.rb +6 -0
- data/spec/unit/version_constraint_spec.rb +28 -0
- metadata +61 -4
@@ -19,18 +19,11 @@ require 'support/shared/integration/integration_helper'
|
|
19
19
|
require 'chef/knife/raw'
|
20
20
|
|
21
21
|
describe 'knife common options' do
|
22
|
-
|
22
|
+
include IntegrationSupport
|
23
23
|
include KnifeSupport
|
24
24
|
|
25
25
|
when_the_repository "has a node" do
|
26
|
-
file 'nodes/x.json', {}
|
27
|
-
|
28
|
-
before(:each) do
|
29
|
-
if ChefZero::RSpec.server
|
30
|
-
ChefZero::RSpec.server.stop
|
31
|
-
ChefZero::RSpec.server = nil
|
32
|
-
end
|
33
|
-
end
|
26
|
+
before { file 'nodes/x.json', {} }
|
34
27
|
|
35
28
|
context 'When chef_zero.enabled is true' do
|
36
29
|
before(:each) do
|
@@ -38,14 +31,14 @@ describe 'knife common options' do
|
|
38
31
|
end
|
39
32
|
|
40
33
|
it 'knife raw /nodes/x should retrieve the node' do
|
41
|
-
knife('raw /nodes/x').should_succeed /"name": "x"/
|
34
|
+
knife('raw /nodes/x').should_succeed( /"name": "x"/ )
|
42
35
|
end
|
43
36
|
|
44
37
|
context 'And chef_zero.port is 9999' do
|
45
38
|
before(:each) { Chef::Config.chef_zero.port = 9999 }
|
46
39
|
|
47
40
|
it 'knife raw /nodes/x should retrieve the node' do
|
48
|
-
knife('raw /nodes/x').should_succeed /"name": "x"/
|
41
|
+
knife('raw /nodes/x').should_succeed( /"name": "x"/ )
|
49
42
|
Chef::Config.chef_server_url.should == 'http://localhost:9999'
|
50
43
|
end
|
51
44
|
end
|
@@ -55,12 +48,13 @@ describe 'knife common options' do
|
|
55
48
|
before(:each) { Chef::Config.chef_zero.host = '0.0.0.0' }
|
56
49
|
|
57
50
|
it 'knife raw /nodes/x should retrieve the role' do
|
58
|
-
knife('raw /nodes/x').should_succeed /"name": "x"/
|
51
|
+
knife('raw /nodes/x').should_succeed( /"name": "x"/ )
|
59
52
|
end
|
60
53
|
end
|
61
54
|
|
62
55
|
context 'and there is a private key' do
|
63
|
-
|
56
|
+
before do
|
57
|
+
file 'mykey.pem', <<EOM
|
64
58
|
-----BEGIN RSA PRIVATE KEY-----
|
65
59
|
MIIEogIBAAKCAQEApubutqtYYQ5UiA9QhWP7UvSmsfHsAoPKEVVPdVW/e8Svwpyf
|
66
60
|
0Xef6OFWVmBE+W442ZjLOe2y6p2nSnaq4y7dg99NFz6X+16mcKiCbj0RCiGqCvCk
|
@@ -89,23 +83,24 @@ syHLXYFNy0OxMtH/bBAXBGNHd9gf5uOnqh0pYcbe/uRAxumC7Rl0cL509eURiA2T
|
|
89
83
|
+vFmf54y9YdnLXaqv+FhJT6B6V7WX7IpU9BMqJY1cJYXHuHG2KA=
|
90
84
|
-----END RSA PRIVATE KEY-----
|
91
85
|
EOM
|
86
|
+
end
|
92
87
|
|
93
88
|
it 'knife raw /nodes/x should retrieve the node' do
|
94
|
-
knife('raw /nodes/x').should_succeed /"name": "x"/
|
89
|
+
knife('raw /nodes/x').should_succeed( /"name": "x"/ )
|
95
90
|
end
|
96
91
|
end
|
97
92
|
end
|
98
93
|
|
99
94
|
it 'knife raw -z /nodes/x retrieves the node' do
|
100
|
-
knife('raw -z /nodes/x').should_succeed /"name": "x"/
|
95
|
+
knife('raw -z /nodes/x').should_succeed( /"name": "x"/ )
|
101
96
|
end
|
102
97
|
|
103
98
|
it 'knife raw --local-mode /nodes/x retrieves the node' do
|
104
|
-
knife('raw --local-mode /nodes/x').should_succeed /"name": "x"/
|
99
|
+
knife('raw --local-mode /nodes/x').should_succeed( /"name": "x"/ )
|
105
100
|
end
|
106
101
|
|
107
102
|
it 'knife raw -z --chef-zero-port=9999 /nodes/x retrieves the node' do
|
108
|
-
knife('raw -z --chef-zero-port=9999 /nodes/x').should_succeed /"name": "x"/
|
103
|
+
knife('raw -z --chef-zero-port=9999 /nodes/x').should_succeed( /"name": "x"/ )
|
109
104
|
Chef::Config.chef_server_url.should == 'http://localhost:9999'
|
110
105
|
end
|
111
106
|
|
@@ -123,7 +118,7 @@ EOM
|
|
123
118
|
end
|
124
119
|
|
125
120
|
it 'knife raw -z /nodes/x retrieves the node' do
|
126
|
-
knife('raw -z /nodes/x').should_succeed /"name": "x"/
|
121
|
+
knife('raw -z /nodes/x').should_succeed( /"name": "x"/ )
|
127
122
|
expect(URI(Chef::Config.chef_server_url).port).to be > 8889
|
128
123
|
end
|
129
124
|
end
|
@@ -142,18 +137,18 @@ EOM
|
|
142
137
|
end
|
143
138
|
|
144
139
|
it 'knife raw -z --chef-zero-port=9999-20000 /nodes/x' do
|
145
|
-
knife('raw -z --chef-zero-port=9999-20000 /nodes/x').should_succeed /"name": "x"/
|
140
|
+
knife('raw -z --chef-zero-port=9999-20000 /nodes/x').should_succeed( /"name": "x"/ )
|
146
141
|
expect(URI(Chef::Config.chef_server_url).port).to be > 9999
|
147
142
|
end
|
148
143
|
|
149
144
|
it 'knife raw -z --chef-zero-port=9999-9999,19423' do
|
150
|
-
knife('raw -z --chef-zero-port=9999-9999,19423 /nodes/x').should_succeed /"name": "x"/
|
145
|
+
knife('raw -z --chef-zero-port=9999-9999,19423 /nodes/x').should_succeed( /"name": "x"/ )
|
151
146
|
expect(URI(Chef::Config.chef_server_url).port).to be == 19423
|
152
147
|
end
|
153
148
|
end
|
154
149
|
|
155
150
|
it 'knife raw -z --chef-zero-port=9999 /nodes/x retrieves the node' do
|
156
|
-
knife('raw -z --chef-zero-port=9999 /nodes/x').should_succeed /"name": "x"/
|
151
|
+
knife('raw -z --chef-zero-port=9999 /nodes/x').should_succeed( /"name": "x"/ )
|
157
152
|
Chef::Config.chef_server_url.should == 'http://localhost:9999'
|
158
153
|
end
|
159
154
|
end
|
@@ -19,7 +19,7 @@ require 'support/shared/integration/integration_helper'
|
|
19
19
|
require 'chef/mixin/shell_out'
|
20
20
|
|
21
21
|
describe "Knife cookbook API integration with IPv6" do
|
22
|
-
|
22
|
+
include IntegrationSupport
|
23
23
|
include Chef::Mixin::ShellOut
|
24
24
|
|
25
25
|
when_the_chef_server "is bound to IPv6" do
|
@@ -100,8 +100,8 @@ END_CLIENT_RB
|
|
100
100
|
end
|
101
101
|
|
102
102
|
it "downloads the cookbook" do
|
103
|
-
|
104
|
-
Dir["#{cache_path}/*"].map {|entry| File.basename(entry)}.should include("apache2-0.0.
|
103
|
+
shell_out!("knife cookbook download apache2 #{knife_config_flag} -d #{cache_path}", :cwd => chef_dir)
|
104
|
+
Dir["#{cache_path}/*"].map {|entry| File.basename(entry)}.should include("apache2-0.0.1")
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
@@ -21,7 +21,7 @@ require 'chef/knife/list'
|
|
21
21
|
require 'chef/knife/raw'
|
22
22
|
|
23
23
|
describe 'knife delete' do
|
24
|
-
|
24
|
+
include IntegrationSupport
|
25
25
|
include KnifeSupport
|
26
26
|
|
27
27
|
let :everything do
|
@@ -99,23 +99,27 @@ EOM
|
|
99
99
|
end
|
100
100
|
|
101
101
|
when_the_chef_server "has one of each thing" do
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
102
|
+
before do
|
103
|
+
client 'x', '{}'
|
104
|
+
cookbook 'x', '1.0.0'
|
105
|
+
data_bag 'x', { 'y' => '{}' }
|
106
|
+
environment 'x', '{}'
|
107
|
+
node 'x', '{}'
|
108
|
+
role 'x', '{}'
|
109
|
+
user 'x', '{}'
|
110
|
+
end
|
109
111
|
|
110
112
|
when_the_repository 'also has one of each thing' do
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
113
|
+
before do
|
114
|
+
file 'clients/x.json', {}
|
115
|
+
file 'cookbooks/x/metadata.rb', ''
|
116
|
+
file 'data_bags/x/y.json', {}
|
117
|
+
file 'environments/_default.json', {}
|
118
|
+
file 'environments/x.json', {}
|
119
|
+
file 'nodes/x.json', {}
|
120
|
+
file 'roles/x.json', {}
|
121
|
+
file 'users/x.json', {}
|
122
|
+
end
|
119
123
|
|
120
124
|
it 'knife delete --both /cookbooks/x fails' do
|
121
125
|
knife('delete --both /cookbooks/x').should_fail <<EOM
|
@@ -216,8 +220,11 @@ EOM
|
|
216
220
|
|
217
221
|
# TODO delete empty data bag (particularly different on local side)
|
218
222
|
context 'with an empty data bag on both' do
|
219
|
-
|
220
|
-
|
223
|
+
before do
|
224
|
+
data_bag 'empty', {}
|
225
|
+
directory 'data_bags/empty'
|
226
|
+
end
|
227
|
+
|
221
228
|
it 'knife delete --both /data_bags/empty fails but deletes local version' do
|
222
229
|
knife('delete --both /data_bags/empty').should_fail <<EOM
|
223
230
|
ERROR: /data_bags/empty (remote) must be deleted recursively! Pass -r to knife delete.
|
@@ -468,13 +475,15 @@ EOM
|
|
468
475
|
end
|
469
476
|
|
470
477
|
when_the_repository 'has only top-level directories' do
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
+
before do
|
479
|
+
directory 'clients'
|
480
|
+
directory 'cookbooks'
|
481
|
+
directory 'data_bags'
|
482
|
+
directory 'environments'
|
483
|
+
directory 'nodes'
|
484
|
+
directory 'roles'
|
485
|
+
directory 'users'
|
486
|
+
end
|
478
487
|
|
479
488
|
it 'knife delete --both /cookbooks/x fails' do
|
480
489
|
knife('delete --both /cookbooks/x').should_fail "ERROR: /cookbooks/x (remote) must be deleted recursively! Pass -r to knife delete.\n"
|
@@ -632,7 +641,7 @@ EOM
|
|
632
641
|
end
|
633
642
|
|
634
643
|
context 'and cwd is at the top level' do
|
635
|
-
cwd '.'
|
644
|
+
before { cwd '.' }
|
636
645
|
it 'knife delete fails' do
|
637
646
|
knife('delete').should_fail "FATAL: Must specify at least one argument. If you want to delete everything in this directory, type \"knife delete --recurse .\"\n", :stdout => /USAGE/
|
638
647
|
knife('list -Rf /').should_succeed <<EOM
|
@@ -673,14 +682,16 @@ EOM
|
|
673
682
|
|
674
683
|
when_the_chef_server 'is empty' do
|
675
684
|
when_the_repository 'has one of each thing' do
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
685
|
+
before do
|
686
|
+
file 'clients/x.json', {}
|
687
|
+
file 'cookbooks/x/metadata.rb', ''
|
688
|
+
file 'data_bags/x/y.json', {}
|
689
|
+
file 'environments/_default.json', {}
|
690
|
+
file 'environments/x.json', {}
|
691
|
+
file 'nodes/x.json', {}
|
692
|
+
file 'roles/x.json', {}
|
693
|
+
file 'users/x.json', {}
|
694
|
+
end
|
684
695
|
|
685
696
|
it 'knife delete --both /cookbooks/x fails' do
|
686
697
|
knife('delete --both /cookbooks/x').should_fail "ERROR: /cookbooks/x (local) must be deleted recursively! Pass -r to knife delete.\n"
|
@@ -843,7 +854,7 @@ EOM
|
|
843
854
|
end
|
844
855
|
|
845
856
|
context 'and cwd is at the top level' do
|
846
|
-
cwd '.'
|
857
|
+
before { cwd '.' }
|
847
858
|
it 'knife delete fails' do
|
848
859
|
knife('delete').should_fail "FATAL: Must specify at least one argument. If you want to delete everything in this directory, type \"knife delete --recurse .\"\n", :stdout => /USAGE/
|
849
860
|
knife('list -Rf /').should_succeed <<EOM
|
@@ -884,12 +895,16 @@ EOM
|
|
884
895
|
end
|
885
896
|
|
886
897
|
when_the_repository 'has a cookbook' do
|
887
|
-
|
888
|
-
|
898
|
+
before do
|
899
|
+
file 'cookbooks/x/metadata.rb', 'version "1.0.0"'
|
900
|
+
file 'cookbooks/x/onlyin1.0.0.rb', 'old_text'
|
901
|
+
end
|
889
902
|
|
890
903
|
when_the_chef_server 'has a later version for the cookbook' do
|
891
|
-
|
892
|
-
|
904
|
+
before do
|
905
|
+
cookbook 'x', '1.0.0', { 'onlyin1.0.0.rb' => '' }
|
906
|
+
cookbook 'x', '1.0.1', { 'onlyin1.0.1.rb' => 'hi' }
|
907
|
+
end
|
893
908
|
|
894
909
|
# TODO this seems wrong
|
895
910
|
it 'knife delete --both -r /cookbooks/x deletes the latest version on the server and the local version' do
|
@@ -900,8 +915,10 @@ EOM
|
|
900
915
|
end
|
901
916
|
|
902
917
|
when_the_chef_server 'has an earlier version for the cookbook' do
|
903
|
-
|
904
|
-
|
918
|
+
before do
|
919
|
+
cookbook 'x', '1.0.0', { 'onlyin1.0.0.rb' => ''}
|
920
|
+
cookbook 'x', '0.9.9', { 'onlyin0.9.9.rb' => 'hi' }
|
921
|
+
end
|
905
922
|
|
906
923
|
it 'knife delete --both /cookbooks/x deletes the latest version on the server and the local version' do
|
907
924
|
knife('delete --both -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n"
|
@@ -911,7 +928,7 @@ EOM
|
|
911
928
|
end
|
912
929
|
|
913
930
|
when_the_chef_server 'has a later version for the cookbook, and no current version' do
|
914
|
-
cookbook 'x', '1.0.1', { '
|
931
|
+
before { cookbook 'x', '1.0.1', { 'onlyin1.0.1.rb' => 'hi' } }
|
915
932
|
|
916
933
|
it 'knife delete --both /cookbooks/x deletes the server and client version of the cookbook' do
|
917
934
|
knife('delete --both -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n"
|
@@ -921,7 +938,7 @@ EOM
|
|
921
938
|
end
|
922
939
|
|
923
940
|
when_the_chef_server 'has an earlier version for the cookbook, and no current version' do
|
924
|
-
cookbook 'x', '0.9.9', { '
|
941
|
+
before { cookbook 'x', '0.9.9', { 'onlyin0.9.9.rb' => 'hi' } }
|
925
942
|
|
926
943
|
it 'knife delete --both /cookbooks/x deletes the server and client version of the cookbook' do
|
927
944
|
knife('delete --both -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n"
|
@@ -933,11 +950,14 @@ EOM
|
|
933
950
|
|
934
951
|
when_the_repository 'is empty' do
|
935
952
|
when_the_chef_server 'has two versions of a cookbook' do
|
936
|
-
|
937
|
-
|
953
|
+
before do
|
954
|
+
cookbook 'x', '2.0.11'
|
955
|
+
cookbook 'x', '11.0.0'
|
956
|
+
end
|
957
|
+
|
938
958
|
it 'knife delete deletes the latest version' do
|
939
959
|
knife('delete --both -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n"
|
940
|
-
knife('raw /cookbooks/x').should_succeed /2.0.11/
|
960
|
+
knife('raw /cookbooks/x').should_succeed( /2.0.11/ )
|
941
961
|
end
|
942
962
|
end
|
943
963
|
end
|
@@ -20,24 +20,26 @@ require 'support/shared/context/config'
|
|
20
20
|
require 'chef/knife/deps'
|
21
21
|
|
22
22
|
describe 'knife deps' do
|
23
|
-
|
23
|
+
include IntegrationSupport
|
24
24
|
include KnifeSupport
|
25
25
|
|
26
26
|
context 'local' do
|
27
27
|
when_the_repository 'has a role with no run_list' do
|
28
|
-
file 'roles/starring.json', {}
|
28
|
+
before { file 'roles/starring.json', {} }
|
29
29
|
it 'knife deps reports no dependencies' do
|
30
30
|
knife('deps /roles/starring.json').should_succeed "/roles/starring.json\n"
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
34
|
when_the_repository 'has a role with a default run_list' do
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
35
|
+
before do
|
36
|
+
file 'roles/starring.json', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) }
|
37
|
+
file 'roles/minor.json', {}
|
38
|
+
file 'cookbooks/quiche/metadata.rb', 'name "quiche"'
|
39
|
+
file 'cookbooks/quiche/recipes/default.rb', ''
|
40
|
+
file 'cookbooks/soup/metadata.rb', 'name "soup"'
|
41
|
+
file 'cookbooks/soup/recipes/chicken.rb', ''
|
42
|
+
end
|
41
43
|
it 'knife deps reports all dependencies' do
|
42
44
|
knife('deps /roles/starring.json').should_succeed <<EOM
|
43
45
|
/roles/minor.json
|
@@ -49,12 +51,14 @@ EOM
|
|
49
51
|
end
|
50
52
|
|
51
53
|
when_the_repository 'has a role with an env_run_list' do
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
54
|
+
before do
|
55
|
+
file 'roles/starring.json', { 'env_run_lists' => { 'desert' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } }
|
56
|
+
file 'roles/minor.json', {}
|
57
|
+
file 'cookbooks/quiche/metadata.rb', 'name "quiche"'
|
58
|
+
file 'cookbooks/quiche/recipes/default.rb', ''
|
59
|
+
file 'cookbooks/soup/metadata.rb', 'name "soup"'
|
60
|
+
file 'cookbooks/soup/recipes/chicken.rb', ''
|
61
|
+
end
|
58
62
|
it 'knife deps reports all dependencies' do
|
59
63
|
knife('deps /roles/starring.json').should_succeed <<EOM
|
60
64
|
/roles/minor.json
|
@@ -66,25 +70,29 @@ EOM
|
|
66
70
|
end
|
67
71
|
|
68
72
|
when_the_repository 'has a node with no environment or run_list' do
|
69
|
-
file 'nodes/mort.json', {}
|
73
|
+
before { file 'nodes/mort.json', {} }
|
70
74
|
it 'knife deps reports just the node' do
|
71
75
|
knife('deps /nodes/mort.json').should_succeed "/nodes/mort.json\n"
|
72
76
|
end
|
73
77
|
end
|
74
78
|
when_the_repository 'has a node with an environment' do
|
75
|
-
|
76
|
-
|
79
|
+
before do
|
80
|
+
file 'environments/desert.json', {}
|
81
|
+
file 'nodes/mort.json', { 'chef_environment' => 'desert' }
|
82
|
+
end
|
77
83
|
it 'knife deps reports just the node' do
|
78
84
|
knife('deps /nodes/mort.json').should_succeed "/environments/desert.json\n/nodes/mort.json\n"
|
79
85
|
end
|
80
86
|
end
|
81
87
|
when_the_repository 'has a node with roles and recipes in its run_list' do
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
+
before do
|
89
|
+
file 'roles/minor.json', {}
|
90
|
+
file 'cookbooks/quiche/metadata.rb', 'name "quiche"'
|
91
|
+
file 'cookbooks/quiche/recipes/default.rb', ''
|
92
|
+
file 'cookbooks/soup/metadata.rb', 'name "soup"'
|
93
|
+
file 'cookbooks/soup/recipes/chicken.rb', ''
|
94
|
+
file 'nodes/mort.json', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) }
|
95
|
+
end
|
88
96
|
it 'knife deps reports just the node' do
|
89
97
|
knife('deps /nodes/mort.json').should_succeed <<EOM
|
90
98
|
/roles/minor.json
|
@@ -95,42 +103,48 @@ EOM
|
|
95
103
|
end
|
96
104
|
end
|
97
105
|
when_the_repository 'has a cookbook with no dependencies' do
|
98
|
-
|
99
|
-
|
106
|
+
before do
|
107
|
+
file 'cookbooks/quiche/metadata.rb', 'name "quiche"'
|
108
|
+
file 'cookbooks/quiche/recipes/default.rb', ''
|
109
|
+
end
|
100
110
|
it 'knife deps reports just the cookbook' do
|
101
111
|
knife('deps /cookbooks/quiche').should_succeed "/cookbooks/quiche\n"
|
102
112
|
end
|
103
113
|
end
|
104
114
|
when_the_repository 'has a cookbook with dependencies' do
|
105
|
-
|
106
|
-
|
107
|
-
|
115
|
+
before do
|
116
|
+
file 'cookbooks/kettle/metadata.rb', 'name "kettle"'
|
117
|
+
file 'cookbooks/quiche/metadata.rb', "name 'quiche'\ndepends 'kettle'\n"
|
118
|
+
file 'cookbooks/quiche/recipes/default.rb', ''
|
119
|
+
end
|
108
120
|
it 'knife deps reports just the cookbook' do
|
109
121
|
knife('deps /cookbooks/quiche').should_succeed "/cookbooks/kettle\n/cookbooks/quiche\n"
|
110
122
|
end
|
111
123
|
end
|
112
124
|
when_the_repository 'has a data bag' do
|
113
|
-
file 'data_bags/bag/item.json', {}
|
125
|
+
before { file 'data_bags/bag/item.json', {} }
|
114
126
|
it 'knife deps reports just the data bag' do
|
115
127
|
knife('deps /data_bags/bag/item.json').should_succeed "/data_bags/bag/item.json\n"
|
116
128
|
end
|
117
129
|
end
|
118
130
|
when_the_repository 'has an environment' do
|
119
|
-
file 'environments/desert.json', {}
|
131
|
+
before { file 'environments/desert.json', {} }
|
120
132
|
it 'knife deps reports just the environment' do
|
121
133
|
knife('deps /environments/desert.json').should_succeed "/environments/desert.json\n"
|
122
134
|
end
|
123
135
|
end
|
124
136
|
when_the_repository 'has a deep dependency tree' do
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
137
|
+
before do
|
138
|
+
file 'roles/starring.json', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) }
|
139
|
+
file 'roles/minor.json', {}
|
140
|
+
file 'cookbooks/quiche/metadata.rb', 'name "quiche"'
|
141
|
+
file 'cookbooks/quiche/recipes/default.rb', ''
|
142
|
+
file 'cookbooks/soup/metadata.rb', 'name "soup"'
|
143
|
+
file 'cookbooks/soup/recipes/chicken.rb', ''
|
144
|
+
file 'environments/desert.json', {}
|
145
|
+
file 'nodes/mort.json', { 'chef_environment' => 'desert', 'run_list' => [ 'role[starring]' ] }
|
146
|
+
file 'nodes/bart.json', { 'run_list' => [ 'role[minor]' ] }
|
147
|
+
end
|
134
148
|
|
135
149
|
it 'knife deps reports all dependencies' do
|
136
150
|
knife('deps /nodes/mort.json').should_succeed <<EOM
|
@@ -189,10 +203,13 @@ EOM
|
|
189
203
|
|
190
204
|
context 'circular dependencies' do
|
191
205
|
when_the_repository 'has cookbooks with circular dependencies' do
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
206
|
+
before do
|
207
|
+
file 'cookbooks/foo/metadata.rb', "name 'foo'\ndepends 'bar'\n"
|
208
|
+
file 'cookbooks/bar/metadata.rb', "name 'bar'\ndepends 'baz'\n"
|
209
|
+
file 'cookbooks/baz/metadata.rb', "name 'baz'\ndepends 'foo'\n"
|
210
|
+
file 'cookbooks/self/metadata.rb', "name 'self'\ndepends 'self'\n"
|
211
|
+
end
|
212
|
+
|
196
213
|
it 'knife deps prints each once' do
|
197
214
|
knife('deps /cookbooks/foo /cookbooks/self').should_succeed <<EOM
|
198
215
|
/cookbooks/baz
|
@@ -213,10 +230,12 @@ EOM
|
|
213
230
|
end
|
214
231
|
end
|
215
232
|
when_the_repository 'has roles with circular dependencies' do
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
233
|
+
before do
|
234
|
+
file 'roles/foo.json', { 'run_list' => [ 'role[bar]' ] }
|
235
|
+
file 'roles/bar.json', { 'run_list' => [ 'role[baz]' ] }
|
236
|
+
file 'roles/baz.json', { 'run_list' => [ 'role[foo]' ] }
|
237
|
+
file 'roles/self.json', { 'run_list' => [ 'role[self]' ] }
|
238
|
+
end
|
220
239
|
it 'knife deps prints each once' do
|
221
240
|
knife('deps /roles/foo.json /roles/self.json').should_succeed <<EOM
|
222
241
|
/roles/baz.json
|
@@ -280,7 +299,9 @@ EOM
|
|
280
299
|
end
|
281
300
|
end
|
282
301
|
when_the_repository 'is missing a dependent cookbook' do
|
283
|
-
|
302
|
+
before do
|
303
|
+
file 'roles/starring.json', { 'run_list' => [ 'recipe[quiche]'] }
|
304
|
+
end
|
284
305
|
it 'knife deps reports the cookbook, along with an error' do
|
285
306
|
knife('deps /roles/starring.json').should_fail(
|
286
307
|
:exit_code => 2,
|
@@ -290,7 +311,9 @@ EOM
|
|
290
311
|
end
|
291
312
|
end
|
292
313
|
when_the_repository 'is missing a dependent environment' do
|
293
|
-
|
314
|
+
before do
|
315
|
+
file 'nodes/mort.json', { 'chef_environment' => 'desert' }
|
316
|
+
end
|
294
317
|
it 'knife deps reports the environment, along with an error' do
|
295
318
|
knife('deps /nodes/mort.json').should_fail(
|
296
319
|
:exit_code => 2,
|
@@ -300,7 +323,9 @@ EOM
|
|
300
323
|
end
|
301
324
|
end
|
302
325
|
when_the_repository 'is missing a dependent role' do
|
303
|
-
|
326
|
+
before do
|
327
|
+
file 'roles/starring.json', { 'run_list' => [ 'role[minor]'] }
|
328
|
+
end
|
304
329
|
it 'knife deps reports the role, along with an error' do
|
305
330
|
knife('deps /roles/starring.json').should_fail(
|
306
331
|
:exit_code => 2,
|
@@ -324,13 +349,13 @@ EOM
|
|
324
349
|
end
|
325
350
|
end
|
326
351
|
when_the_repository 'has a data bag' do
|
327
|
-
file 'data_bags/bag/item.json', ''
|
352
|
+
before { file 'data_bags/bag/item.json', '' }
|
328
353
|
it 'knife deps /data_bags/bag shows no dependencies' do
|
329
354
|
knife('deps /data_bags/bag').should_succeed("/data_bags/bag\n")
|
330
355
|
end
|
331
356
|
end
|
332
357
|
when_the_repository 'has a cookbook' do
|
333
|
-
file 'cookbooks/blah/metadata.rb', 'name "blah"'
|
358
|
+
before { file 'cookbooks/blah/metadata.rb', 'name "blah"' }
|
334
359
|
it 'knife deps on a cookbook file shows no dependencies' do
|
335
360
|
knife('deps /cookbooks/blah/metadata.rb').should_succeed(
|
336
361
|
"/cookbooks/blah/metadata.rb\n"
|
@@ -342,19 +367,21 @@ EOM
|
|
342
367
|
|
343
368
|
context 'remote' do
|
344
369
|
include_context "default config options"
|
345
|
-
|
370
|
+
|
346
371
|
when_the_chef_server 'has a role with no run_list' do
|
347
|
-
role 'starring', {}
|
372
|
+
before { role 'starring', {} }
|
348
373
|
it 'knife deps reports no dependencies' do
|
349
374
|
knife('deps --remote /roles/starring.json').should_succeed "/roles/starring.json\n"
|
350
375
|
end
|
351
376
|
end
|
352
377
|
|
353
378
|
when_the_chef_server 'has a role with a default run_list' do
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
379
|
+
before do
|
380
|
+
role 'starring', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) }
|
381
|
+
role 'minor', {}
|
382
|
+
cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\nversion '1.0.0'\n", 'recipes' => { 'default.rb' => '' } }
|
383
|
+
cookbook 'soup', '1.0.0', { 'metadata.rb' => "name 'soup'\nversion '1.0.0'\n", 'recipes' => { 'chicken.rb' => '' } }
|
384
|
+
end
|
358
385
|
it 'knife deps reports all dependencies' do
|
359
386
|
knife('deps --remote /roles/starring.json').should_succeed <<EOM
|
360
387
|
/roles/minor.json
|
@@ -366,10 +393,12 @@ EOM
|
|
366
393
|
end
|
367
394
|
|
368
395
|
when_the_chef_server 'has a role with an env_run_list' do
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
396
|
+
before do
|
397
|
+
role 'starring', { 'env_run_lists' => { 'desert' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } }
|
398
|
+
role 'minor', {}
|
399
|
+
cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\nversion '1.0.0'\n", 'recipes' => { 'default.rb' => '' } }
|
400
|
+
cookbook 'soup', '1.0.0', { 'metadata.rb' => "name 'soup'\nversion '1.0.0'\n", 'recipes' => { 'chicken.rb' => '' } }
|
401
|
+
end
|
373
402
|
it 'knife deps reports all dependencies' do
|
374
403
|
knife('deps --remote /roles/starring.json').should_succeed <<EOM
|
375
404
|
/roles/minor.json
|
@@ -381,23 +410,27 @@ EOM
|
|
381
410
|
end
|
382
411
|
|
383
412
|
when_the_chef_server 'has a node with no environment or run_list' do
|
384
|
-
node 'mort', {}
|
413
|
+
before { node 'mort', {} }
|
385
414
|
it 'knife deps reports just the node' do
|
386
415
|
knife('deps --remote /nodes/mort.json').should_succeed "/nodes/mort.json\n"
|
387
416
|
end
|
388
417
|
end
|
389
418
|
when_the_chef_server 'has a node with an environment' do
|
390
|
-
|
391
|
-
|
419
|
+
before do
|
420
|
+
environment 'desert', {}
|
421
|
+
node 'mort', { 'chef_environment' => 'desert' }
|
422
|
+
end
|
392
423
|
it 'knife deps reports just the node' do
|
393
424
|
knife('deps --remote /nodes/mort.json').should_succeed "/environments/desert.json\n/nodes/mort.json\n"
|
394
425
|
end
|
395
426
|
end
|
396
427
|
when_the_chef_server 'has a node with roles and recipes in its run_list' do
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
428
|
+
before do
|
429
|
+
role 'minor', {}
|
430
|
+
cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\nversion '1.0.0'\n", 'recipes' => { 'default.rb' => '' } }
|
431
|
+
cookbook 'soup', '1.0.0', { 'metadata.rb' => "name 'soup'\nversion '1.0.0'\n", 'recipes' => { 'chicken.rb' => '' } }
|
432
|
+
node 'mort', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) }
|
433
|
+
end
|
401
434
|
it 'knife deps reports just the node' do
|
402
435
|
knife('deps --remote /nodes/mort.json').should_succeed <<EOM
|
403
436
|
/roles/minor.json
|
@@ -408,38 +441,44 @@ EOM
|
|
408
441
|
end
|
409
442
|
end
|
410
443
|
when_the_chef_server 'has a cookbook with no dependencies' do
|
411
|
-
|
444
|
+
before do
|
445
|
+
cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\nversion '1.0.0'\n", 'recipes' => { 'default.rb' => '' } }
|
446
|
+
end
|
412
447
|
it 'knife deps reports just the cookbook' do
|
413
448
|
knife('deps --remote /cookbooks/quiche').should_succeed "/cookbooks/quiche\n"
|
414
449
|
end
|
415
450
|
end
|
416
451
|
when_the_chef_server 'has a cookbook with dependencies' do
|
417
|
-
|
418
|
-
|
452
|
+
before do
|
453
|
+
cookbook 'kettle', '1.0.0', { 'metadata.rb' => "name 'kettle'\nversion '1.0.0'\n" }
|
454
|
+
cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\ndepends 'kettle'\n", 'recipes' => { 'default.rb' => '' } }
|
455
|
+
end
|
419
456
|
it 'knife deps reports the cookbook and its dependencies' do
|
420
457
|
knife('deps --remote /cookbooks/quiche').should_succeed "/cookbooks/kettle\n/cookbooks/quiche\n"
|
421
458
|
end
|
422
459
|
end
|
423
460
|
when_the_chef_server 'has a data bag' do
|
424
|
-
data_bag 'bag', { 'item' => {} }
|
461
|
+
before { data_bag 'bag', { 'item' => {} } }
|
425
462
|
it 'knife deps reports just the data bag' do
|
426
463
|
knife('deps --remote /data_bags/bag/item.json').should_succeed "/data_bags/bag/item.json\n"
|
427
464
|
end
|
428
465
|
end
|
429
466
|
when_the_chef_server 'has an environment' do
|
430
|
-
environment 'desert', {}
|
467
|
+
before { environment 'desert', {} }
|
431
468
|
it 'knife deps reports just the environment' do
|
432
469
|
knife('deps --remote /environments/desert.json').should_succeed "/environments/desert.json\n"
|
433
470
|
end
|
434
471
|
end
|
435
472
|
when_the_chef_server 'has a deep dependency tree' do
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
473
|
+
before do
|
474
|
+
role 'starring', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) }
|
475
|
+
role 'minor', {}
|
476
|
+
cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\nversion '1.0.0'\n", 'recipes' => { 'default.rb' => '' } }
|
477
|
+
cookbook 'soup', '1.0.0', { 'metadata.rb' => "name 'soup'\nversion '1.0.0'\n", 'recipes' => { 'chicken.rb' => '' } }
|
478
|
+
environment 'desert', {}
|
479
|
+
node 'mort', { 'chef_environment' => 'desert', 'run_list' => [ 'role[starring]' ] }
|
480
|
+
node 'bart', { 'run_list' => [ 'role[minor]' ] }
|
481
|
+
end
|
443
482
|
|
444
483
|
it 'knife deps reports all dependencies' do
|
445
484
|
knife('deps --remote /nodes/mort.json').should_succeed <<EOM
|
@@ -498,10 +537,12 @@ EOM
|
|
498
537
|
|
499
538
|
context 'circular dependencies' do
|
500
539
|
when_the_chef_server 'has cookbooks with circular dependencies' do
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
540
|
+
before do
|
541
|
+
cookbook 'foo', '1.0.0', { 'metadata.rb' => "name 'foo'\ndepends 'bar'\n" }
|
542
|
+
cookbook 'bar', '1.0.0', { 'metadata.rb' => "name 'bar'\ndepends 'baz'\n" }
|
543
|
+
cookbook 'baz', '1.0.0', { 'metadata.rb' => "name 'baz'\ndepends 'foo'\n" }
|
544
|
+
cookbook 'self', '1.0.0', { 'metadata.rb' => "name 'self'\ndepends 'self'\n" }
|
545
|
+
end
|
505
546
|
it 'knife deps prints each once' do
|
506
547
|
knife('deps --remote /cookbooks/foo /cookbooks/self').should_succeed <<EOM
|
507
548
|
/cookbooks/baz
|
@@ -522,10 +563,12 @@ EOM
|
|
522
563
|
end
|
523
564
|
end
|
524
565
|
when_the_chef_server 'has roles with circular dependencies' do
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
566
|
+
before do
|
567
|
+
role 'foo', { 'run_list' => [ 'role[bar]' ] }
|
568
|
+
role 'bar', { 'run_list' => [ 'role[baz]' ] }
|
569
|
+
role 'baz', { 'run_list' => [ 'role[foo]' ] }
|
570
|
+
role 'self', { 'run_list' => [ 'role[self]' ] }
|
571
|
+
end
|
529
572
|
it 'knife deps prints each once' do
|
530
573
|
knife('deps --remote /roles/foo.json /roles/self.json').should_succeed <<EOM
|
531
574
|
/roles/baz.json
|
@@ -589,7 +632,9 @@ EOM
|
|
589
632
|
end
|
590
633
|
end
|
591
634
|
when_the_chef_server 'is missing a dependent cookbook' do
|
592
|
-
|
635
|
+
before do
|
636
|
+
role 'starring', { 'run_list' => [ 'recipe[quiche]'] }
|
637
|
+
end
|
593
638
|
it 'knife deps reports the cookbook, along with an error' do
|
594
639
|
knife('deps --remote /roles/starring.json').should_fail(
|
595
640
|
:exit_code => 2,
|
@@ -599,7 +644,9 @@ EOM
|
|
599
644
|
end
|
600
645
|
end
|
601
646
|
when_the_chef_server 'is missing a dependent environment' do
|
602
|
-
|
647
|
+
before do
|
648
|
+
node 'mort', { 'chef_environment' => 'desert' }
|
649
|
+
end
|
603
650
|
it 'knife deps reports the environment, along with an error' do
|
604
651
|
knife('deps --remote /nodes/mort.json').should_fail(
|
605
652
|
:exit_code => 2,
|
@@ -609,7 +656,9 @@ EOM
|
|
609
656
|
end
|
610
657
|
end
|
611
658
|
when_the_chef_server 'is missing a dependent role' do
|
612
|
-
|
659
|
+
before do
|
660
|
+
role 'starring', { 'run_list' => [ 'role[minor]'] }
|
661
|
+
end
|
613
662
|
it 'knife deps reports the role, along with an error' do
|
614
663
|
knife('deps --remote /roles/starring.json').should_fail(
|
615
664
|
:exit_code => 2,
|
@@ -629,13 +678,15 @@ EOM
|
|
629
678
|
end
|
630
679
|
end
|
631
680
|
when_the_chef_server 'has a data bag' do
|
632
|
-
data_bag 'bag', { 'item' => {} }
|
681
|
+
before { data_bag 'bag', { 'item' => {} } }
|
633
682
|
it 'knife deps /data_bags/bag shows no dependencies' do
|
634
683
|
knife('deps --remote /data_bags/bag').should_succeed("/data_bags/bag\n")
|
635
684
|
end
|
636
685
|
end
|
637
686
|
when_the_chef_server 'has a cookbook' do
|
638
|
-
|
687
|
+
before do
|
688
|
+
cookbook 'blah', '1.0.0', { 'metadata.rb' => 'name "blah"' }
|
689
|
+
end
|
639
690
|
it 'knife deps on a cookbook file shows no dependencies' do
|
640
691
|
knife('deps --remote /cookbooks/blah/metadata.rb').should_succeed(
|
641
692
|
"/cookbooks/blah/metadata.rb\n"
|