knife-essentials 0.9.8 → 1.0.0.beta1

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.
@@ -8,20 +8,30 @@ describe 'knife list' do
8
8
  when_the_chef_server "is empty" do
9
9
  it "knife list / returns all top level directories" do
10
10
  knife('list /').should_succeed <<EOM
11
+ /clients
11
12
  /cookbooks
12
13
  /data_bags
13
14
  /environments
15
+ /nodes
14
16
  /roles
17
+ /users
15
18
  EOM
16
19
  end
17
20
 
18
21
  it "knife list -R / returns everything" do
19
22
  knife('list -R /').should_succeed <<EOM
20
23
  /:
24
+ clients
21
25
  cookbooks
22
26
  data_bags
23
27
  environments
28
+ nodes
24
29
  roles
30
+ users
31
+
32
+ /clients:
33
+ chef-validator.json
34
+ chef-webui.json
25
35
 
26
36
  /cookbooks:
27
37
 
@@ -30,7 +40,12 @@ roles
30
40
  /environments:
31
41
  _default.json
32
42
 
43
+ /nodes:
44
+
33
45
  /roles:
46
+
47
+ /users:
48
+ admin.json
34
49
  EOM
35
50
  end
36
51
  end
@@ -53,20 +68,32 @@ EOM
53
68
 
54
69
  it "knife list / returns all top level directories" do
55
70
  knife('list /').should_succeed <<EOM
71
+ /clients
56
72
  /cookbooks
57
73
  /data_bags
58
74
  /environments
75
+ /nodes
59
76
  /roles
77
+ /users
60
78
  EOM
61
79
  end
62
80
 
63
81
  it "knife list -R / returns everything" do
64
82
  knife('list -R /').should_succeed <<EOM
65
83
  /:
84
+ clients
66
85
  cookbooks
67
86
  data_bags
68
87
  environments
88
+ nodes
69
89
  roles
90
+ users
91
+
92
+ /clients:
93
+ chef-validator.json
94
+ chef-webui.json
95
+ client1.json
96
+ client2.json
70
97
 
71
98
  /cookbooks:
72
99
  cookbook1
@@ -99,14 +126,28 @@ _default.json
99
126
  environment1.json
100
127
  environment2.json
101
128
 
129
+ /nodes:
130
+ node1.json
131
+ node2.json
132
+
102
133
  /roles:
103
134
  role1.json
104
135
  role2.json
136
+
137
+ /users:
138
+ admin.json
139
+ user1.json
140
+ user2.json
105
141
  EOM
106
142
  end
107
143
 
108
144
  it "knife list -R --flat / returns everything" do
109
145
  knife('list -R --flat /').should_succeed <<EOM
146
+ /clients
147
+ /clients/chef-validator.json
148
+ /clients/chef-webui.json
149
+ /clients/client1.json
150
+ /clients/client2.json
110
151
  /cookbooks
111
152
  /cookbooks/cookbook1
112
153
  /cookbooks/cookbook1/metadata.rb
@@ -125,14 +166,26 @@ EOM
125
166
  /environments/_default.json
126
167
  /environments/environment1.json
127
168
  /environments/environment2.json
169
+ /nodes
170
+ /nodes/node1.json
171
+ /nodes/node2.json
128
172
  /roles
129
173
  /roles/role1.json
130
174
  /roles/role2.json
175
+ /users
176
+ /users/admin.json
177
+ /users/user1.json
178
+ /users/user2.json
131
179
  EOM
132
180
  end
133
181
 
134
182
  it "knife list -Rfp / returns everything" do
135
183
  knife('list -Rfp /').should_succeed <<EOM
184
+ /clients/
185
+ /clients/chef-validator.json
186
+ /clients/chef-webui.json
187
+ /clients/client1.json
188
+ /clients/client2.json
136
189
  /cookbooks/
137
190
  /cookbooks/cookbook1/
138
191
  /cookbooks/cookbook1/metadata.rb
@@ -151,9 +204,16 @@ EOM
151
204
  /environments/_default.json
152
205
  /environments/environment1.json
153
206
  /environments/environment2.json
207
+ /nodes/
208
+ /nodes/node1.json
209
+ /nodes/node2.json
154
210
  /roles/
155
211
  /roles/role1.json
156
212
  /roles/role2.json
213
+ /users/
214
+ /users/admin.json
215
+ /users/user1.json
216
+ /users/user2.json
157
217
  EOM
158
218
  end
159
219
 
@@ -186,6 +246,10 @@ EOM
186
246
 
187
247
  it "knife list /**.json returns all json files" do
188
248
  knife('list /**.json').should_succeed <<EOM
249
+ /clients/chef-validator.json
250
+ /clients/chef-webui.json
251
+ /clients/client1.json
252
+ /clients/client2.json
189
253
  /data_bags/bag1/item1.json
