knife-essentials 0.8.1 → 0.8.2
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.
- data/lib/chef/knife/delete_essentials.rb +3 -3
- data/lib/chef/knife/deps_essentials.rb +19 -9
- data/lib/chef/knife/diff_essentials.rb +2 -2
- data/lib/chef/knife/download_essentials.rb +2 -2
- data/lib/chef/knife/list_essentials.rb +61 -29
- data/lib/chef/knife/raw_essentials.rb +5 -5
- data/lib/chef/knife/show_essentials.rb +4 -4
- data/lib/chef/knife/upload_essentials.rb +2 -2
- data/lib/chef_fs/file_system.rb +27 -27
- data/lib/chef_fs/file_system/base_fs_object.rb +6 -1
- data/lib/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +37 -0
- data/lib/chef_fs/file_system/chef_repository_file_system_entry.rb +28 -43
- data/lib/chef_fs/file_system/chef_repository_file_system_root_dir.rb +6 -1
- data/lib/chef_fs/knife.rb +8 -3
- data/lib/chef_fs/version.rb +1 -1
- data/spec/chef_fs/file_system_spec.rb +2 -2
- data/spec/integration/chef_repository_file_system_spec.rb +650 -0
- data/spec/integration/deps_spec.rb +314 -0
- data/spec/integration/list_spec.rb +315 -0
- data/spec/support/integration_helper.rb +95 -0
- data/spec/support/knife_support.rb +92 -0
- data/spec/support/stickywicket.pem +27 -0
- metadata +26 -3
@@ -0,0 +1,314 @@
|
|
1
|
+
require 'support/integration_helper'
|
2
|
+
require 'chef/knife/deps_essentials'
|
3
|
+
|
4
|
+
describe 'knife deps' do
|
5
|
+
extend IntegrationSupport
|
6
|
+
include KnifeSupport
|
7
|
+
|
8
|
+
context 'remote' do
|
9
|
+
when_the_chef_server 'has a role with no run_list' do
|
10
|
+
role 'starring', {}
|
11
|
+
it 'knife deps reports no dependencies' do
|
12
|
+
knife('deps --remote /roles/starring.json').should_succeed "/roles/starring.json\n"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
when_the_chef_server 'has a role with a default run_list' do
|
17
|
+
role 'starring', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) }
|
18
|
+
role 'minor', {}
|
19
|
+
cookbook 'quiche', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'default.rb' => '' } }
|
20
|
+
cookbook 'soup', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'chicken.rb' => '' } }
|
21
|
+
it 'knife deps reports all dependencies' do
|
22
|
+
knife('deps --remote /roles/starring.json').should_succeed <<EOM
|
23
|
+
/roles/minor.json
|
24
|
+
/cookbooks/quiche
|
25
|
+
/cookbooks/soup
|
26
|
+
/roles/starring.json
|
27
|
+
EOM
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
when_the_chef_server 'has a role with an env_run_list' do
|
32
|
+
role 'starring', { 'env_run_lists' => { 'desert' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } }
|
33
|
+
role 'minor', {}
|
34
|
+
cookbook 'quiche', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'default.rb' => '' } }
|
35
|
+
cookbook 'soup', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'chicken.rb' => '' } }
|
36
|
+
it 'knife deps reports all dependencies' do
|
37
|
+
knife('deps --remote /roles/starring.json').should_succeed <<EOM
|
38
|
+
/roles/minor.json
|
39
|
+
/cookbooks/quiche
|
40
|
+
/cookbooks/soup
|
41
|
+
/roles/starring.json
|
42
|
+
EOM
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
when_the_chef_server 'has a node with no environment or run_list' do
|
47
|
+
node 'mort', {}
|
48
|
+
it 'knife deps reports just the node' do
|
49
|
+
knife('deps --remote --repo-mode=everything /nodes/mort.json').should_succeed "/nodes/mort.json\n"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
when_the_chef_server 'has a node with an environment' do
|
53
|
+
environment 'desert', {}
|
54
|
+
node 'mort', { 'chef_environment' => 'desert' }
|
55
|
+
it 'knife deps reports just the node' do
|
56
|
+
knife('deps --remote --repo-mode=everything /nodes/mort.json').should_succeed "/environments/desert.json\n/nodes/mort.json\n"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
when_the_chef_server 'has a node with roles and recipes in its run_list' do
|
60
|
+
role 'minor', {}
|
61
|
+
cookbook 'quiche', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'default.rb' => '' } }
|
62
|
+
cookbook 'soup', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'chicken.rb' => '' } }
|
63
|
+
node 'mort', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) }
|
64
|
+
it 'knife deps reports just the node' do
|
65
|
+
knife('deps --remote --repo-mode=everything /nodes/mort.json').should_succeed <<EOM
|
66
|
+
/roles/minor.json
|
67
|
+
/cookbooks/quiche
|
68
|
+
/cookbooks/soup
|
69
|
+
/nodes/mort.json
|
70
|
+
EOM
|
71
|
+
end
|
72
|
+
end
|
73
|
+
when_the_chef_server 'has a cookbook with no dependencies' do
|
74
|
+
cookbook 'quiche', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'default.rb' => '' } }
|
75
|
+
it 'knife deps reports just the cookbook' do
|
76
|
+
knife('deps --remote /cookbooks/quiche').should_succeed "/cookbooks/quiche\n"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
when_the_chef_server 'has a cookbook with dependencies' do
|
80
|
+
cookbook 'kettle', '1.0.0', { 'metadata.rb' => '' }
|
81
|
+
cookbook 'quiche', '1.0.0', { 'metadata.rb' => 'depends "kettle"', 'recipes' => { 'default.rb' => '' } }
|
82
|
+
it 'knife deps reports just the cookbook' do
|
83
|
+
knife('deps --remote /cookbooks/quiche').should_succeed "/cookbooks/kettle\n/cookbooks/quiche\n"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
when_the_chef_server 'has a data bag' do
|
87
|
+
data_bag 'bag', { 'item' => {} }
|
88
|
+
it 'knife deps reports just the data bag' do
|
89
|
+
knife('deps --remote /data_bags/bag/item.json').should_succeed "/data_bags/bag/item.json\n"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
when_the_chef_server 'has an environment' do
|
93
|
+
environment 'desert', {}
|
94
|
+
it 'knife deps reports just the environment' do
|
95
|
+
knife('deps --remote /environments/desert.json').should_succeed "/environments/desert.json\n"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
when_the_chef_server 'has a deep dependency tree' do
|
99
|
+
role 'starring', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) }
|
100
|
+
role 'minor', {}
|
101
|
+
cookbook 'quiche', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'default.rb' => '' } }
|
102
|
+
cookbook 'soup', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'chicken.rb' => '' } }
|
103
|
+
environment 'desert', {}
|
104
|
+
node 'mort', { 'chef_environment' => 'desert', 'run_list' => [ 'role[starring]' ] }
|
105
|
+
node 'bart', { 'run_list' => [ 'role[minor]' ] }
|
106
|
+
|
107
|
+
it 'knife deps reports all dependencies' do
|
108
|
+
knife('deps --remote --repo-mode=everything /nodes/mort.json').should_succeed <<EOM
|
109
|
+
/environments/desert.json
|
110
|
+
/roles/minor.json
|
111
|
+
/cookbooks/quiche
|
112
|
+
/cookbooks/soup
|
113
|
+
/roles/starring.json
|
114
|
+
/nodes/mort.json
|
115
|
+
EOM
|
116
|
+
end
|
117
|
+
it 'knife deps * reports all dependencies of all things' do
|
118
|
+
knife('deps --remote --repo-mode=everything /nodes/*').should_succeed <<EOM
|
119
|
+
/roles/minor.json
|
120
|
+
/nodes/bart.json
|
121
|
+
/environments/desert.json
|
122
|
+
/cookbooks/quiche
|
123
|
+
/cookbooks/soup
|
124
|
+
/roles/starring.json
|
125
|
+
/nodes/mort.json
|
126
|
+
EOM
|
127
|
+
end
|
128
|
+
it 'knife deps a b reports all dependencies of a and b' do
|
129
|
+
knife('deps --remote --repo-mode=everything /nodes/bart.json /nodes/mort.json').should_succeed <<EOM
|
130
|
+
/roles/minor.json
|
131
|
+
/nodes/bart.json
|
132
|
+
/environments/desert.json
|
133
|
+
/cookbooks/quiche
|
134
|
+
/cookbooks/soup
|
135
|
+
/roles/starring.json
|
136
|
+
/nodes/mort.json
|
137
|
+
EOM
|
138
|
+
end
|
139
|
+
it 'knife deps --tree /* shows dependencies in a tree' do
|
140
|
+
knife('deps --remote --tree --repo-mode=everything /nodes/*').should_succeed <<EOM
|
141
|
+
/nodes/bart.json
|
142
|
+
/roles/minor.json
|
143
|
+
/nodes/mort.json
|
144
|
+
/environments/desert.json
|
145
|
+
/roles/starring.json
|
146
|
+
/roles/minor.json
|
147
|
+
/cookbooks/quiche
|
148
|
+
/cookbooks/soup
|
149
|
+
EOM
|
150
|
+
end
|
151
|
+
it 'knife deps --tree --no-recurse shows only the first level of dependencies' do
|
152
|
+
knife('deps --remote --tree --no-recurse --repo-mode=everything /nodes/*').should_succeed <<EOM
|
153
|
+
/nodes/bart.json
|
154
|
+
/roles/minor.json
|
155
|
+
/nodes/mort.json
|
156
|
+
/environments/desert.json
|
157
|
+
/roles/starring.json
|
158
|
+
EOM
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
context 'circular dependencies' do
|
163
|
+
when_the_chef_server 'has cookbooks with circular dependencies' do
|
164
|
+
cookbook 'foo', '1.0.0', { 'metadata.rb' => 'depends "bar"' }
|
165
|
+
cookbook 'bar', '1.0.0', { 'metadata.rb' => 'depends "baz"' }
|
166
|
+
cookbook 'baz', '1.0.0', { 'metadata.rb' => 'depends "foo"' }
|
167
|
+
cookbook 'self', '1.0.0', { 'metadata.rb' => 'depends "self"' }
|
168
|
+
it 'knife deps prints each once' do
|
169
|
+
knife('deps --remote /cookbooks/foo /cookbooks/self').should_succeed <<EOM
|
170
|
+
/cookbooks/baz
|
171
|
+
/cookbooks/bar
|
172
|
+
/cookbooks/foo
|
173
|
+
/cookbooks/self
|
174
|
+
EOM
|
175
|
+
end
|
176
|
+
it 'knife deps --tree prints each once' do
|
177
|
+
knife('deps --remote --tree /cookbooks/foo /cookbooks/self').should_succeed <<EOM
|
178
|
+
/cookbooks/foo
|
179
|
+
/cookbooks/bar
|
180
|
+
/cookbooks/baz
|
181
|
+
/cookbooks/foo
|
182
|
+
/cookbooks/self
|
183
|
+
/cookbooks/self
|
184
|
+
EOM
|
185
|
+
end
|
186
|
+
end
|
187
|
+
when_the_chef_server 'has roles with circular dependencies' do
|
188
|
+
role 'foo', { 'run_list' => [ 'role[bar]' ] }
|
189
|
+
role 'bar', { 'run_list' => [ 'role[baz]' ] }
|
190
|
+
role 'baz', { 'run_list' => [ 'role[foo]' ] }
|
191
|
+
role 'self', { 'run_list' => [ 'role[self]' ] }
|
192
|
+
it 'knife deps prints each once' do
|
193
|
+
knife('deps --remote /roles/foo.json /roles/self.json').should_succeed <<EOM
|
194
|
+
/roles/baz.json
|
195
|
+
/roles/bar.json
|
196
|
+
/roles/foo.json
|
197
|
+
/roles/self.json
|
198
|
+
EOM
|
199
|
+
end
|
200
|
+
it 'knife deps --tree prints each once' do
|
201
|
+
knife('deps --remote --tree /roles/foo.json /roles/self.json') do
|
202
|
+
stdout.should == "/roles/foo.json\n /roles/bar.json\n /roles/baz.json\n /roles/foo.json\n/roles/self.json\n /roles/self.json\n"
|
203
|
+
stderr.should == "WARNING: No knife configuration file found\n"
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
context 'missing objects' do
|
210
|
+
when_the_chef_server 'is empty' do
|
211
|
+
it 'knife deps /blah reports an error' do
|
212
|
+
knife('deps --remote /blah').should_fail(
|
213
|
+
:exit_code => 2,
|
214
|
+
:stdout => "/blah\n",
|
215
|
+
:stderr => "ERROR: /blah: No such file or directory\n"
|
216
|
+
)
|
217
|
+
end
|
218
|
+
it 'knife deps /roles/x.json reports an error' do
|
219
|
+
knife('deps --remote /roles/x.json').should_fail(
|
220
|
+
:exit_code => 2,
|
221
|
+
:stdout => "/roles/x.json\n",
|
222
|
+
:stderr => "ERROR: /roles/x.json: No such file or directory\n"
|
223
|
+
)
|
224
|
+
end
|
225
|
+
it 'knife deps /nodes/x.json reports an error' do
|
226
|
+
knife('deps --remote --repo-mode=everything /nodes/x.json').should_fail(
|
227
|
+
:exit_code => 2,
|
228
|
+
:stdout => "/nodes/x.json\n",
|
229
|
+
:stderr => "ERROR: /nodes/x.json: No such file or directory\n"
|
230
|
+
)
|
231
|
+
end
|
232
|
+
it 'knife deps /environments/x.json reports an error' do
|
233
|
+
knife('deps --remote /environments/x.json').should_fail(
|
234
|
+
:exit_code => 2,
|
235
|
+
:stdout => "/environments/x.json\n",
|
236
|
+
:stderr => "ERROR: /environments/x.json: No such file or directory\n"
|
237
|
+
)
|
238
|
+
end
|
239
|
+
it 'knife deps /cookbooks/x reports an error' do
|
240
|
+
knife('deps --remote /cookbooks/x').should_fail(
|
241
|
+
:exit_code => 2,
|
242
|
+
:stdout => "/cookbooks/x\n",
|
243
|
+
:stderr => "ERROR: /cookbooks/x: No such file or directory\n"
|
244
|
+
)
|
245
|
+
end
|
246
|
+
it 'knife deps /data_bags/bag/item reports an error' do
|
247
|
+
knife('deps --remote /data_bags/bag/item').should_fail(
|
248
|
+
:exit_code => 2,
|
249
|
+
:stdout => "/data_bags/bag/item\n",
|
250
|
+
:stderr => "ERROR: /data_bags/bag/item: No such file or directory\n"
|
251
|
+
)
|
252
|
+
end
|
253
|
+
end
|
254
|
+
when_the_chef_server 'is missing a dependent cookbook' do
|
255
|
+
role 'starring', { 'run_list' => [ 'recipe[quiche]'] }
|
256
|
+
it 'knife deps reports the cookbook, along with an error' do
|
257
|
+
knife('deps --remote /roles/starring.json').should_fail(
|
258
|
+
:exit_code => 2,
|
259
|
+
:stdout => "/cookbooks/quiche\n/roles/starring.json\n",
|
260
|
+
:stderr => "ERROR: /cookbooks/quiche: No such file or directory\n"
|
261
|
+
)
|
262
|
+
end
|
263
|
+
end
|
264
|
+
when_the_chef_server 'is missing a dependent environment' do
|
265
|
+
node 'mort', { 'chef_environment' => 'desert' }
|
266
|
+
it 'knife deps reports the environment, along with an error' do
|
267
|
+
knife('deps --remote --repo-mode=everything /nodes/mort.json').should_fail(
|
268
|
+
:exit_code => 2,
|
269
|
+
:stdout => "/environments/desert.json\n/nodes/mort.json\n",
|
270
|
+
:stderr => "ERROR: /environments/desert.json: No such file or directory\n"
|
271
|
+
)
|
272
|
+
end
|
273
|
+
end
|
274
|
+
when_the_chef_server 'is missing a dependent role' do
|
275
|
+
role 'starring', { 'run_list' => [ 'role[minor]'] }
|
276
|
+
it 'knife deps reports the role, along with an error' do
|
277
|
+
knife('deps --remote /roles/starring.json').should_fail(
|
278
|
+
:exit_code => 2,
|
279
|
+
:stdout => "/roles/minor.json\n/roles/starring.json\n",
|
280
|
+
:stderr => "ERROR: /roles/minor.json: No such file or directory\n"
|
281
|
+
)
|
282
|
+
end
|
283
|
+
end
|
284
|
+
end
|
285
|
+
context 'invalid objects' do
|
286
|
+
when_the_chef_server 'is empty' do
|
287
|
+
it 'knife deps / reports an error' do
|
288
|
+
knife('deps --remote /').should_succeed("/\n")
|
289
|
+
end
|
290
|
+
it 'knife deps /roles reports an error' do
|
291
|
+
knife('deps --remote /roles').should_succeed("/roles\n")
|
292
|
+
end
|
293
|
+
end
|
294
|
+
when_the_chef_server 'has a data bag' do
|
295
|
+
data_bag 'bag', { 'item' => {} }
|
296
|
+
it 'knife deps /data_bags/bag shows no dependencies' do
|
297
|
+
knife('deps --remote /data_bags/bag').should_succeed("/data_bags/bag\n")
|
298
|
+
end
|
299
|
+
end
|
300
|
+
when_the_chef_server 'has a cookbook' do
|
301
|
+
cookbook 'blah', '1.0.0', { 'metadata.rb' => '' }
|
302
|
+
it 'knife deps on a cookbook file shows no dependencies' do
|
303
|
+
knife('deps --remote /cookbooks/blah/metadata.rb').should_succeed(
|
304
|
+
"/cookbooks/blah/metadata.rb\n"
|
305
|
+
)
|
306
|
+
end
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
it 'knife deps --no-recurse reports an error' do
|
311
|
+
knife('deps --no-recurse /').should_fail("ERROR: --no-recurse requires --tree\n")
|
312
|
+
end
|
313
|
+
end
|
314
|
+
end
|
@@ -0,0 +1,315 @@
|
|
1
|
+
require 'support/integration_helper'
|
2
|
+
require 'chef/knife/list_essentials'
|
3
|
+
|
4
|
+
describe 'knife list' do
|
5
|
+
extend IntegrationSupport
|
6
|
+
include KnifeSupport
|
7
|
+
|
8
|
+
when_the_chef_server "is empty" do
|
9
|
+
it "knife list / returns all top level directories" do
|
10
|
+
knife('list /').should_succeed <<EOM
|
11
|
+
/cookbooks
|
12
|
+
/data_bags
|
13
|
+
/environments
|
14
|
+
/roles
|
15
|
+
EOM
|
16
|
+
end
|
17
|
+
|
18
|
+
it "knife list -R / returns everything" do
|
19
|
+
knife('list -R /').should_succeed <<EOM
|
20
|
+
/:
|
21
|
+
cookbooks
|
22
|
+
data_bags
|
23
|
+
environments
|
24
|
+
roles
|
25
|
+
|
26
|
+
/cookbooks:
|
27
|
+
|
28
|
+
/data_bags:
|
29
|
+
|
30
|
+
/environments:
|
31
|
+
_default.json
|
32
|
+
|
33
|
+
/roles:
|
34
|
+
EOM
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
when_the_chef_server "has plenty of stuff in it" do
|
39
|
+
client 'client1', {}
|
40
|
+
client 'client2', {}
|
41
|
+
cookbook 'cookbook1', '1.0.0', { 'metadata.rb' => '' }
|
42
|
+
cookbook 'cookbook2', '1.0.1', { 'metadata.rb' => '', 'recipes' => { 'default.rb' => '' } }
|
43
|
+
data_bag 'bag1', { 'item1' => {}, 'item2' => {} }
|
44
|
+
data_bag 'bag2', { 'item1' => {}, 'item2' => {} }
|
45
|
+
environment 'environment1', {}
|
46
|
+
environment 'environment2', {}
|
47
|
+
node 'node1', {}
|
48
|
+
node 'node2', {}
|
49
|
+
role 'role1', {}
|
50
|
+
role 'role2', {}
|
51
|
+
user 'user1', {}
|
52
|
+
user 'user2', {}
|
53
|
+
|
54
|
+
it "knife list / returns all top level directories" do
|
55
|
+
knife('list /').should_succeed <<EOM
|
56
|
+
/cookbooks
|
57
|
+
/data_bags
|
58
|
+
/environments
|
59
|
+
/roles
|
60
|
+
EOM
|
61
|
+
end
|
62
|
+
|
63
|
+
it "knife list -R / returns everything" do
|
64
|
+
knife('list -R /').should_succeed <<EOM
|
65
|
+
/:
|
66
|
+
cookbooks
|
67
|
+
data_bags
|
68
|
+
environments
|
69
|
+
roles
|
70
|
+
|
71
|
+
/cookbooks:
|
72
|
+
cookbook1
|
73
|
+
cookbook2
|
74
|
+
|
75
|
+
/cookbooks/cookbook1:
|
76
|
+
metadata.rb
|
77
|
+
|
78
|
+
/cookbooks/cookbook2:
|
79
|
+
metadata.rb
|
80
|
+
recipes
|
81
|
+
|
82
|
+
/cookbooks/cookbook2/recipes:
|
83
|
+
default.rb
|
84
|
+
|
85
|
+
/data_bags:
|
86
|
+
bag1
|
87
|
+
bag2
|
88
|
+
|
89
|
+
/data_bags/bag1:
|
90
|
+
item1.json
|
91
|
+
item2.json
|
92
|
+
|
93
|
+
/data_bags/bag2:
|
94
|
+
item1.json
|
95
|
+
item2.json
|
96
|
+
|
97
|
+
/environments:
|
98
|
+
_default.json
|
99
|
+
environment1.json
|
100
|
+
environment2.json
|
101
|
+
|
102
|
+
/roles:
|
103
|
+
role1.json
|
104
|
+
role2.json
|
105
|
+
EOM
|
106
|
+
end
|
107
|
+
|
108
|
+
it "knife list -R --flat / returns everything" do
|
109
|
+
knife('list -R --flat /').should_succeed <<EOM
|
110
|
+
/cookbooks
|
111
|
+
/cookbooks/cookbook1
|
112
|
+
/cookbooks/cookbook1/metadata.rb
|
113
|
+
/cookbooks/cookbook2
|
114
|
+
/cookbooks/cookbook2/metadata.rb
|
115
|
+
/cookbooks/cookbook2/recipes
|
116
|
+
/cookbooks/cookbook2/recipes/default.rb
|
117
|
+
/data_bags
|
118
|
+
/data_bags/bag1
|
119
|
+
/data_bags/bag1/item1.json
|
120
|
+
/data_bags/bag1/item2.json
|
121
|
+
/data_bags/bag2
|
122
|
+
/data_bags/bag2/item1.json
|
123
|
+
/data_bags/bag2/item2.json
|
124
|
+
/environments
|
125
|
+
/environments/_default.json
|
126
|
+
/environments/environment1.json
|
127
|
+
/environments/environment2.json
|
128
|
+
/roles
|
129
|
+
/roles/role1.json
|
130
|
+
/roles/role2.json
|
131
|
+
EOM
|
132
|
+
end
|
133
|
+
|
134
|
+
it "knife list -Rp --flat / returns everything" do
|
135
|
+
knife('list -Rp --flat /').should_succeed <<EOM
|
136
|
+
/cookbooks/
|
137
|
+
/cookbooks/cookbook1/
|
138
|
+
/cookbooks/cookbook1/metadata.rb
|
139
|
+
/cookbooks/cookbook2/
|
140
|
+
/cookbooks/cookbook2/metadata.rb
|
141
|
+
/cookbooks/cookbook2/recipes/
|
142
|
+
/cookbooks/cookbook2/recipes/default.rb
|
143
|
+
/data_bags/
|
144
|
+
/data_bags/bag1/
|
145
|
+
/data_bags/bag1/item1.json
|
146
|
+
/data_bags/bag1/item2.json
|
147
|
+
/data_bags/bag2/
|
148
|
+
/data_bags/bag2/item1.json
|
149
|
+
/data_bags/bag2/item2.json
|
150
|
+
/environments/
|
151
|
+
/environments/_default.json
|
152
|
+
/environments/environment1.json
|
153
|
+
/environments/environment2.json
|
154
|
+
/roles/
|
155
|
+
/roles/role1.json
|
156
|
+
/roles/role2.json
|
157
|
+
EOM
|
158
|
+
end
|
159
|
+
|
160
|
+
it "knife list /cookbooks returns the list of cookbooks" do
|
161
|
+
knife('list /cookbooks').should_succeed <<EOM
|
162
|
+
/cookbooks/cookbook1
|
163
|
+
/cookbooks/cookbook2
|
164
|
+
EOM
|
165
|
+
end
|
166
|
+
|
167
|
+
it "knife list /cookbooks/*2/*/*.rb returns the one file" do
|
168
|
+
knife('list /cookbooks/*2/*/*.rb').should_succeed "/cookbooks/cookbook2/recipes/default.rb\n"
|
169
|
+
end
|
170
|
+
|
171
|
+
it "knife list /**.rb returns all ruby files" do
|
172
|
+
knife('list /**.rb').should_succeed <<EOM
|
173
|
+
/cookbooks/cookbook1/metadata.rb
|
174
|
+
/cookbooks/cookbook2/metadata.rb
|
175
|
+
/cookbooks/cookbook2/recipes/default.rb
|
176
|
+
EOM
|
177
|
+
end
|
178
|
+
|
179
|
+
it "knife list /cookbooks/**.rb returns all ruby files" do
|
180
|
+
knife('list /cookbooks/**.rb').should_succeed <<EOM
|
181
|
+
/cookbooks/cookbook1/metadata.rb
|
182
|
+
/cookbooks/cookbook2/metadata.rb
|
183
|
+
/cookbooks/cookbook2/recipes/default.rb
|
184
|
+
EOM
|
185
|
+
end
|
186
|
+
|
187
|
+
it "knife list /**.json returns all json files" do
|
188
|
+
knife('list /**.json').should_succeed <<EOM
|
189
|
+
/data_bags/bag1/item1.json
|
190
|
+
/data_bags/bag1/item2.json
|
191
|
+
/data_bags/bag2/item1.json
|
192
|
+
/data_bags/bag2/item2.json
|
193
|
+
/environments/_default.json
|
194
|
+
/environments/environment1.json
|
195
|
+
/environments/environment2.json
|
196
|
+
/roles/role1.json
|
197
|
+
/roles/role2.json
|
198
|
+
EOM
|
199
|
+
end
|
200
|
+
|
201
|
+
it "knife list /data**.json returns all data bag json files" do
|
202
|
+
knife('list /data**.json').should_succeed <<EOM
|
203
|
+
/data_bags/bag1/item1.json
|
204
|
+
/data_bags/bag1/item2.json
|
205
|
+
/data_bags/bag2/item1.json
|
206
|
+
/data_bags/bag2/item2.json
|
207
|
+
EOM
|
208
|
+
end
|
209
|
+
|
210
|
+
it "knife list /environments/missing_file.json reports missing file" do
|
211
|
+
knife('list /environments/missing_file.json').should_fail "ERROR: /environments/missing_file.json: No such file or directory\n"
|
212
|
+
end
|
213
|
+
|
214
|
+
context "missing file/directory exact match tests" do
|
215
|
+
it "knife list /blarghle reports missing directory" do
|
216
|
+
knife('list /blarghle').should_fail "ERROR: /blarghle: No such file or directory\n"
|
217
|
+
end
|
218
|
+
|
219
|
+
it "knife list /roles/blarghle reports missing directory" do
|
220
|
+
knife('list /roles/blarghle').should_fail "ERROR: /roles/blarghle: No such file or directory\n"
|
221
|
+
end
|
222
|
+
|
223
|
+
it "knife list /roles/blarghle/blorghle reports missing directory" do
|
224
|
+
knife('list /roles/blarghle/blorghle').should_fail "ERROR: /roles/blarghle/blorghle: No such file or directory\n"
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
# TODO different cwd
|
229
|
+
end
|
230
|
+
|
231
|
+
context "--local" do
|
232
|
+
when_the_repository "is empty" do
|
233
|
+
it "knife list --local / returns nothing" do
|
234
|
+
knife('list --local /').should_succeed ""
|
235
|
+
end
|
236
|
+
|
237
|
+
it "knife list /roles returns nothing" do
|
238
|
+
knife('list --local /roles').should_fail "ERROR: /roles: No such file or directory\n"
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
when_the_repository "has a bunch of stuff" do
|
243
|
+
file 'clients/client1.json', {}
|
244
|
+
file 'clients/client2.json', {}
|
245
|
+
|
246
|
+
directory 'cookbooks/cookbook1' do
|
247
|
+
file 'metadata.rb', ''
|
248
|
+
end
|
249
|
+
directory 'cookbooks/cookbook2' do
|
250
|
+
file 'metadata.rb', ''
|
251
|
+
file 'recipes/default.rb', ''
|
252
|
+
end
|
253
|
+
|
254
|
+
directory 'data_bags' do
|
255
|
+
directory 'bag1' do
|
256
|
+
file 'item1.json', {}
|
257
|
+
file 'item2.json', {}
|
258
|
+
end
|
259
|
+
directory 'bag2' do
|
260
|
+
file 'item1.json', {}
|
261
|
+
file 'item2.json', {}
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
file 'environments/environment1.json', {}
|
266
|
+
file 'environments/environment2.json', {}
|
267
|
+
file 'nodes/node1.json', {}
|
268
|
+
file 'nodes/node2.json', {}
|
269
|
+
file 'roles/role1.json', {}
|
270
|
+
file 'roles/role2.json', {}
|
271
|
+
file 'users/user1.json', {}
|
272
|
+
file 'users/user2.json', {}
|
273
|
+
|
274
|
+
it "knife list -Rp --flat / returns everything" do
|
275
|
+
knife('list -Rp --local --flat /').should_succeed <<EOM
|
276
|
+
/cookbooks/
|
277
|
+
/cookbooks/cookbook1/
|
278
|
+
/cookbooks/cookbook1/metadata.rb
|
279
|
+
/cookbooks/cookbook2/
|
280
|
+
/cookbooks/cookbook2/metadata.rb
|
281
|
+
/cookbooks/cookbook2/recipes/
|
282
|
+
/cookbooks/cookbook2/recipes/default.rb
|
283
|
+
/data_bags/
|
284
|
+
/data_bags/bag1/
|
285
|
+
/data_bags/bag1/item1.json
|
286
|
+
/data_bags/bag1/item2.json
|
287
|
+
/data_bags/bag2/
|
288
|
+
/data_bags/bag2/item1.json
|
289
|
+
/data_bags/bag2/item2.json
|
290
|
+
/environments/
|
291
|
+
/environments/environment1.json
|
292
|
+
/environments/environment2.json
|
293
|
+
/roles/
|
294
|
+
/roles/role1.json
|
295
|
+
/roles/role2.json
|
296
|
+
EOM
|
297
|
+
end
|
298
|
+
|
299
|
+
context "missing file/directory tests" do
|
300
|
+
it "knife list --local /blarghle reports missing directory" do
|
301
|
+
knife('list --local /blarghle').should_fail "ERROR: /blarghle: No such file or directory\n"
|
302
|
+
end
|
303
|
+
|
304
|
+
it "knife list /roles/blarghle reports missing directory" do
|
305
|
+
knife('list --local /roles/blarghle').should_fail "ERROR: /roles/blarghle: No such file or directory\n"
|
306
|
+
end
|
307
|
+
|
308
|
+
it "knife list /roles/blarghle/blorghle reports missing directory" do
|
309
|
+
knife('list --local /roles/blarghle/blorghle').should_fail "ERROR: /roles/blarghle/blorghle: No such file or directory\n"
|
310
|
+
end
|
311
|
+
end
|
312
|
+
end
|
313
|
+
# TODO different cwd
|
314
|
+
end
|
315
|
+
end
|