ansible_spec 0.2.23 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +7 -4
  3. data/CHANGELOG.md +19 -0
  4. data/Gemfile +5 -0
  5. data/README.md +1 -1
  6. data/ansible_spec.gemspec +2 -1
  7. data/lib/ansible_spec/load_ansible.rb +106 -9
  8. data/lib/ansible_spec/version.rb +1 -1
  9. data/lib/src/spec/spec_helper.rb +5 -4
  10. data/spec/case/get_variable/empty_group/group_vars/group_a.yml +2 -0
  11. data/spec/case/get_variable/empty_group/group_vars/group_b.yml +2 -0
  12. data/spec/case/get_variable/empty_group/hosts +3 -0
  13. data/spec/case/get_variable/empty_group/site.yml +9 -0
  14. data/spec/case/get_variable/group_each_vars_parent_child/group_vars/all.yml +6 -0
  15. data/spec/case/get_variable/group_each_vars_parent_child/group_vars/group1/vars +4 -0
  16. data/spec/case/get_variable/group_each_vars_parent_child/group_vars/group2/vars +4 -0
  17. data/spec/case/get_variable/group_each_vars_parent_child/group_vars/parentgroup/vars +5 -0
  18. data/spec/case/get_variable/group_each_vars_parent_child/hosts +13 -0
  19. data/spec/case/get_variable/group_each_vars_parent_child/site.yml +6 -0
  20. data/spec/case/get_variable/group_each_vars_parent_child/site1.yml +6 -0
  21. data/spec/case/get_variable/group_each_vars_parent_child/site2.yml +6 -0
  22. data/spec/case/get_variable/group_each_vars_parent_child/site3.yml +6 -0
  23. data/spec/case/get_variable/resolve_variables/group_vars/all.yml +24 -0
  24. data/spec/case/get_variable/resolve_variables/hosts +5 -0
  25. data/spec/case/get_variable/resolve_variables/site.yml +3 -0
  26. data/spec/case/load_vars_file/vault_dir/ansible.cfg +2 -0
  27. data/spec/case/load_vars_file/vault_dir/group_vars/all/vault_file +6 -0
  28. data/spec/case/load_vars_file/vault_dir/vault-password-file +1 -0
  29. data/spec/get_variable_spec.rb +239 -25
  30. data/spec/load_ansible_spec.rb +303 -4
  31. metadata +80 -29
@@ -0,0 +1,3 @@
1
+ - name: resolve
2
+ hosts: resolve
3
+ connection: local
@@ -0,0 +1,2 @@
1
+ [defaults]
2
+ vault_password_file = vault-password-file
@@ -0,0 +1,6 @@
1
+ $ANSIBLE_VAULT;1.1;AES256
2
+ 33623930383865383331633337653461646233633934353935376363306265636331363565306532
3
+ 3935313131623364363162616335333530376134383137350a376231363430353963646535313335
4
+ 36383533346433306666623162663335353035333931366162353131383539643239646637333561
5
+ 3963386635663534310a323134643666343962303733616263613535623965366337393666623832
6
+ 3032
@@ -0,0 +1 @@
1
+ supersecretpassword
@@ -14,11 +14,11 @@ describe "get_variablesの実行" do
14
14
  expect(@res.instance_of?(Hash)).to be_truthy
15
15
  end
16
16
 
17
- it 'exist 3 pair in Hash' do
17
+ it 'exist three pairs in Hash' do
18
18
  expect(@res.length).to eq 3
19
19
  end
20
20
 