190
254
  /data_bags/bag1/item2.json
191
255
  /data_bags/bag2/item1.json
@@ -193,8 +257,13 @@ EOM
193
257
  /environments/_default.json
194
258
  /environments/environment1.json
195
259
  /environments/environment2.json
260
+ /nodes/node1.json
261
+ /nodes/node2.json
196
262
  /roles/role1.json
197
263
  /roles/role2.json
264
+ /users/admin.json
265
+ /users/user1.json
266
+ /users/user2.json
198
267
  EOM
199
268
  end
200
269
 
@@ -232,6 +301,11 @@ EOM
232
301
 
233
302
  it "knife list -Rfp returns everything" do
234
303
  knife('list -Rfp').should_succeed <<EOM
304
+ clients/
305
+ clients/chef-validator.json
306
+ clients/chef-webui.json
307
+ clients/client1.json
308
+ clients/client2.json
235
309
  cookbooks/
236
310
  cookbooks/cookbook1/
237
311
  cookbooks/cookbook1/metadata.rb
@@ -250,9 +324,16 @@ environments/
250
324
  environments/_default.json
251
325
  environments/environment1.json
252
326
  environments/environment2.json
327
+ nodes/
328
+ nodes/node1.json
329
+ nodes/node2.json
253
330
  roles/
254
331
  roles/role1.json
255
332
  roles/role2.json
333
+ users/
334
+ users/admin.json
335
+ users/user1.json
336
+ users/user2.json
256
337
  EOM
257
338
  end
258
339
  end
@@ -265,6 +346,11 @@ EOM
265
346
 
266
347
  it "knife list -Rfp / returns everything" do
267
348
  knife('list -Rfp /').should_succeed <<EOM
349
+ /clients/
350
+ /clients/chef-validator.json
351
+ /clients/chef-webui.json
352
+ /clients/client1.json
353
+ /clients/client2.json
268
354
  ./
269
355
  cookbook1/
270
356
  cookbook1/metadata.rb
@@ -283,14 +369,26 @@ cookbook2/recipes/default.rb
283
369
  /environments/_default.json
284
370
  /environments/environment1.json
285
371
  /environments/environment2.json
372
+ /nodes/
373
+ /nodes/node1.json
374
+ /nodes/node2.json
286
375
  /roles/
287
376
  /roles/role1.json
288
377
  /roles/role2.json
378
+ /users/
379
+ /users/admin.json
380
+ /users/user1.json
381
+ /users/user2.json
289
382
  EOM
290
383
  end
291
384
 
292
385
  it "knife list -Rfp .. returns everything" do
293
386
  knife('list -Rfp ..').should_succeed <<EOM
387
+ /clients/
388
+ /clients/chef-validator.json
389
+ /clients/chef-webui.json
390
+ /clients/client1.json
391
+ /clients/client2.json
294
392
  ./
295
393
  cookbook1/
296
394
  cookbook1/metadata.rb
@@ -309,9 +407,16 @@ cookbook2/recipes/default.rb
309
407
  /environments/_default.json
310
408
  /environments/environment1.json
311
409
  /environments/environment2.json
410
+ /nodes/
411
+ /nodes/node1.json
412
+ /nodes/node2.json
312
413
  /roles/
313
414
  /roles/role1.json
314
415
  /roles/role2.json
416
+ /users/
417
+ /users/admin.json
418
+ /users/user1.json
419
+ /users/user2.json
315
420
  EOM
316
421
  end
317
422
 
@@ -461,6 +566,9 @@ EOM
461
566
 
462
567
  it "knife list -Rfp / returns everything" do
463
568
  knife('list -Rp --local --flat /').should_succeed <<EOM
569
+ /clients/
570
+ /clients/client1.json
571
+ /clients/client2.json
464
572
  /cookbooks/
465
573
  /cookbooks/cookbook1/
466
574
  /cookbooks/cookbook1/metadata.rb
@@ -478,9 +586,15 @@ EOM
478
586
  /environments/
479
587
  /environments/environment1.json
480
588
  /environments/environment2.json
589
+ /nodes/
590
+ /nodes/node1.json
591
+ /nodes/node2.json
481
592
  /roles/
482
593
  /roles/role1.json
483
594
  /roles/role2.json
595
+ /users/
596
+ /users/user1.json
597
+ /users/user2.json
484
598
  EOM
485
599
  end
486
600
 