21
- it 'exist each pair' do
21
+ it 'exists each pair' do
22
22
  expect(@res).to include({'role_var' => 'role_var in roles default'},
23
23
  {'site_var' => 'site_var in roles default'},
24
24
  {'host_var'=>'host_var in roles default'},
@@ -41,11 +41,11 @@ describe "get_variablesの実行" do
41
41
  expect(@res.instance_of?(Hash)).to be_truthy
42
42
  end
43
43
 
44
- it 'exist 5 pair in Hash' do
44
+ it 'exist five pairs in Hash' do
45
45
  expect(@res.length).to eq 5
46
46
  end
47
47
 
48
- it 'exist each pair' do
48
+ it 'exists each pair' do
49
49
  expect(@res).to include({'role_var' => 'group all'},
50
50
  {'site_var' => 'group all'},
51
51
  {'host_var'=>'group all'},
@@ -70,11 +70,11 @@ describe "get_variablesの実行" do
70
70
  expect(@res.instance_of?(Hash)).to be_truthy
71
71
  end
72
72
 
73
- it 'exist 5 pair in Hash' do
73
+ it 'exist five pairs in Hash' do
74
74
  expect(@res.length).to eq 5
75
75
  end
76
76
 
77
- it 'exist each pair' do
77
+ it 'exists each pair' do
78
78
  expect(@res).to include({'role_var' => 'group1'},
79
79
  {'site_var' => 'group1'},
80
80
  {'host_var'=>'group1'},
@@ -99,11 +99,11 @@ describe "get_variablesの実行" do
99
99
  expect(@res.instance_of?(Hash)).to be_truthy
100
100
  end
101
101
 
102
- it 'exist 3 pair in Hash' do
102
+ it 'exist three pairs in Hash' do
103
103
  expect(@res.length).to eq 3
104
104
  end
105
105
 
106
- it 'exist each pair' do
106
+ it 'exists each pair' do
107
107
  expect(@res).to include({'role_var' => 'host role_var'}, # in host_var/192.168.1.1.yml
108
108
  {'site_var' => 'host site_var'}, # in host_var/192.168.1.1.yml
109
109
  {'host_var'=>'host 192.168.1.1'}, # in host_var/192.168.1.1.yml
@@ -126,11 +126,11 @@ describe "get_variablesの実行" do
126
126
  expect(@res.instance_of?(Hash)).to be_truthy
127
127
  end
128
128
 
129
- it 'exist 3 pair in Hash' do
129
+ it 'exist three pairs in Hash' do
130
130
  expect(@res.length).to eq 3
131
131
  end
132
132
 
133
- it 'exist each pair' do
133
+ it 'exists each pair' do
134
134
  expect(@res).to include({'role_var' => 'host role_var'}, # in host_var/192.168.1.2.yml
135
135
  {'site_var' => 'host site_var'}, # in host_var/192.168.1.2.yml
136
136
  {'host_var'=>'host 192.168.1.2'}, # in host_var/192.168.1.2.yml
@@ -153,11 +153,11 @@ describe "get_variablesの実行" do
153
153
  expect(@res.instance_of?(Hash)).to be_truthy
154
154
  end
155
155
 
156
- it 'exist 2 pair in Hash' do
156
+ it 'exist two pairs in Hash' do
157
157
  expect(@res.length).to eq 2
158
158
  end
159
159
 
160
- it 'exist each pair' do
160
+ it 'exists each pair' do
161
161
  expect(@res).to include({'role_var' => 'site'},
162
162
  {'site_var' => 'site'})
163
163
  end
@@ -178,11 +178,11 @@ describe "get_variablesの実行" do
178
178
  expect(@res.instance_of?(Hash)).to be_truthy
179
179
  end
180
180
 
181
- it 'exist 5 pair in Hash' do
181
+ it 'exist five pairs in Hash' do
182
182
  expect(@res.length).to eq 5
183
183
  end
184
184
 
185
- it 'exist each pair' do
185
+ it 'exists each pair' do
186
186
  expect(@res).to include({'role_var' => 'site'}, # site.yml
187
187
  {'site_var' => 'site'}, # site.yml
188
188
  {'host_var'=>'host 192.168.1.1'}, # in host_var/192.168.1.1.yml
@@ -207,11 +207,11 @@ describe "get_variablesの実行" do
207
207
  expect(@res.instance_of?(Hash)).to be_truthy
208
208
  end
209
209
 
210
- it 'exist 5 pair in Hash' do
210
+ it 'exist five pairs in Hash' do
211
211
  expect(@res.length).to eq 5
212
212
  end
213
213
 
214
- it 'exist each pair' do
214
+ it 'exists each pair' do
215
215
  expect(@res).to include({'role_var' => 'role'}, # in roles/test/vars/main.yml
216
216
  {'site_var' => 'site'}, # site.yml
217
217
  {'host_var'=>'host 192.168.1.1'}, # in host_var/192.168.1.1.yml
@@ -236,11 +236,11 @@ describe "get_variablesの実行" do
236
236
  expect(@res.instance_of?(Hash)).to be_truthy
237
237
  end
238
238
 
239
- it 'exist 1 pair in Hash' do
239
+ it 'exists one pair in Hash' do
240
240
  expect(@res.length).to eq 1
241
241
  end
242
242
 
243
- it 'exist each pair' do
243
+ it 'exists the pair' do
244
244
  expect(@res).to include({'merge_var' => {
245
245
  'keep'=>'role',
246
246
  'override'=>'site',
@@ -254,6 +254,153 @@ describe "get_variablesの実行" do
254
254
  end
255
255
  end
256
256
 
257
+ context 'Correct operation : group vars for group1 hosts ' do
258
+ before do
259
+ @current_dir = Dir.pwd()
260
+ Dir.chdir('spec/case/get_variable/group_each_vars_parent_child/')
261
+ ENV["PLAYBOOK"] = 'site1.yml'
262
+ ENV["INVENTORY"] = 'hosts'
263
+ ENV["VARS_DIRS_PATH"] = ''
264
+ @res = AnsibleSpec.get_variables("192.168.1.1", 0, "group1")
265
+ end
266
+
267
+ it 'res is hash' do
268
+ expect(@res.instance_of?(Hash)).to be_truthy
269
+ end
270
+
271
+ it 'exist 6 pair in Hash' do
272
+ expect(@res.length).to eq 6
273
+ end
274
+
275
+ it 'exist each pair' do
276
+ expect(@res).to include( {"role_var"=>"group1"},
277
+ {"site_var"=>"group1"},
278
+ {"host_var"=>"group1"},
279
+ {"group_var"=>"group1"},
280
+ {"group_var_parent"=>"parentgroup"},
281
+ {"group_all_var"=>"group all"}
282
+ )
283
+ end
284
+
285
+ after do
286
+ ENV.delete('PLAYBOOK')
287
+ ENV.delete('INVENTORY')
288
+ ENV.delete('VARS_DIRS_PATH')
289
+ Dir.chdir(@current_dir)
290
+ end
291
+ end
292
+
293
+ context 'Correct operation : group vars for group2 hosts ' do
294
+ before do
295
+ @current_dir = Dir.pwd()
296
+ Dir.chdir('spec/case/get_variable/group_each_vars_parent_child/')
297
+ ENV["PLAYBOOK"] = 'site2.yml'
298
+ ENV["INVENTORY"] = 'hosts'
299
+ ENV["VARS_DIRS_PATH"] = ''
300
+ @res = AnsibleSpec.get_variables("192.168.1.2", 0, "group2")
301
+ end
302
+
303
+ it 'res is hash' do
304
+ expect(@res.instance_of?(Hash)).to be_truthy
305
+ end
306
+
307
+ it 'exist 6 pair in Hash' do
308
+ expect(@res.length).to eq 6
309
+ end
310
+
311
+ it 'exist each pair' do
312
+ expect(@res).to include( {"role_var"=>"group2"},
313
+ {"site_var"=>"group2"},
314
+ {"host_var"=>"group2"},
315
+ {"group_var"=>"group2"},
316
+ {"group_var_parent"=>"parentgroup"},
317
+ {"group_all_var"=>"group all"}
318
+ )
319
+ end
320
+
321
+ after do
322
+ ENV.delete('PLAYBOOK')
323
+ ENV.delete('INVENTORY')
324
+ ENV.delete('VARS_DIRS_PATH')
325
+ Dir.chdir(@current_dir)
326
+ end
327
+ end
328
+
329
+ context 'Correct operation : group vars for parentgroup hosts ' do
330
+ before do
331
+ @current_dir = Dir.pwd()
332
+ Dir.chdir('spec/case/get_variable/group_each_vars_parent_child/')
333
+ ENV["PLAYBOOK"] = 'site3.yml'
334
+ ENV["INVENTORY"] = 'hosts'
335
+ ENV["VARS_DIRS_PATH"] = ''
336
+ @res = AnsibleSpec.get_variables("192.168.1.1", 0, "parentgroup")
337
+ end
338
+
339
+ it 'res is hash' do
340
+ expect(@res.instance_of?(Hash)).to be_truthy
341
+ end
342
+
343
+ it 'exist 6 pair in Hash' do
344
+ expect(@res.length).to eq 6
345
+ end
346
+
347
+ it 'exist each pair' do
348
+ expect(@res).to include( {"role_var"=>"parentgroup"},
349
+ {"site_var"=>"parentgroup"},
350
+ {"host_var"=>"parentgroup"},
351
+ {"group_var"=>"parentgroup"},
352
+ {"group_var_parent"=>"parentgroup"},
353
+ {"group_all_var"=>"group all"}
354
+ )
355
+ end
356
+
357
+ after do
358
+ ENV.delete('PLAYBOOK')
359
+ ENV.delete('INVENTORY')
360
+ ENV.delete('VARS_DIRS_PATH')
361
+ Dir.chdir(@current_dir)
362
+ end
363
+ end
364
+
365
+ # Fixed a problem that there is a gap between Index passed from Rakefile when empty group exists. by #135
366
+ # cat hosts
367
+ # [group_a] #no host
368
+ # [group_b]
369
+ # localhost.localdomain ansible_ssh_private_key_file=~/.ssh/id_rsa
370
+
371
+ context 'Correct operation : empty group PR #135 ' do
372
+ before do
373
+ @current_dir = Dir.pwd()
374
+ Dir.chdir('spec/case/get_variable/empty_group')
375
+ ENV["PLAYBOOK"] = 'site.yml'
376
+ ENV["INVENTORY"] = 'hosts'
377
+ ENV["VARS_DIRS_PATH"] = ''
378
+ @res = AnsibleSpec.get_variables("localhost.localdomain", 0)
379
+ end
380
+
381
+ it 'res is hash' do
382
+ expect(@res.instance_of?(Hash)).to be_truthy
383
+ end
384
+
385
+ it 'exist 1 pair in Hash' do
386
+ expect(@res.length).to eq 1
387
+ end
388
+
389
+ it 'get correct variable' do
390
+ expect(@res).to eq("group_b_var" => "fuga")
391
+ end
392
+
393
+ it 'not get incorrect variables' do
394
+ expect(@res).not_to eq("group_a_var" => "hoge")
395
+ end
396
+
397
+ after do
398
+ ENV.delete('PLAYBOOK')
399
+ ENV.delete('INVENTORY')
400
+ ENV.delete('VARS_DIRS_PATH')
401
+ Dir.chdir(@current_dir)
402
+ end
403
+ end
257
404
  end
258
405
 
259
406
  describe "get_hash_behaviourの実行" do
@@ -291,6 +438,43 @@ describe "get_hash_behaviourの実行" do
291
438
  end
292
439
  end
293
440
 
441
+ context 'Correct operation : resolve variables' do
442
+ before do
443
+ @current_dir = Dir.pwd()
444
+ Dir.chdir('spec/case/get_variable/resolve_variables/')
445
+ @res = AnsibleSpec.get_variables('192.168.1.1', 0)
446
+ end
447
+
448
+ it 'res is hash' do
449
+ expect(@res.instance_of?(Hash)).to be_truthy
450
+ end
451
+
452
+ it 'exist fourteen pairs in Hash' do
453
+ expect(@res.length).to eq 14
454
+ end
455
+
456
+ it 'exist all pairs' do
457
+ expect(@res).to include({'var_nested_one_1' => 'val_nested_one'})
458
+ expect(@res).to include({'var_nested_one_2' => 'val_nested_one'})
459
+ expect(@res).to include({'var_nested_two_1' => 'val_nested_two'})
460
+ expect(@res).to include({'var_nested_two_2' => 'val_nested_two'})
461
+ expect(@res).to include({'var_nested_two_3' => 'val_nested_two'})
462
+ expect(@res).to include({'var_nested_hash_1' => 'val_hash'})
463
+ expect(@res).to include({'var_nested_hash_2' => {'key' => 'val_hash'}})
464
+ expect(@res).to include({'var_nested_array_1' => 'val_array'})
465
+ expect(@res).to include({'var_nested_array_2' => ['val_array']})
466
+ expect(@res).to include({'var_nested_array_hash_1' => 'val_array_hash'})
467
+ expect(@res).to include({'var_nested_array_hash_2' => [{'key' => 'val_array_hash'}]})
468
+ expect(@res).to include({'var_nested_whitespace_1' => 'val_nested_whitespace'})
469
+ expect(@res).to include({'var_nested_whitespace_2' => 'val_nested_whitespace'})
470
+ expect(@res).to include({'var_missingtarget_2' => '{{ var_missingtarget_1 }}'})
471
+ end
472
+
473
+ after do
474
+ Dir.chdir(@current_dir)
475
+ end
476
+ end
477
+
294
478
  context 'Correct operation : mistake word in ENV["HASH_BEHAVIOUR"]' do
295
479
  before do
296
480
  ENV["HASH_BEHAVIOUR"] = 'mistake_word'
@@ -390,7 +574,7 @@ describe 'merge_variablesの実行' do
390
574
  expect(@res.instance_of?(Hash)).to be_truthy
391
575
  end
392
576
 
393
- it 'exist 1 pair in Hash' do
577
+ it 'exists one pair in Hash' do
394
578
  expect(@res.length).to eq 1
395
579
  end
396
580
 
@@ -425,11 +609,11 @@ describe "load_vars_fileの実行" do
425
609
  expect(@res.instance_of?(Hash)).to be_truthy
426
610
  end
427
611
 
428
- it 'exist 1 pair in Hash' do
612
+ it 'exist one pair in Hash' do
429
613
  expect(@res.length).to eq 1
430
614
  end
431
615
 
432
- it 'exist each pair' do
616
+ it 'exists the pair' do
433
617
  expect(@res).to include({'role_var' => 'without .yml extension'})
434
618
  end
435
619
 
@@ -453,11 +637,11 @@ describe "load_vars_fileの実行" do
453
637
  expect(@res.instance_of?(Hash)).to be_truthy
454
638
  end
455
639
 
456
- it 'exist 1 pair in Hash' do
640
+ it 'exists one pair in Hash' do
457
641
  expect(@res.length).to eq 1
458
642
  end
459
643
 
460
- it 'exist each pair' do
644
+ it 'exists the pair' do
461
645
  expect(@res).to include({'role_var' => 'without .yml extension'})
462
646
  end
463
647
 
@@ -479,11 +663,11 @@ describe "load_vars_fileの実行" do
479
663
  expect(@res.instance_of?(Hash)).to be_truthy
480
664
  end
481
665
 
482
- it 'exist 1 pair in Hash' do
666
+ it 'exist two pairs in Hash' do
483
667
  expect(@res.length).to eq 2
484
668
  end
485
669
 
486
- it 'exist each pair' do
670
+ it 'exists each pair' do
487
671
  expect(@res).to include({'var1' => 'val1'})
488
672
  expect(@res).to include({'var2' => 'val2'})
489
673
  end
@@ -492,4 +676,34 @@ describe "load_vars_fileの実行" do
492
676
  Dir.chdir(@current_dir)
493
677
  end
494
678
  end
679
+
680
+ # Ansible::Vault support Ruby 2.1.0 and higher.
681
+ # Skip test when Ruby 1.9.3 & 2.0.0
682
+ if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.1')
683
+ context 'Correct operation : vaults in directory' do
684
+ before do
685
+ @current_dir = Dir.pwd()
686
+ Dir.chdir('spec/case/load_vars_file/vault_dir/')
687
+ vars = Hash.new
688
+ file = 'group_vars/all'
689
+ @res = AnsibleSpec.load_vars_file(vars, file)
690
+ end
691
+
692
+ it 'res is hash' do
693
+ expect(@res.instance_of?(Hash)).to be_truthy
694
+ end
695
+
696
+ it 'exists one pair in Hash' do
697
+ expect(@res.length).to eq 1
698
+ end
699
+
700
+ it 'exists the pair' do
701
+ expect(@res).to include({'vault_var' => 'val'})
702
+ end
703
+
704
+ after do
705
+ Dir.chdir(@current_dir)
706
+ end
707
+ end
708
+ end
495
709
  end
@@ -400,6 +400,229 @@ EOF
400
400
  end
401
401
  end
402
402
 
403
+ context 'load_targets:Test invalid return_type' do
404
+ tmp_hosts = 'hosts'
405
+ content_excpetion_msg = "Variable return_type must be value 'groups' or 'groups_parent_child_relationships'"
406
+ before do
407
+ content_h = <<'EOF'
408
+ [server]
409
+ 192.168.0.103
410
+ 192.168.0.104 ansible_ssh_port=22
411
+
412
+ [databases]
413
+ 192.168.0.105
414
+ 192.168.0.106 ansible_ssh_port=5555
415
+
416
+ [pg:children]
417
+ server
418
+ databases
419
+ EOF
420
+ create_file(tmp_hosts,content_h)
421
+ begin
422
+ @res = AnsibleSpec.load_targets(tmp_hosts, return_type='some_invalid_option')
423
+ rescue ArgumentError => e
424
+ @res = e.message
425
+ end
426
+ end
427
+
428
+ it 'res is string' do
429
+ expect(@res.instance_of?(String)).to be_truthy
430
+ end
431
+
432
+ it 'exist 1 string' do
433
+ expect(@res.length).to eq content_excpetion_msg.length
434
+ end
435
+
436
+ it 'exist string' do
437
+ expect(@res).to include(content_excpetion_msg)
438
+ end
439
+
440
+ after do
441
+ File.delete(tmp_hosts)
442
+ end
443
+ end
444
+
445
+ context 'load_targets:Return groups; default return_type (="groups")' do
446
+ tmp_hosts = 'hosts'
447
+ before do
448
+ content_h = <<'EOF'
449
+ [server]
450
+ 192.168.0.103
451
+ 192.168.0.104 ansible_ssh_port=22
452
+
453
+ [databases]
454
+ 192.168.0.105
455
+ 192.168.0.106 ansible_ssh_port=5555
456
+
457
+ [pg:children]
458
+ server
459
+ databases
460
+ EOF
461
+ create_file(tmp_hosts,content_h)
462
+ @res = AnsibleSpec.load_targets(tmp_hosts)
463
+ end
464
+
465
+ it 'res is hash' do
466
+ expect(@res.instance_of?(Hash)).to be_truthy
467
+ end
468
+
469
+ it 'exist 1 group' do
470
+ expect(@res.length).to eq 3
471
+ end
472
+
473
+ it 'exist group' do
474
+ expect(@res.key?('server')).to be_truthy
475
+ expect(@res.key?('databases')).to be_truthy
476
+ expect(@res.key?('pg')).to be_truthy
477
+ expect(@res.key?('pg:children')).not_to be_truthy
478
+ end
479
+
480
+ it 'pg 192.168.0.103' do
481
+ obj = @res['pg'][0]
482
+ expect(obj.instance_of?(Hash)).to be_truthy
483
+ expect(obj).to include({'name' => '192.168.0.103',
484
+ 'uri' => '192.168.0.103',
485
+ 'port' => 22})
486
+ end
487
+
488
+ it 'pg 192.168.0.104 ansible_ssh_port=22' do
489
+ obj = @res['pg'][1]
490
+ expect(obj.instance_of?(Hash)).to be_truthy
491
+ expect(obj['name']).to eq '192.168.0.104 ansible_ssh_port=22'
492
+ expect(obj['uri']).to eq '192.168.0.104'
493
+ expect(obj['port']).to eq 22
494
+ end
495
+
496
+ it 'pg 192.168.0.105' do
497
+ obj = @res['pg'][2]
498
+ expect(obj.instance_of?(Hash)).to be_truthy
499
+ expect(obj).to include({'name' => '192.168.0.105',
500
+ 'uri' => '192.168.0.105',
501
+ 'port' => 22})
502
+ end
503
+
504
+ it 'pg 192.168.0.106 ansible_ssh_port=5555' do
505
+ obj = @res['pg'][3]
506
+ expect(obj.instance_of?(Hash)).to be_truthy
507
+ expect(obj['name']).to eq '192.168.0.106 ansible_ssh_port=5555'
508
+ expect(obj['uri']).to eq '192.168.0.106'
509
+ expect(obj['port']).to eq 5555
510
+ end
511
+
512
+ after do
513
+ File.delete(tmp_hosts)
514
+ end
515
+ end
516
+
517
+ context 'load_targets:Return groups; return_type="groups"' do
518
+ tmp_hosts = 'hosts'
519
+ before do
520
+ content_h = <<'EOF'
521
+ [server]
522
+ 192.168.0.103
523
+ 192.168.0.104 ansible_ssh_port=22
524
+
525
+ [databases]
526
+ 192.168.0.105
527
+ 192.168.0.106 ansible_ssh_port=5555
528
+
529
+ [pg:children]
530
+ server
531
+ databases
532
+ EOF
533
+ create_file(tmp_hosts,content_h)
534
+ @res = AnsibleSpec.load_targets(tmp_hosts, return_type='groups')
535
+ end
536
+
537
+ it 'res is hash' do
538
+ expect(@res.instance_of?(Hash)).to be_truthy
539
+ end
540
+
541
+ it 'exist 1 group' do
542
+ expect(@res.length).to eq 3
543
+ end
544
+
545
+ it 'exist group' do
546
+ expect(@res.key?('server')).to be_truthy
547
+ expect(@res.key?('databases')).to be_truthy
548
+ expect(@res.key?('pg')).to be_truthy
549
+ expect(@res.key?('pg:children')).not_to be_truthy
550
+ end
551
+
552
+ it 'pg 192.168.0.103' do
553
+ obj = @res['pg'][0]
554
+ expect(obj.instance_of?(Hash)).to be_truthy
555
+ expect(obj).to include({'name' => '192.168.0.103',
556
+ 'uri' => '192.168.0.103',
557
+ 'port' => 22})
558
+ end
559
+
560
+ it 'pg 192.168.0.104 ansible_ssh_port=22' do
561
+ obj = @res['pg'][1]
562
+ expect(obj.instance_of?(Hash)).to be_truthy
563
+ expect(obj['name']).to eq '192.168.0.104 ansible_ssh_port=22'
564
+ expect(obj['uri']).to eq '192.168.0.104'
565
+ expect(obj['port']).to eq 22
566
+ end
567
+
568
+ it 'pg 192.168.0.105' do
569
+ obj = @res['pg'][2]
570
+ expect(obj.instance_of?(Hash)).to be_truthy
571
+ expect(obj).to include({'name' => '192.168.0.105',
572
+ 'uri' => '192.168.0.105',
573
+ 'port' => 22})
574
+ end
575
+
576
+ it 'pg 192.168.0.106 ansible_ssh_port=5555' do
577
+ obj = @res['pg'][3]
578
+ expect(obj.instance_of?(Hash)).to be_truthy
579
+ expect(obj['name']).to eq '192.168.0.106 ansible_ssh_port=5555'
580
+ expect(obj['uri']).to eq '192.168.0.106'
581
+ expect(obj['port']).to eq 5555
582
+ end
583
+
584
+ after do
585
+ File.delete(tmp_hosts)
586
+ end
587
+ end
588
+
589
+ context 'load_targets:Return groups parent child relationships; return_type="groups_parent_child_relationships"' do
590
+ tmp_hosts = 'hosts'
591
+ before do
592
+ content_h = <<'EOF'
593
+ [server]
594
+ 192.168.0.103
595
+ 192.168.0.104 ansible_ssh_port=22
596
+
597
+ [databases]
598
+ 192.168.0.105
599
+ 192.168.0.106 ansible_ssh_port=5555
600
+
601
+ [pg:children]
602
+ server
603
+ databases
604
+ EOF
605
+ create_file(tmp_hosts,content_h)
606
+ @res = AnsibleSpec.load_targets(tmp_hosts, return_type='groups_parent_child_relationships')
607
+ end
608
+
609
+ it 'res is hash' do
610
+ expect(@res.instance_of?(Hash)).to be_truthy
611
+ end
612
+
613
+ it 'exist 1 group parent child relationship in Hash' do
614
+ expect(@res.length).to eq 1
615
+ end
616
+
617
+ it 'exist each pair' do
618
+ expect(@res).to include({"pg"=>["server", "databases"]})
619
+ end
620
+
621
+ after do
622
+ File.delete(tmp_hosts)
623
+ end
624
+ end
625
+
403
626
  end
404
627
 
405
628
  describe "load_playbookの実行" do
@@ -1308,16 +1531,20 @@ EOF
1308
1531
  expect(@res[0]['hosts'].instance_of?(Array)).to be_truthy
1309
1532
  expect([{'name' => '192.168.0.103',
1310
1533
  'uri' => '192.168.0.103',
1311
- 'port' => 22},
1534
+ 'port' => 22,
1535
+ 'connection' => 'ssh'},
1312
1536
  {'name' => '192.168.0.104',
1313
1537
  'uri' => '192.168.0.104',
1314
- 'port' => 22},
1538
+ 'port' => 22,
1539
+ 'connection' => 'ssh'},
1315
1540
  {'name' => '192.168.0.105',
1316
1541
  'uri' => '192.168.0.105',
1317
- 'port' => 22},
1542
+ 'port' => 22,
1543
+ 'connection' => 'ssh'},
1318
1544
  {'name' => '192.168.0.106',
1319
1545
  'uri' => '192.168.0.106',
1320
- 'port' => 22}]).to match_array(@res[0]['hosts'])
1546
+ 'port' => 22,
1547
+ 'connection' => 'ssh'}]).to match_array(@res[0]['hosts'])
1321
1548
  end
1322
1549
 
1323
1550
  it 'exist user' do
@@ -1453,18 +1680,22 @@ EOF
1453
1680
  expect([{'name' => '192.168.0.103',
1454
1681
  'uri' => '192.168.0.103',
1455
1682
  'port' => 22,
1683
+ 'connection' => 'ssh',
1456
1684
  'hosts'=>'server'},
1457
1685
  {'name' => '192.168.0.104',
1458
1686
  'uri' => '192.168.0.104',
1459
1687
  'port' => 22,
1688
+ 'connection' => 'ssh',
1460
1689
  'hosts'=>'server'},
1461
1690
  {'name' => '192.168.0.105',
1462
1691
  'uri' => '192.168.0.105',
1463
1692
  'port' => 22,
1693
+ 'connection' => 'ssh',
1464
1694
  'hosts'=>'server2'},
1465
1695
  {'name' => '192.168.0.106',
1466
1696
  'uri' => '192.168.0.106',
1467
1697
  'port' => 22,
1698
+ 'connection' => 'ssh',
1468
1699
  'hosts'=>'server2'}]).to match_array(@res[0]['hosts'])
1469
1700
  end
1470
1701
 
@@ -1570,4 +1801,72 @@ EOF
1570
1801
  File.delete(tmp_hosts)
1571
1802
  end
1572
1803
  end
1804
+
1805
+ context 'Issue 126 Array Error' do
1806
+ require 'yaml'
1807
+ tmp_ansiblespec = '.ansiblespec'
1808
+ tmp_playbook = 'site.yml'
1809
+ tmp_hosts = 'hosts'
1810
+
1811
+ before do
1812
+
1813
+ content = <<'EOF'
1814
+ ---
1815
+ -
1816
+ playbook: site.yml
1817
+ inventory: hosts
1818
+ EOF
1819
+
1820
+ content_p = <<'EOF'
1821
+ - name: Ansible-Sample-TDD-1
1822
+ hosts:
1823
+ - server
1824
+ user: root
1825
+ roles:
1826
+ - role: nginx
1827
+ EOF
1828
+
1829
+ content_h = <<'EOF'
1830
+ [server]
1831
+ host1
1832
+ host2
1833
+ host3
1834
+ host4
1835
+ host5
1836
+ EOF
1837
+
1838
+ create_file(tmp_ansiblespec,content)
1839
+ create_file(tmp_playbook,content_p)
1840
+ create_file(tmp_hosts,content_h)
1841
+ @res = AnsibleSpec.get_properties
1842
+ end
1843
+
1844
+ it 'check 5 hosts' do
1845
+ expect(@res[0]["hosts"].length).to eq 5
1846
+ end
1847
+
1848
+ it 'check host1' do
1849
+ expect(@res[0]["hosts"][0]["name"]).to eq "host1"
1850
+ end
1851
+
1852
+ it 'check host2' do
1853
+ expect(@res[0]["hosts"][1]["name"]).to eq "host2" #not " host2"
1854
+ end
1855
+ it 'check host3' do
1856
+ expect(@res[0]["hosts"][2]["name"]).to eq "host3" #not "host3\t"
1857
+ end
1858
+ it 'check host4' do
1859
+ expect(@res[0]["hosts"][3]["name"]).to eq "host4" #not "\thost4"
1860
+ end
1861
+
1862
+ it 'check host5' do
1863
+ expect(@res[0]["hosts"][4]["name"]).to eq "host5" #not "\thost5\t"
1864
+ end
1865
+
1866
+ after do
1867
+ File.delete(tmp_ansiblespec)
1868
+ File.delete(tmp_playbook)
1869
+ File.delete(tmp_hosts)
1870
+ end
1871
+ end
1573
1872
  end