@@ -0,0 +1,49 @@
1
+ require 'thin'
2
+ require 'support/integration_helper'
3
+ require 'chef/knife/list_essentials'
4
+
5
+ describe 'redirection' do
6
+ extend IntegrationSupport
7
+ include KnifeSupport
8
+
9
+ when_the_chef_server 'has a role' do
10
+ role 'x', {}
11
+
12
+ context 'and another server redirects to it with 302' do
13
+ before :each do
14
+ @real_chef_server_url = Chef::Config.chef_server_url
15
+ Chef::Config.chef_server_url = "http://127.0.0.1:9018"
16
+ app = lambda do |env|
17
+ [302, {'Content-Type' => 'text','Location' => "#{@real_chef_server_url}#{env['PATH_INFO']}" }, ['302 found'] ]
18
+ end
19
+ @redirector_server = Thin::Server.new('127.0.0.1', 9018, app, { :signals => false })
20
+ @redirector_thread = Thread.new do
21
+ begin
22
+ @redirector_server.start
23
+ rescue
24
+ @server_error = $!
25
+ Chef::Log.error("#{$!.message}\n#{$!.backtrace.join("\n")}")
26
+ end
27
+ end
28
+ Timeout::timeout(5) do
29
+ until @redirector_server.running? || @server_error
30
+ sleep(0.01)
31
+ end
32
+ raise @server_error if @server_error
33
+ end
34
+ end
35
+
36
+ after :each do
37
+ Chef::Config.chef_server_url = @real_chef_server_url
38
+ @redirector_thread.kill
39
+ @redirector_thread.join(nil)
40
+ @redirector_thread = nil
41
+ @redirector_server = nil
42
+ end
43
+
44
+ it 'knife list /roles returns the role' do
45
+ knife('list /roles').should_succeed "/roles/x.json\n"
46
+ end
47
+ end
48
+ end
49
+ end
@@ -8,13 +8,13 @@ describe 'knife upload' do
8
8
 
9
9
  context 'without versioned cookbooks' do
10
10
  when_the_chef_server "has one of each thing" do
11
- client 'x', '{}'
11
+ client 'x', {}
12
12
  cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"' }
13
- data_bag 'x', { 'y' => '{}' }
14
- environment 'x', '{}'
15
- node 'x', '{}'
16
- role 'x', '{}'
17
- user 'x', '{}'
13
+ data_bag 'x', { 'y' => {} }
14
+ environment 'x', {}
15
+ node 'x', {}
16
+ role 'x', {}
17
+ user 'x', {}
18
18
 
19
19
  when_the_repository 'has only top-level directories' do
20
20
  directory 'clients'
@@ -28,20 +28,32 @@ describe 'knife upload' do
28
28
  it 'knife upload does nothing' do
29
29
  knife('upload /').should_succeed ''
30
30
  knife('diff --name-status /').should_succeed <<EOM
31
+ D\t/clients/chef-validator.json
32
+ D\t/clients/chef-webui.json
33
+ D\t/clients/x.json
31
34
  D\t/cookbooks/x
32
35
  D\t/data_bags/x
33
36
  D\t/environments/_default.json
34
37
  D\t/environments/x.json
38
+ D\t/nodes/x.json
35
39
  D\t/roles/x.json
40
+ D\t/users/admin.json
41
+ D\t/users/x.json
36
42
  EOM
37
43
  end
38
44
 
39
45
  it 'knife upload --purge deletes everything' do
40
46
  knife('upload --purge /').should_succeed(<<EOM, :stderr => "WARNING: /environments/_default.json cannot be deleted (default environment cannot be modified).\n")
47
+ Deleted extra entry /clients/chef-validator.json (purge is on)
48
+ Deleted extra entry /clients/chef-webui.json (purge is on)
49
+ Deleted extra entry /clients/x.json (purge is on)
41
50
  Deleted extra entry /cookbooks/x (purge is on)
42
51
  Deleted extra entry /data_bags/x (purge is on)
43
52
  Deleted extra entry /environments/x.json (purge is on)
53
+ Deleted extra entry /nodes/x.json (purge is on)
44
54
  Deleted extra entry /roles/x.json (purge is on)
55
+ Deleted extra entry /users/admin.json (purge is on)
56
+ Deleted extra entry /users/x.json (purge is on)
45
57
  EOM
46
58
  knife('diff --name-status /').should_succeed <<EOM
47
59
  D\t/environments/_default.json
@@ -50,66 +62,17 @@ EOM
50
62
  end
51
63
 
52
64
  when_the_repository 'has an identical copy of each thing' do
53
- file 'clients/x.json', <<EOM
54
- {}
55
- EOM
65
+ file 'clients/chef-validator.json', { 'validator' => true, 'public_key' => ChefZero::PUBLIC_KEY }
66
+ file 'clients/chef-webui.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY }
67
+ file 'clients/x.json', { 'public_key' => ChefZero::PUBLIC_KEY }
56
68
  file 'cookbooks/x/metadata.rb', 'version "1.0.0"'
57
- file 'data_bags/x/y.json', <<EOM
58
- {
59
- "id": "y"
60
- }
61
- EOM
62
- file 'environments/_default.json', <<EOM
63
- {
64
- "name": "_default",
65
- "description": "The default Chef environment",
66
- "cookbook_versions": {
67
- },
68
- "json_class": "Chef::Environment",
69
- "chef_type": "environment",
70
- "default_attributes": {
71
- },
72
- "override_attributes": {
73
- }
74
- }
75
- EOM
76
- file 'environments/x.json', <<EOM
77
- {
78
- "chef_type": "environment",
79
- "cookbook_versions": {
80
- },
81
- "default_attributes": {
82
- },
83
- "description": "",
84
- "json_class": "Chef::Environment",
85
- "name": "x",
86
- "override_attributes": {
87
- }
88
- }
89
- EOM
90
- file 'nodes/x.json', <<EOM
91
- {}
92
- EOM
93
- file 'roles/x.json', <<EOM
94
- {
95
- "chef_type": "role",
96
- "default_attributes": {
97
- },
98
- "description": "",
99
- "env_run_lists": {
100
- },
101
- "json_class": "Chef::Role",
102
- "name": "x",
103
- "override_attributes": {
104
- },
105
- "run_list": [
106
-
107
- ]
108
- }
109
- EOM
110
- file 'users/x.json', <<EOM
111
- {}
112
- EOM
69
+ file 'data_bags/x/y.json', {}
70
+ file 'environments/_default.json', { "description" => "The default Chef environment" }
71
+ file 'environments/x.json', {}
72
+ file 'nodes/x.json', {}
73
+ file 'roles/x.json', {}
74
+ file 'users/admin.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY }
75
+ file 'users/x.json', { 'public_key' => ChefZero::PUBLIC_KEY }
113
76
 
114
77
  it 'knife upload makes no changes' do
115
78
  knife('upload /cookbooks/x').should_succeed ''
@@ -122,23 +85,7 @@ EOM
122
85
  end
123
86
 
124
87
  context 'except the role file' do
125
- file 'roles/x.json', <<EOM
126
- {
127
- "chef_type": "role",
128
- "default_attributes": {
129
- },
130
- "description": "blarghle",
131
- "env_run_lists": {
132
- },
133
- "json_class": "Chef::Role",
134
- "name": "x",
135
- "override_attributes": {
136
- },
137
- "run_list": [
138
-
139
- ]
140
- }
141
- EOM
88
+ file 'roles/x.json', { 'description' => 'blarghle' }
142
89
  it 'knife upload changes the role' do
143
90
  knife('upload /').should_succeed "Updated /roles/x.json\n"
144
91
  knife('diff --name-status /').should_succeed ''
@@ -149,7 +96,7 @@ EOM
149
96
  file 'roles/x.json', <<EOM
150
97
  {
151
98
  "chef_type": "role",
152
- "default_attributes": {
99
+ "default_attributes": {
153
100
  },
154
101
  "env_run_lists": {
155
102
  },
@@ -170,62 +117,28 @@ EOM
170
117
  end
171
118
 
172
119
  context 'as well as one extra copy of each thing' do
173
- file 'clients/y.json', { 'name' => 'y' }
120
+ file 'clients/y.json', { 'public_key' => ChefZero::PUBLIC_KEY }
174
121
  file 'cookbooks/x/blah.rb', ''
175
122
  file 'cookbooks/y/metadata.rb', 'version "1.0.0"'
176
- file 'data_bags/x/z.json', <<EOM
177
- {
178
- "id": "z"
179
- }
180
- EOM
181
- file 'data_bags/y/zz.json', <<EOM
182
- {
183
- "id": "zz"
184
- }
185
- EOM
186
- file 'environments/y.json', <<EOM
187
- {
188
- "chef_type": "environment",
189
- "cookbook_versions": {
190
- },
191
- "default_attributes": {
192
- },
193
- "description": "",
194
- "json_class": "Chef::Environment",
195
- "name": "y",
196
- "override_attributes": {
197
- }
198
- }
199
- EOM
200
- file 'nodes/y.json', { 'name' => 'y' }
201
- file 'roles/y.json', <<EOM
202
- {
203
- "chef_type": "role",
204
- "default_attributes": {
205
- },
206
- "description": "",
207
- "env_run_lists": {
208
- },
209
- "json_class": "Chef::Role",
210
- "name": "y",
211
- "override_attributes": {
212
- },
213
- "run_list": [
214
-
215
- ]
216
- }
217
- EOM
218
- file 'users/y.json', { 'name' => 'y' }
123
+ file 'data_bags/x/z.json', {}
124
+ file 'data_bags/y/zz.json', {}
125
+ file 'environments/y.json', {}
126
+ file 'nodes/y.json', {}
127
+ file 'roles/y.json', {}
128
+ file 'users/y.json', { 'public_key' => ChefZero::PUBLIC_KEY }
219
129
 
220
130
  it 'knife upload adds the new files' do
221
131
  knife('upload /').should_succeed <<EOM
132
+ Created /clients/y.json
222
133
  Updated /cookbooks/x
223
134
  Created /cookbooks/y
224
135
  Created /data_bags/x/z.json
225
136
  Created /data_bags/y
226
137
  Created /data_bags/y/zz.json
227
138
  Created /environments/y.json
139
+ Created /nodes/y.json
228
140
  Created /roles/y.json
141
+ Created /users/y.json
229
142
  EOM
230
143
  knife('diff --name-status /').should_succeed ''
231
144
  end
@@ -236,25 +149,34 @@ EOM
236
149
  it 'knife upload does nothing' do
237
150
  knife('upload /').should_succeed ''
238
151
  knife('diff --name-status /').should_succeed <<EOM
152
+ D\t/clients
239
153
  D\t/cookbooks
240
154
  D\t/data_bags
241
155
  D\t/environments
156
+ D\t/nodes
242
157
  D\t/roles
158
+ D\t/users
243
159
  EOM
244
160
  end
245
161
 
246
162
  it 'knife upload --purge deletes nothing' do
247
163
  knife('upload --purge /').should_fail <<EOM
164
+ ERROR: /clients cannot be deleted.
248
165
  ERROR: /cookbooks cannot be deleted.
249
166
  ERROR: /data_bags cannot be deleted.
250
167
  ERROR: /environments cannot be deleted.
168
+ ERROR: /nodes cannot be deleted.
251
169
  ERROR: /roles cannot be deleted.
170
+ ERROR: /users cannot be deleted.
252
171
  EOM
253
172
  knife('diff --name-status /').should_succeed <<EOM
173
+ D\t/clients
254
174
  D\t/cookbooks
255
175
  D\t/data_bags
256
176
  D\t/environments
177
+ D\t/nodes
257
178
  D\t/roles
179
+ D\t/users
258
180
  EOM
259
181
  end
260
182
 
@@ -270,16 +192,8 @@ EOM
270
192
  # Test upload of an item when the other end doesn't even have the container
271
193
  when_the_chef_server 'is empty' do
272
194
  when_the_repository 'has two data bag items' do
273
- file 'data_bags/x/y.json', <<EOM
274
- {
275
- "id": "y"
276
- }
277
- EOM
278
- file 'data_bags/x/z.json', <<EOM
279
- {
280
- "id": "z"
281
- }
282
- EOM
195
+ file 'data_bags/x/y.json', {}
196
+ file 'data_bags/x/z.json', {}
283
197
  it 'knife upload of one data bag item itself succeeds' do
284
198
  knife('upload /data_bags/x/y.json').should_succeed <<EOM
285
199
  Created /data_bags/x
@@ -294,23 +208,12 @@ EOM
294
208
 
295
209
  when_the_chef_server 'has three data bag items' do
296
210
  data_bag 'x', { 'deleted' => {}, 'modified' => {}, 'unmodified' => {} }
211
+
297
212
  when_the_repository 'has a modified, unmodified, added and deleted data bag item' do
298
- file 'data_bags/x/added.json', <<EOM
299
- {
300
- "id": "added"
301
- }
302
- EOM
303
- file 'data_bags/x/modified.json', <<EOM
304
- {
305
- "id": "modified",
306
- "foo": "bar"
307
- }
308
- EOM
309
- file 'data_bags/x/unmodified.json', <<EOM
310
- {
311
- "id": "unmodified"
312
- }
313
- EOM
213
+ file 'data_bags/x/added.json', {}
214
+ file 'data_bags/x/modified.json', { 'foo' => 'bar' }
215
+ file 'data_bags/x/unmodified.json', {}
216
+
314
217
  it 'knife upload of the modified file succeeds' do
315
218
  knife('upload /data_bags/x/modified.json').should_succeed <<EOM
316
219
  Updated /data_bags/x/modified.json
@@ -579,13 +482,13 @@ EOM
579
482
 
580
483
  with_versioned_cookbooks do
581
484
  when_the_chef_server "has one of each thing" do
582
- client 'x', '{}'
485
+ client 'x', {}
583
486
  cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"' }
584
- data_bag 'x', { 'y' => '{}' }
585
- environment 'x', '{}'
586
- node 'x', '{}'
587
- role 'x', '{}'
588
- user 'x', '{}'
487
+ data_bag 'x', { 'y' => {} }
488
+ environment 'x', {}
489
+ node 'x', {}
490
+ role 'x', {}
491
+ user 'x', {}
589
492
 
590
493
  when_the_repository 'has only top-level directories' do
591
494
  directory 'clients'
@@ -599,20 +502,32 @@ EOM
599
502
  it 'knife upload does nothing' do
600
503
  knife('upload /').should_succeed ''
601
504
  knife('diff --name-status /').should_succeed <<EOM
505
+ D\t/clients/chef-validator.json
506
+ D\t/clients/chef-webui.json
507
+ D\t/clients/x.json
602
508
  D\t/cookbooks/x-1.0.0
603
509
  D\t/data_bags/x
604
510
  D\t/environments/_default.json
605
511
  D\t/environments/x.json
512
+ D\t/nodes/x.json
606
513
  D\t/roles/x.json
514
+ D\t/users/admin.json
515
+ D\t/users/x.json
607
516
  EOM
608
517
  end
609
518
 
610
519
  it 'knife upload --purge deletes everything' do
611
520
  knife('upload --purge /').should_succeed(<<EOM, :stderr => "WARNING: /environments/_default.json cannot be deleted (default environment cannot be modified).\n")
521
+ Deleted extra entry /clients/chef-validator.json (purge is on)
522
+ Deleted extra entry /clients/chef-webui.json (purge is on)
523
+ Deleted extra entry /clients/x.json (purge is on)
612
524
  Deleted extra entry /cookbooks/x-1.0.0 (purge is on)
613
525
  Deleted extra entry /data_bags/x (purge is on)
614
526
  Deleted extra entry /environments/x.json (purge is on)
527
+ Deleted extra entry /nodes/x.json (purge is on)
615
528
  Deleted extra entry /roles/x.json (purge is on)
529
+ Deleted extra entry /users/admin.json (purge is on)
530
+ Deleted extra entry /users/x.json (purge is on)
616
531
  EOM
617
532
  knife('diff --name-status /').should_succeed <<EOM
618
533
  D\t/environments/_default.json
@@ -621,66 +536,17 @@ EOM
621
536
  end
622
537
 
623
538
  when_the_repository 'has an identical copy of each thing' do
624
- file 'clients/x.json', <<EOM
625
- {}
626
- EOM
539
+ file 'clients/chef-validator.json', { 'validator' => true, 'public_key' => ChefZero::PUBLIC_KEY }
540
+ file 'clients/chef-webui.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY }
541
+ file 'clients/x.json', { 'public_key' => ChefZero::PUBLIC_KEY }
627
542
  file 'cookbooks/x-1.0.0/metadata.rb', 'version "1.0.0"'
628
- file 'data_bags/x/y.json', <<EOM
629
- {
630
- "id": "y"
631
- }
632
- EOM
633
- file 'environments/_default.json', <<EOM
634
- {
635
- "name": "_default",
636
- "description": "The default Chef environment",
637
- "cookbook_versions": {
638
- },
639
- "json_class": "Chef::Environment",
640
- "chef_type": "environment",
641
- "default_attributes": {
642
- },
643
- "override_attributes": {
644
- }
645
- }
646
- EOM
647
- file 'environments/x.json', <<EOM
648
- {
649
- "chef_type": "environment",
650
- "cookbook_versions": {
651
- },
652
- "default_attributes": {
653
- },
654
- "description": "",
655
- "json_class": "Chef::Environment",
656
- "name": "x",
657
- "override_attributes": {
658
- }
659
- }
660
- EOM
661
- file 'nodes/x.json', <<EOM
662
- {}
663
- EOM
664
- file 'roles/x.json', <<EOM
665
- {
666
- "chef_type": "role",
667
- "default_attributes": {
668
- },
669
- "description": "",
670
- "env_run_lists": {
671
- },
672
- "json_class": "Chef::Role",
673
- "name": "x",
674
- "override_attributes": {
675
- },
676
- "run_list": [
677
-
678
- ]
679
- }
680
- EOM
681
- file 'users/x.json', <<EOM
682
- {}
683
- EOM
543
+ file 'data_bags/x/y.json', {}
544
+ file 'environments/_default.json', { 'description' => 'The default Chef environment' }
545
+ file 'environments/x.json', {}
546
+ file 'nodes/x.json', {}
547
+ file 'roles/x.json', {}
548
+ file 'users/admin.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY }
549
+ file 'users/x.json', { 'public_key' => ChefZero::PUBLIC_KEY }
684
550
 
685
551
  it 'knife upload makes no changes' do
686
552
  knife('upload /cookbooks/x-1.0.0').should_succeed ''
@@ -693,23 +559,8 @@ EOM
693
559
  end
694
560
 
695
561
  context 'except the role file' do
696
- file 'roles/x.json', <<EOM
697
- {
698
- "chef_type": "role",
699
- "default_attributes": {
700
- },
701
- "description": "blarghle",
702
- "env_run_lists": {
703
- },
704
- "json_class": "Chef::Role",
705
- "name": "x",
706
- "override_attributes": {
707
- },
708
- "run_list": [
562
+ file 'roles/x.json', { 'description' => 'blarghle' }
709
563
 
710
- ]
711
- }
712
- EOM
713
564
  it 'knife upload changes the role' do
714
565
  knife('upload /').should_succeed "Updated /roles/x.json\n"
715
566
  knife('diff --name-status /').should_succeed ''
@@ -720,7 +571,7 @@ EOM
720
571
  file 'roles/x.json', <<EOM
721
572
  {
722
573
  "chef_type": "role",
723
- "default_attributes": {
574
+ "default_attributes": {
724
575
  },
725
576
  "env_run_lists": {
726
577
  },
@@ -741,56 +592,20 @@ EOM
741
592
  end
742
593
 
743
594
  context 'as well as one extra copy of each thing' do
744
- file 'clients/y.json', { 'name' => 'y' }
595
+ file 'clients/y.json', { 'public_key' => ChefZero::PUBLIC_KEY }
745
596
  file 'cookbooks/x-1.0.0/blah.rb', ''
746
597
  file 'cookbooks/x-2.0.0/metadata.rb', 'version "2.0.0"'
747
598
  file 'cookbooks/y-1.0.0/metadata.rb', 'version "1.0.0"'
748
- file 'data_bags/x/z.json', <<EOM
749
- {
750
- "id": "z"
751
- }
752
- EOM
753
- file 'data_bags/y/zz.json', <<EOM
754
- {
755
- "id": "zz"
756
- }
757
- EOM
758
- file 'environments/y.json', <<EOM
759
- {
760
- "chef_type": "environment",
761
- "cookbook_versions": {
762
- },
763
- "default_attributes": {
764
- },
765
- "description": "",
766
- "json_class": "Chef::Environment",
767
- "name": "y",
768
- "override_attributes": {
769
- }
770
- }
771
- EOM
772
- file 'nodes/y.json', { 'name' => 'y' }
773
- file 'roles/y.json', <<EOM
774
- {
775
- "chef_type": "role",
776
- "default_attributes": {
777
- },
778
- "description": "",
779
- "env_run_lists": {
780
- },
781
- "json_class": "Chef::Role",
782
- "name": "y",
783
- "override_attributes": {
784
- },
785
- "run_list": [
786
-
787
- ]
788
- }
789
- EOM
790
- file 'users/y.json', { 'name' => 'y' }
599
+ file 'data_bags/x/z.json', {}
600
+ file 'data_bags/y/zz.json', {}
601
+ file 'environments/y.json', {}
602
+ file 'nodes/y.json', {}
603
+ file 'roles/y.json', {}
604
+ file 'users/y.json', { 'public_key' => ChefZero::PUBLIC_KEY }
791
605
 
792
606
  it 'knife upload adds the new files' do
793
607
  knife('upload /').should_succeed <<EOM
608
+ Created /clients/y.json
794
609
  Updated /cookbooks/x-1.0.0
795
610
  Created /cookbooks/x-2.0.0
796
611
  Created /cookbooks/y-1.0.0
@@ -798,7 +613,9 @@ Created /data_bags/x/z.json
798
613
  Created /data_bags/y
799
614
  Created /data_bags/y/zz.json
800
615
  Created /environments/y.json
616
+ Created /nodes/y.json
801
617
  Created /roles/y.json
618
+ Created /users/y.json
802
619
  EOM
803
620
  knife('diff --name-status /').should_succeed ''
804
621
  end
@@ -809,25 +626,34 @@ EOM
809
626
  it 'knife upload does nothing' do
810
627
  knife('upload /').should_succeed ''
811
628
  knife('diff --name-status /').should_succeed <<EOM
629
+ D\t/clients
812
630
  D\t/cookbooks
813
631
  D\t/data_bags
814
632
  D\t/environments
633
+ D\t/nodes
815
634
  D\t/roles
635
+ D\t/users
816
636
  EOM
817
637
  end
818
638
 
819
639
  it 'knife upload --purge deletes nothing' do
820
640
  knife('upload --purge /').should_fail <<EOM
641
+ ERROR: /clients cannot be deleted.
821
642
  ERROR: /cookbooks cannot be deleted.
822
643
  ERROR: /data_bags cannot be deleted.
823
644
  ERROR: /environments cannot be deleted.
645
+ ERROR: /nodes cannot be deleted.
824
646
  ERROR: /roles cannot be deleted.
647
+ ERROR: /users cannot be deleted.
825
648
  EOM
826
649
  knife('diff --name-status /').should_succeed <<EOM
650
+ D\t/clients
827
651
  D\t/cookbooks
828
652
  D\t/data_bags
829
653
  D\t/environments
654
+ D\t/nodes
830
655
  D\t/roles
656
+ D\t/users
831
657
  EOM
832
658
  end
833
659
 
@@ -843,16 +669,9 @@ EOM
843
669
  # Test upload of an item when the other end doesn't even have the container
844
670
  when_the_chef_server 'is empty' do
845
671
  when_the_repository 'has two data bag items' do
846
- file 'data_bags/x/y.json', <<EOM
847
- {
848
- "id": "y"
849
- }
850
- EOM
851
- file 'data_bags/x/z.json', <<EOM
852
- {
853
- "id": "z"
854
- }
855
- EOM
672
+ file 'data_bags/x/y.json', {}
673
+ file 'data_bags/x/z.json', {}
674
+
856
675
  it 'knife upload of one data bag item itself succeeds' do
857
676
  knife('upload /data_bags/x/y.json').should_succeed <<EOM
858
677
  Created /data_bags/x
@@ -868,22 +687,10 @@ EOM
868
687
  when_the_chef_server 'has three data bag items' do
869
688
  data_bag 'x', { 'deleted' => {}, 'modified' => {}, 'unmodified' => {} }
870
689
  when_the_repository 'has a modified, unmodified, added and deleted data bag item' do
871
- file 'data_bags/x/added.json', <<EOM
872
- {
873
- "id": "added"
874
- }
875
- EOM
876
- file 'data_bags/x/modified.json', <<EOM
877
- {
878
- "id": "modified",
879
- "foo": "bar"
880
- }
881
- EOM
882
- file 'data_bags/x/unmodified.json', <<EOM
883
- {
884
- "id": "unmodified"
885
- }
886
- EOM
690
+ file 'data_bags/x/added.json', {}
691
+ file 'data_bags/x/modified.json', { 'foo' => 'bar' }
692
+ file 'data_bags/x/unmodified.json', {}
693
+
887
694
  it 'knife upload of the modified file succeeds' do
888
695
  knife('upload /data_bags/x/modified.json').should_succeed <<EOM
889
696
  Updated /data_bags/x/modified.json
@@ -974,14 +781,17 @@ EOM
974
781
  # case.
975
782
  when_the_chef_server 'has a cookbook' do
976
783
  cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'z.rb' => '' }
784
+
977
785
  when_the_repository 'has a modified, extra and missing file for the cookbook' do
978
786
  file 'cookbooks/x-1.0.0/metadata.rb', 'version "1.0.0"'
979
787
  file 'cookbooks/x-1.0.0/y.rb', 'hi'
788
+
980
789
  it 'knife upload of any individual file fails' do
981
790
  knife('upload /cookbooks/x-1.0.0/metadata.rb').should_fail "ERROR: /cookbooks/x-1.0.0/metadata.rb cannot be updated.\n"
982
791
  knife('upload /cookbooks/x-1.0.0/y.rb').should_fail "ERROR: /cookbooks/x-1.0.0 cannot have a child created under it.\n"
983
792
  knife('upload --purge /cookbooks/x-1.0.0/z.rb').should_fail "ERROR: /cookbooks/x-1.0.0/z.rb cannot be deleted.\n"
984
793
  end
794
+
985
795
  # TODO this is a bit of an inconsistency: if we didn't specify --purge,
986
796
  # technically we shouldn't have deleted missing files. But ... cookbooks
987
797
  # are a special case.
@@ -991,6 +801,7 @@ Updated /cookbooks/x-1.0.0
991
801
  EOM
992
802
  knife('diff --name-status /cookbooks').should_succeed ''
993
803
  end
804
+
994
805
  it 'knife upload --purge of the cookbook itself succeeds' do
995
806
  knife('upload /cookbooks/x-1.0.0').should_succeed <<EOM
996
807
  Updated /cookbooks/x-1.0.0
@@ -998,8 +809,10 @@ EOM
998
809
  knife('diff --name-status /cookbooks').should_succeed ''
999
810
  end
1000
811
  end
812
+
1001
813
  when_the_repository 'has a missing file for the cookbook' do
1002
814
  file 'cookbooks/x-1.0.0/metadata.rb', 'version "1.0.0"'
815
+
1003
816
  it 'knife upload of the cookbook succeeds' do
1004
817
  knife('upload /cookbooks/x-1.0.0').should_succeed <<EOM
1005
818
  Updated /cookbooks/x-1.0.0
@@ -1007,10 +820,12 @@ EOM
1007
820
  knife('diff --name-status /cookbooks').should_succeed ''
1008
821
  end
1009
822
  end
823
+
1010
824
  when_the_repository 'has an extra file for the cookbook' do
1011
825
  file 'cookbooks/x-1.0.0/metadata.rb', 'version "1.0.0"'
1012
826
  file 'cookbooks/x-1.0.0/z.rb', ''
1013
827
  file 'cookbooks/x-1.0.0/blah.rb', ''
828
+
1014
829
  it 'knife upload of the cookbook succeeds' do
1015
830
  knife('upload /cookbooks/x-1.0.0').should_succeed <<EOM
1016
831
  Updated /cookbooks/x-1.0.0