ansible_spec 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +69 -48
- data/lib/ansible_spec/load_ansible.rb +56 -10
- data/lib/ansible_spec/version.rb +1 -1
- data/spec/ec2_dynamic_inventory_spec.rb +53 -0
- data/spec/load_ansible_spec.rb +321 -15
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e860c7053344a34b1907264a715ae6336dd5f6ac
|
4
|
+
data.tar.gz: ef8fac0266f20909ec8aabb7488ff603607fdbe6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf7f29b8d481259c395eff714155b7d1280d37dd3c7c966e85c56fa26f0b7c6349ecad7c14822692c5b6643542580e5365f6ccb6c618a80c5cd25ba6e984388b
|
7
|
+
data.tar.gz: a11ff18b9e6dba65082e862d9470dec01e24b553f14d6d0e617d90c77502befa4486f2d9bccec3429aba6b91134403f847a22ac2e738fd08d9d6b3b519166821
|
data/README.md
CHANGED
@@ -1,77 +1,81 @@
|
|
1
1
|
# AnsibleSpec
|
2
|
+
|
2
3
|
[![Gem Version](https://badge.fury.io/rb/ansible_spec.svg)](http://badge.fury.io/rb/ansible_spec)
|
3
|
-
[![Build Status](https://travis-ci.org/volanja/ansible_spec.svg?branch=master)](https://travis-ci.org/volanja/ansible_spec)
|
4
|
+
[![Build Status](https://travis-ci.org/volanja/ansible_spec.svg?branch=master)](https://travis-ci.org/volanja/ansible_spec)
|
4
5
|
|
5
|
-
This gem
|
6
|
-
|
7
|
-
|
6
|
+
This is a Ruby gem that implements an Ansible Config Parser for Serverspec.
|
7
|
+
It creates a Rake task that can run tests, using Ansible inventory files
|
8
|
+
and playbooks. You can test multiple roles and multiple hosts.
|
8
9
|
|
9
|
-
#
|
10
|
+
# Features
|
10
11
|
|
11
|
-
-
|
12
|
-
-
|
13
|
-
- ansible_ssh_port
|
14
|
-
- ansible_ssh_user
|
15
|
-
- ansible_ssh_host
|
16
|
-
- ansible_ssh_private_key_file
|
17
|
-
-
|
18
|
-
-
|
12
|
+
- Supports [Serverspec](http://serverspec.org/) v2
|
13
|
+
- Supports special host variables
|
14
|
+
- `ansible_ssh_port`
|
15
|
+
- `ansible_ssh_user`
|
16
|
+
- `ansible_ssh_host`
|
17
|
+
- `ansible_ssh_private_key_file`
|
18
|
+
- Supports [host patterns/ranges](http://docs.ansible.com/intro_inventory.html#hosts-and-groups) -- e.g.: `www[01:50].example.com`
|
19
|
+
- Supports Ansible [dynamic inventory sources](http://docs.ansible.com/ansible/intro_dynamic_inventory.html)
|
19
20
|
|
20
21
|
# Installation
|
21
22
|
|
22
|
-
install it yourself as:
|
23
|
-
|
24
23
|
```
|
25
24
|
$ gem install ansible_spec
|
26
25
|
```
|
27
26
|
|
28
27
|
# Usage
|
29
|
-
|
28
|
+
|
29
|
+
## Create `Rakefile` & `spec/spec_helper.rb`
|
30
30
|
|
31
31
|
```
|
32
|
-
$ ansiblespec-init
|
32
|
+
$ ansiblespec-init
|
33
33
|
create spec
|
34
34
|
create spec/spec_helper.rb
|
35
35
|
create Rakefile
|
36
36
|
create .ansiblespec
|
37
37
|
```
|
38
38
|
|
39
|
-
## [
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
## [Optional] `.ansiblespec`
|
40
|
+
|
41
|
+
By default, `site.yml` will be used as the playbook and `hosts` as the
|
42
|
+
inventory file. You can either follow these conventions or you can
|
43
|
+
customize the playbook and inventory using an `.ansiblespec` file.
|
43
44
|
|
44
45
|
```.ansiblespec
|
45
|
-
---
|
46
|
-
-
|
46
|
+
---
|
47
|
+
-
|
47
48
|
playbook: site.yml
|
48
49
|
inventory: hosts
|
49
50
|
```
|
50
51
|
|
51
|
-
## [
|
52
|
-
You can use Environment variable, when RakeTask command. It listed below.
|
52
|
+
## [Optional] Environment variables
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
You can use environment variables with the `rake` command. They are listed below.
|
55
|
+
|
56
|
+
- `PLAYBOOK` -- playbook name (e.g. `site.yml`)
|
57
|
+
- `INVENTORY` -- inventory file name (e.g. `hosts`)
|
58
|
+
|
59
|
+
Environment variables take precedence over the `.ansiblespec` file.
|
57
60
|
|
58
|
-
```
|
59
61
|
Example:
|
62
|
+
|
63
|
+
```
|
60
64
|
$ PLAYBOOK=site.yml INVENTORY=hosts rake serverspec:Ansible-Sample-TDD
|
61
65
|
```
|
62
66
|
|
63
67
|
## Inventory
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
-
|
68
|
-
- ansible_ssh_port
|
69
|
-
- ansible_ssh_user
|
70
|
-
- ansible_ssh_private_key
|
71
|
-
- ansible_ssh_host
|
68
|
+
|
69
|
+
Inventory files can:
|
70
|
+
|
71
|
+
- use standard ansible parameters
|
72
|
+
- `ansible_ssh_port`
|
73
|
+
- `ansible_ssh_user`
|
74
|
+
- `ansible_ssh_private_key`
|
75
|
+
- `ansible_ssh_host`
|
72
76
|
- define hosts as expressions. `host-[1:3]` would expand into `host-1`,`host-2`,`host-3`
|
73
77
|
- Group Children
|
74
|
-
- [
|
78
|
+
- Use [dynamic inventory sources](http://docs.ansible.com/intro_dynamic_inventory.html)
|
75
79
|
|
76
80
|
### Sample
|
77
81
|
|
@@ -109,7 +113,9 @@ server
|
|
109
113
|
databases
|
110
114
|
```
|
111
115
|
|
112
|
-
##
|
116
|
+
## Dynamic Inventory Sources
|
117
|
+
|
118
|
+
(Note: These files need to have execute permission)
|
113
119
|
|
114
120
|
```
|
115
121
|
#!/bin/bash
|
@@ -123,16 +129,16 @@ sample is [here](https://github.com/volanja/ansible-sample-tdd)
|
|
123
129
|
|
124
130
|
```
|
125
131
|
.
|
126
|
-
├── .ansiblespec #Create file (use Serverspec). read above section.
|
132
|
+
├── .ansiblespec # Create file (use Serverspec). read above section.
|
127
133
|
├── README.md
|
128
|
-
├── hosts #use Ansible and Serverspec if .ansiblespec is not exist.
|
129
|
-
├── site.yml #use Ansible and Serverspec if .ansiblespec is not exist.
|
130
|
-
├── nginx.yml #(comment-out) incluted by site.yml
|
134
|
+
├── hosts # use Ansible and Serverspec if .ansiblespec is not exist.
|
135
|
+
├── site.yml # use Ansible and Serverspec if .ansiblespec is not exist.
|
136
|
+
├── nginx.yml # (comment-out) incluted by site.yml
|
131
137
|
├── roles
|
132
138
|
│ └── nginx
|
133
139
|
│ ├── handlers
|
134
140
|
│ │ └── main.yml
|
135
|
-
│ ├── spec #use Serverspec
|
141
|
+
│ ├── spec # use Serverspec
|
136
142
|
│ │ └── nginx_spec.rb
|
137
143
|
│ ├── tasks
|
138
144
|
│ │ └── main.yml
|
@@ -140,13 +146,14 @@ sample is [here](https://github.com/volanja/ansible-sample-tdd)
|
|
140
146
|
│ │ └── nginx.repo
|
141
147
|
│ └── vars
|
142
148
|
│ └── main.yml
|
143
|
-
├── Rakefile #Create file (use Serverspec)
|
144
|
-
└── spec #Create file (use Serverspec)
|
149
|
+
├── Rakefile # Create file (use Serverspec)
|
150
|
+
└── spec # Create file (use Serverspec)
|
145
151
|
└── spec_helper.rb
|
146
152
|
```
|
147
153
|
|
148
154
|
## Playbook
|
149
|
-
|
155
|
+
|
156
|
+
playbook can use `include`
|
150
157
|
|
151
158
|
```site.yml
|
152
159
|
- name: Ansible-Sample-TDD
|
@@ -179,8 +186,22 @@ Finished in 0.34306 seconds
|
|
179
186
|
|
180
187
|
# Contributing
|
181
188
|
|
189
|
+
To set up a development environment:
|
190
|
+
|
191
|
+
```
|
192
|
+
$ bundle install
|
193
|
+
```
|
194
|
+
|
195
|
+
To run the tests:
|
196
|
+
|
197
|
+
```
|
198
|
+
$ bundle exec rspec
|
199
|
+
```
|
200
|
+
|
201
|
+
To contribute your change, create a GitHub pull request as follows:
|
202
|
+
|
182
203
|
1. Fork it
|
183
204
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
184
205
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
185
206
|
4. Push to the branch (`git push origin my-new-feature`)
|
186
|
-
5. Create new Pull Request
|
207
|
+
5. Create new Pull Request at https://github.com/volanja/ansible_spec
|
@@ -82,11 +82,23 @@ module AnsibleSpec
|
|
82
82
|
# {"databases":{"hosts":["aaa.com","bbb.com"],"vars":{"a":true}}}
|
83
83
|
# return {"databases"=>["aaa.com", "bbb.com"]}
|
84
84
|
def self.get_dynamic_inventory(file)
|
85
|
-
|
85
|
+
if file[0] == "/"
|
86
|
+
file_path = file
|
87
|
+
else
|
88
|
+
file_path = "./#{file}"
|
89
|
+
end
|
86
90
|
res = Hash.new
|
87
|
-
|
88
|
-
|
89
|
-
|
91
|
+
so, se, st = Open3.capture3(file_path)
|
92
|
+
dyn_inv = Oj.load(so.to_s)
|
93
|
+
|
94
|
+
if dyn_inv.key?('_meta')
|
95
|
+
# assume we have an ec2.py created dynamic inventory
|
96
|
+
res = dyn_inv.tap{ |h| h.delete("_meta") }
|
97
|
+
else
|
98
|
+
dyn_inv.each{|k,v|
|
99
|
+
res["#{k.to_s}"] = v['hosts']
|
100
|
+
}
|
101
|
+
end
|
90
102
|
return res
|
91
103
|
end
|
92
104
|
|
@@ -121,15 +133,22 @@ module AnsibleSpec
|
|
121
133
|
# return: playbook, inventoryfile
|
122
134
|
def self.load_ansiblespec()
|
123
135
|
f = '.ansiblespec'
|
124
|
-
|
125
|
-
|
126
|
-
inventoryfile = ENV["INVENTORY"]
|
127
|
-
elsif File.exist?(f)
|
136
|
+
y = nil
|
137
|
+
if File.exist?(f)
|
128
138
|
y = YAML.load_file(f)
|
139
|
+
end
|
140
|
+
if ENV["PLAYBOOK"]
|
141
|
+
playbook = ENV["PLAYBOOK"]
|
142
|
+
elsif y.is_a?(Array) && y[0]['playbook']
|
129
143
|
playbook = y[0]['playbook']
|
130
|
-
inventoryfile = y[0]['inventory']
|
131
144
|
else
|
132
145
|
playbook = 'site.yml'
|
146
|
+
end
|
147
|
+
if ENV["INVENTORY"]
|
148
|
+
inventoryfile = ENV["INVENTORY"]
|
149
|
+
elsif y.is_a?(Array) && y[0]['inventory']
|
150
|
+
inventoryfile = y[0]['inventory']
|
151
|
+
else
|
133
152
|
inventoryfile = 'hosts'
|
134
153
|
end
|
135
154
|
|
@@ -162,6 +181,9 @@ module AnsibleSpec
|
|
162
181
|
properties.push site
|
163
182
|
end
|
164
183
|
end
|
184
|
+
properties.each do |property|
|
185
|
+
property["roles"] = flatten_role(property["roles"])
|
186
|
+
end
|
165
187
|
if name_exist?(properties)
|
166
188
|
return properties
|
167
189
|
else
|
@@ -169,6 +191,26 @@ module AnsibleSpec
|
|
169
191
|
end
|
170
192
|
end
|
171
193
|
|
194
|
+
# flatten roles (Issue 29)
|
195
|
+
# param: Array
|
196
|
+
# e.g. ["nginx"]
|
197
|
+
# e.g. [{"roles"=>"nginx"}]
|
198
|
+
# e.g. [{"role"=>"nginx", "dir"=>"/opt/b", "port"=>5001}]
|
199
|
+
# return: Array
|
200
|
+
# e.g.["nginx"]
|
201
|
+
def self.flatten_role(roles)
|
202
|
+
ret = Array.new
|
203
|
+
roles.each do |role|
|
204
|
+
if role.is_a?(String)
|
205
|
+
ret << role
|
206
|
+
elsif role.is_a?(Hash)
|
207
|
+
ret << role["role"] if role.has_key?("role")
|
208
|
+
end
|
209
|
+
end
|
210
|
+
return ret
|
211
|
+
end
|
212
|
+
|
213
|
+
|
172
214
|
# Issue 27
|
173
215
|
# param: array
|
174
216
|
# return: boolean
|
@@ -190,8 +232,12 @@ module AnsibleSpec
|
|
190
232
|
hosts = load_targets(inventoryfile)
|
191
233
|
properties = load_playbook(playbook)
|
192
234
|
properties.each do |var|
|
193
|
-
if
|
235
|
+
if var["hosts"].to_s == "all"
|
236
|
+
var["hosts"] = hosts.values.flatten
|
237
|
+
elsif hosts.has_key?("#{var["hosts"]}")
|
194
238
|
var["hosts"] = hosts["#{var["hosts"]}"]
|
239
|
+
else
|
240
|
+
fail "no hosts matched"
|
195
241
|
end
|
196
242
|
end
|
197
243
|
return properties
|
data/lib/ansible_spec/version.rb
CHANGED
@@ -0,0 +1,53 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'ansible_spec'
|
3
|
+
|
4
|
+
describe "load_targets_ec2" do
|
5
|
+
context 'EC2_DynamicInventory' do
|
6
|
+
tmp_hosts = 'hosts'
|
7
|
+
before do
|
8
|
+
content_h = <<'EOF'
|
9
|
+
#!/bin/bash
|
10
|
+
echo '{ "_meta": { "hostvars": { "some_key1": { "ec2_something_something": false }, "some_key2": { "ec2_something_something": true }}}, "tag_some_other_key1": [ "host-1", "host-2" ], "some_other_key2": [ "host-1" ]}'
|
11
|
+
EOF
|
12
|
+
create_file(tmp_hosts,content_h)
|
13
|
+
File.chmod(0755,tmp_hosts)
|
14
|
+
@res = AnsibleSpec.load_targets(tmp_hosts)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'res is hash' do
|
18
|
+
expect(@res.instance_of?(Hash)).to be_truthy
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'contains 2 groups' do
|
22
|
+
expect(@res.length).to eq 2
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'contains key tag_some_other_key1' do
|
26
|
+
expect(@res.key?('tag_some_other_key1')).to be_truthy
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'contains key some_other_key2' do
|
30
|
+
expect(@res.key?('some_other_key2')).to be_truthy
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'tag_some_other_key1 contains host-1 and host-2' do
|
34
|
+
obj = @res['tag_some_other_key1'][0]
|
35
|
+
expect(obj.instance_of?(String)).to be_truthy
|
36
|
+
expect(obj).to eq 'host-1'
|
37
|
+
obj = @res['tag_some_other_key1'][1]
|
38
|
+
expect(obj.instance_of?(String)).to be_truthy
|
39
|
+
expect(obj).to eq 'host-2'
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'some_other_key2 contains host-1' do
|
43
|
+
obj = @res['some_other_key2'][0]
|
44
|
+
expect(obj.instance_of?(String)).to be_truthy
|
45
|
+
expect(obj).to eq 'host-1'
|
46
|
+
end
|
47
|
+
|
48
|
+
after do
|
49
|
+
File.delete(tmp_hosts)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
data/spec/load_ansible_spec.rb
CHANGED
@@ -412,6 +412,118 @@ EOF
|
|
412
412
|
end
|
413
413
|
end
|
414
414
|
|
415
|
+
context '正常系(nest roles)' do
|
416
|
+
require 'yaml'
|
417
|
+
tmp_pb = 'playbook'
|
418
|
+
before do
|
419
|
+
content = <<'EOF'
|
420
|
+
- name: Ansible-Sample-TDD
|
421
|
+
hosts: server
|
422
|
+
user: root
|
423
|
+
roles:
|
424
|
+
- role: nginx
|
425
|
+
- role: mariadb
|
426
|
+
EOF
|
427
|
+
create_file(tmp_pb,content)
|
428
|
+
@res = AnsibleSpec.load_playbook(tmp_pb)
|
429
|
+
end
|
430
|
+
|
431
|
+
it 'res is array' do
|
432
|
+
expect(@res.instance_of?(Array)).to be_truthy
|
433
|
+
end
|
434
|
+
|
435
|
+
it 'res[0] is hash' do
|
436
|
+
expect(@res[0].instance_of?(Hash)).to be_truthy
|
437
|
+
end
|
438
|
+
|
439
|
+
it 'check 1 group' do
|
440
|
+
expect(@res[0].length).to eq 4
|
441
|
+
end
|
442
|
+
|
443
|
+
it 'exist name' do
|
444
|
+
expect(@res[0].key?('name')).to be_truthy
|
445
|
+
expect(@res[0]['name']).to eq 'Ansible-Sample-TDD'
|
446
|
+
end
|
447
|
+
|
448
|
+
it 'exist hosts' do
|
449
|
+
expect(@res[0].key?('hosts')).to be_truthy
|
450
|
+
expect(@res[0]['hosts']).to eq 'server'
|
451
|
+
end
|
452
|
+
|
453
|
+
it 'exist user' do
|
454
|
+
expect(@res[0].key?('user')).to be_truthy
|
455
|
+
expect(@res[0]['user']).to eq 'root'
|
456
|
+
end
|
457
|
+
|
458
|
+
it 'exist roles' do
|
459
|
+
expect(@res[0].key?('roles')).to be_truthy
|
460
|
+
expect(@res[0]['roles'].instance_of?(Array)).to be_truthy
|
461
|
+
expect(@res[0]['roles'][0]).to eq 'nginx'
|
462
|
+
expect(@res[0]['roles'][1]).to eq 'mariadb'
|
463
|
+
end
|
464
|
+
|
465
|
+
after do
|
466
|
+
File.delete(tmp_pb)
|
467
|
+
end
|
468
|
+
end
|
469
|
+
|
470
|
+
context '正常系(nest roles)' do
|
471
|
+
require 'yaml'
|
472
|
+
tmp_pb = 'playbook'
|
473
|
+
before do
|
474
|
+
content = <<'EOF'
|
475
|
+
- name: Ansible-Sample-TDD
|
476
|
+
hosts: server
|
477
|
+
user: root
|
478
|
+
roles:
|
479
|
+
- common
|
480
|
+
- { role: nginx, dir: '/opt/a', port: 5001 }
|
481
|
+
- { role: mariadb, dir: '/opt/b', port: 5002 }
|
482
|
+
EOF
|
483
|
+
create_file(tmp_pb,content)
|
484
|
+
@res = AnsibleSpec.load_playbook(tmp_pb)
|
485
|
+
end
|
486
|
+
|
487
|
+
it 'res is array' do
|
488
|
+
expect(@res.instance_of?(Array)).to be_truthy
|
489
|
+
end
|
490
|
+
|
491
|
+
it 'res[0] is hash' do
|
492
|
+
expect(@res[0].instance_of?(Hash)).to be_truthy
|
493
|
+
end
|
494
|
+
|
495
|
+
it 'check 1 group' do
|
496
|
+
expect(@res[0].length).to eq 4
|
497
|
+
end
|
498
|
+
|
499
|
+
it 'exist name' do
|
500
|
+
expect(@res[0].key?('name')).to be_truthy
|
501
|
+
expect(@res[0]['name']).to eq 'Ansible-Sample-TDD'
|
502
|
+
end
|
503
|
+
|
504
|
+
it 'exist hosts' do
|
505
|
+
expect(@res[0].key?('hosts')).to be_truthy
|
506
|
+
expect(@res[0]['hosts']).to eq 'server'
|
507
|
+
end
|
508
|
+
|
509
|
+
it 'exist user' do
|
510
|
+
expect(@res[0].key?('user')).to be_truthy
|
511
|
+
expect(@res[0]['user']).to eq 'root'
|
512
|
+
end
|
513
|
+
|
514
|
+
it 'exist roles' do
|
515
|
+
expect(@res[0].key?('roles')).to be_truthy
|
516
|
+
expect(@res[0]['roles'].instance_of?(Array)).to be_truthy
|
517
|
+
expect(@res[0]['roles'][0]).to eq 'common'
|
518
|
+
expect(@res[0]['roles'][1]).to eq 'nginx'
|
519
|
+
expect(@res[0]['roles'][2]).to eq 'mariadb'
|
520
|
+
end
|
521
|
+
|
522
|
+
after do
|
523
|
+
File.delete(tmp_pb)
|
524
|
+
end
|
525
|
+
end
|
526
|
+
|
415
527
|
context '正常系(include)' do
|
416
528
|
require 'yaml'
|
417
529
|
tmp_pb = 'site.yml'
|
@@ -583,13 +695,40 @@ describe "name_exist?の実行" do
|
|
583
695
|
end
|
584
696
|
|
585
697
|
describe "load_ansiblespecの実行" do
|
586
|
-
context '正常系(環境変数)' do
|
698
|
+
context '正常系(環境変数PLAYBOOK)' do
|
587
699
|
require 'yaml'
|
588
700
|
tmp_playbook = 'site_env.yml'
|
589
|
-
tmp_hosts = '
|
701
|
+
tmp_hosts = 'hosts'
|
590
702
|
|
591
703
|
before do
|
592
704
|
ENV['PLAYBOOK'] = tmp_playbook
|
705
|
+
create_file(tmp_playbook,'')
|
706
|
+
create_file(tmp_hosts,'')
|
707
|
+
@playbook, @inventoryfile = AnsibleSpec.load_ansiblespec()
|
708
|
+
end
|
709
|
+
|
710
|
+
it "playbook is #{tmp_playbook}" do
|
711
|
+
expect(@playbook).to eq tmp_playbook
|
712
|
+
end
|
713
|
+
|
714
|
+
it "inventoryfile is #{tmp_hosts}" do
|
715
|
+
expect(@inventoryfile).to eq tmp_hosts
|
716
|
+
end
|
717
|
+
|
718
|
+
after do
|
719
|
+
ENV.delete('PLAYBOOK')
|
720
|
+
ENV.delete('INVENTORY')
|
721
|
+
File.delete(tmp_playbook)
|
722
|
+
File.delete(tmp_hosts)
|
723
|
+
end
|
724
|
+
end
|
725
|
+
|
726
|
+
context '正常系(環境変数INVENTORY)' do
|
727
|
+
require 'yaml'
|
728
|
+
tmp_playbook = 'site.yml'
|
729
|
+
tmp_hosts = 'hosts_env'
|
730
|
+
|
731
|
+
before do
|
593
732
|
ENV['INVENTORY'] = tmp_hosts
|
594
733
|
create_file(tmp_playbook,'')
|
595
734
|
create_file(tmp_hosts,'')
|
@@ -710,14 +849,14 @@ EOF
|
|
710
849
|
end
|
711
850
|
end
|
712
851
|
|
713
|
-
context '
|
852
|
+
context '正常系(環境変数PLAYBOOKがないので初期値を使う)' do
|
714
853
|
require 'yaml'
|
715
854
|
tmp_playbook = 'site.yml'
|
716
|
-
tmp_hosts = '
|
855
|
+
tmp_hosts = 'hosts_env'
|
717
856
|
env_hosts = 'hosts_env'
|
718
857
|
|
719
858
|
before do
|
720
|
-
ENV['INVENTORY'] =
|
859
|
+
ENV['INVENTORY'] = env_hosts
|
721
860
|
create_file(tmp_playbook,'')
|
722
861
|
create_file(tmp_hosts,'')
|
723
862
|
@playbook, @inventoryfile = AnsibleSpec.load_ansiblespec()
|
@@ -727,8 +866,8 @@ EOF
|
|
727
866
|
expect(@playbook).to eq tmp_playbook
|
728
867
|
end
|
729
868
|
|
730
|
-
it "inventoryfile is #{
|
731
|
-
expect(@inventoryfile).to eq
|
869
|
+
it "inventoryfile is #{env_hosts}" do
|
870
|
+
expect(@inventoryfile).to eq env_hosts
|
732
871
|
end
|
733
872
|
|
734
873
|
after do
|
@@ -738,21 +877,21 @@ EOF
|
|
738
877
|
end
|
739
878
|
end
|
740
879
|
|
741
|
-
context '
|
880
|
+
context '正常系(環境変数INVENTORYがないので初期値を使う)' do
|
742
881
|
require 'yaml'
|
743
|
-
tmp_playbook = '
|
882
|
+
tmp_playbook = 'site_env.yml'
|
744
883
|
tmp_hosts = 'hosts'
|
745
884
|
env_playbook = 'site_env.yml'
|
746
885
|
|
747
886
|
before do
|
748
|
-
ENV['PLAYBOOK'] =
|
887
|
+
ENV['PLAYBOOK'] = env_playbook
|
749
888
|
create_file(tmp_playbook,'')
|
750
889
|
create_file(tmp_hosts,'')
|
751
890
|
@playbook, @inventoryfile = AnsibleSpec.load_ansiblespec()
|
752
891
|
end
|
753
892
|
|
754
|
-
it "playbook is #{
|
755
|
-
expect(@playbook).to eq
|
893
|
+
it "playbook is #{env_playbook}" do
|
894
|
+
expect(@playbook).to eq env_playbook
|
756
895
|
end
|
757
896
|
|
758
897
|
it "inventoryfile is #{tmp_hosts}" do
|
@@ -766,7 +905,7 @@ EOF
|
|
766
905
|
end
|
767
906
|
end
|
768
907
|
|
769
|
-
context '
|
908
|
+
context '正常系(環境変数PLAYBOOKがないのでplaybookは.ansiblespecを使う)' do
|
770
909
|
require 'yaml'
|
771
910
|
tmp_ansiblespec = '.ansiblespec'
|
772
911
|
tmp_playbook = 'site_spec.yml'
|
@@ -775,12 +914,11 @@ EOF
|
|
775
914
|
env_hosts = 'hosts_env'
|
776
915
|
|
777
916
|
before do
|
778
|
-
ENV['
|
917
|
+
ENV['INVENTORY'] = env_hosts
|
779
918
|
content = <<'EOF'
|
780
919
|
---
|
781
920
|
-
|
782
921
|
playbook: site_spec.yml
|
783
|
-
inventory: hosts_spec
|
784
922
|
EOF
|
785
923
|
create_file(tmp_ansiblespec,content)
|
786
924
|
create_file(tmp_playbook,'')
|
@@ -794,6 +932,47 @@ EOF
|
|
794
932
|
expect(@playbook).to eq tmp_playbook
|
795
933
|
end
|
796
934
|
|
935
|
+
it "inventoryfile is #{env_hosts}" do
|
936
|
+
expect(@inventoryfile).to eq env_hosts
|
937
|
+
end
|
938
|
+
|
939
|
+
after do
|
940
|
+
ENV.delete('INVENTORY')
|
941
|
+
File.delete(tmp_ansiblespec)
|
942
|
+
File.delete(tmp_playbook)
|
943
|
+
File.delete(tmp_hosts)
|
944
|
+
File.delete(env_playbook)
|
945
|
+
File.delete(env_hosts)
|
946
|
+
end
|
947
|
+
end
|
948
|
+
|
949
|
+
context '正常系(環境変数INVENTORYがないのでinventoryfileは.ansiblespecを使う)' do
|
950
|
+
require 'yaml'
|
951
|
+
tmp_ansiblespec = '.ansiblespec'
|
952
|
+
tmp_playbook = 'site_spec.yml'
|
953
|
+
tmp_hosts = 'hosts_spec'
|
954
|
+
env_playbook = 'site_env.yml'
|
955
|
+
env_hosts = 'hosts_env'
|
956
|
+
|
957
|
+
before do
|
958
|
+
ENV['PLAYBOOK'] = env_playbook
|
959
|
+
content = <<'EOF'
|
960
|
+
---
|
961
|
+
-
|
962
|
+
inventory: hosts_spec
|
963
|
+
EOF
|
964
|
+
create_file(tmp_ansiblespec,content)
|
965
|
+
create_file(tmp_playbook,'')
|
966
|
+
create_file(tmp_hosts,'')
|
967
|
+
create_file(env_playbook,'')
|
968
|
+
create_file(env_hosts,'')
|
969
|
+
@playbook, @inventoryfile = AnsibleSpec.load_ansiblespec()
|
970
|
+
end
|
971
|
+
|
972
|
+
it "playbook is #{env_playbook}" do
|
973
|
+
expect(@playbook).to eq env_playbook
|
974
|
+
end
|
975
|
+
|
797
976
|
it "inventoryfile is #{tmp_hosts}" do
|
798
977
|
expect(@inventoryfile).to eq tmp_hosts
|
799
978
|
end
|
@@ -940,4 +1119,131 @@ EOF
|
|
940
1119
|
File.delete(tmp_hosts)
|
941
1120
|
end
|
942
1121
|
end
|
1122
|
+
|
1123
|
+
context '正常系 (hosts is all)' do
|
1124
|
+
require 'yaml'
|
1125
|
+
tmp_ansiblespec = '.ansiblespec'
|
1126
|
+
tmp_playbook = 'site.yml'
|
1127
|
+
tmp_hosts = 'hosts'
|
1128
|
+
|
1129
|
+
before do
|
1130
|
+
|
1131
|
+
content = <<'EOF'
|
1132
|
+
---
|
1133
|
+
-
|
1134
|
+
playbook: site.yml
|
1135
|
+
inventory: hosts
|
1136
|
+
EOF
|
1137
|
+
|
1138
|
+
content_p = <<'EOF'
|
1139
|
+
- name: Ansible-Sample-TDD
|
1140
|
+
hosts: all
|
1141
|
+
user: root
|
1142
|
+
roles:
|
1143
|
+
- nginx
|
1144
|
+
- mariadb
|
1145
|
+
EOF
|
1146
|
+
|
1147
|
+
content_h = <<'EOF'
|
1148
|
+
[server]
|
1149
|
+
192.168.0.103
|
1150
|
+
192.168.0.104
|
1151
|
+
[server2]
|
1152
|
+
192.168.0.105
|
1153
|
+
192.168.0.106
|
1154
|
+
EOF
|
1155
|
+
|
1156
|
+
create_file(tmp_ansiblespec,content)
|
1157
|
+
create_file(tmp_playbook,content_p)
|
1158
|
+
create_file(tmp_hosts,content_h)
|
1159
|
+
@res = AnsibleSpec.get_properties
|
1160
|
+
end
|
1161
|
+
|
1162
|
+
it 'res is array' do
|
1163
|
+
expect(@res.instance_of?(Array)).to be_truthy
|
1164
|
+
end
|
1165
|
+
|
1166
|
+
it 'res[0] is hash' do
|
1167
|
+
expect(@res[0].instance_of?(Hash)).to be_truthy
|
1168
|
+
end
|
1169
|
+
|
1170
|
+
it 'check 1 group' do
|
1171
|
+
expect(@res[0].length).to eq 4
|
1172
|
+
end
|
1173
|
+
|
1174
|
+
it 'exist name' do
|
1175
|
+
expect(@res[0].key?('name')).to be_truthy
|
1176
|
+
expect(@res[0]['name']).to eq 'Ansible-Sample-TDD'
|
1177
|
+
end
|
1178
|
+
|
1179
|
+
it 'exist hosts' do
|
1180
|
+
expect(@res[0]['hosts'].instance_of?(Array)).to be_truthy
|
1181
|
+
expect(['192.168.0.103','192.168.0.104','192.168.0.105','192.168.0.106']).to match_array(@res[0]['hosts'])
|
1182
|
+
end
|
1183
|
+
|
1184
|
+
it 'exist user' do
|
1185
|
+
expect(@res[0].key?('user')).to be_truthy
|
1186
|
+
expect(@res[0]['user']).to eq 'root'
|
1187
|
+
end
|
1188
|
+
|
1189
|
+
it 'exist roles' do
|
1190
|
+
expect(@res[0].key?('roles')).to be_truthy
|
1191
|
+
expect(@res[0]['roles'].instance_of?(Array)).to be_truthy
|
1192
|
+
expect(@res[0]['roles'][0]).to eq 'nginx'
|
1193
|
+
expect(@res[0]['roles'][1]).to eq 'mariadb'
|
1194
|
+
end
|
1195
|
+
|
1196
|
+
after do
|
1197
|
+
File.delete(tmp_ansiblespec)
|
1198
|
+
File.delete(tmp_playbook)
|
1199
|
+
File.delete(tmp_hosts)
|
1200
|
+
end
|
1201
|
+
end
|
1202
|
+
|
1203
|
+
context '異常系 (hosts is not match)' do
|
1204
|
+
require 'yaml'
|
1205
|
+
tmp_ansiblespec = '.ansiblespec'
|
1206
|
+
tmp_playbook = 'site.yml'
|
1207
|
+
tmp_hosts = 'hosts'
|
1208
|
+
|
1209
|
+
before do
|
1210
|
+
|
1211
|
+
content = <<'EOF'
|
1212
|
+
---
|
1213
|
+
-
|
1214
|
+
playbook: site.yml
|
1215
|
+
inventory: hosts
|
1216
|
+
EOF
|
1217
|
+
|
1218
|
+
content_p = <<'EOF'
|
1219
|
+
- name: Ansible-Sample-TDD
|
1220
|
+
hosts: match
|
1221
|
+
user: root
|
1222
|
+
roles:
|
1223
|
+
- nginx
|
1224
|
+
- mariadb
|
1225
|
+
EOF
|
1226
|
+
|
1227
|
+
content_h = <<'EOF'
|
1228
|
+
[server]
|
1229
|
+
192.168.0.103
|
1230
|
+
192.168.0.104
|
1231
|
+
EOF
|
1232
|
+
|
1233
|
+
create_file(tmp_ansiblespec,content)
|
1234
|
+
create_file(tmp_playbook,content_p)
|
1235
|
+
create_file(tmp_hosts,content_h)
|
1236
|
+
end
|
1237
|
+
|
1238
|
+
it 'exitする' do
|
1239
|
+
expect{ AnsibleSpec.get_properties }.to raise_error("no hosts matched")
|
1240
|
+
end
|
1241
|
+
|
1242
|
+
after do
|
1243
|
+
File.delete(tmp_ansiblespec)
|
1244
|
+
File.delete(tmp_playbook)
|
1245
|
+
File.delete(tmp_hosts)
|
1246
|
+
end
|
1247
|
+
end
|
1248
|
+
|
943
1249
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ansible_spec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- volanja
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -135,6 +135,7 @@ files:
|
|
135
135
|
- lib/src/spec/spec_helper.rb
|
136
136
|
- spec/commands_spec.rb
|
137
137
|
- spec/dynamic_inventory_spec.rb
|
138
|
+
- spec/ec2_dynamic_inventory_spec.rb
|
138
139
|
- spec/inventory_parameters_spec.rb
|
139
140
|
- spec/load_ansible_spec.rb
|
140
141
|
- spec/spec_helper.rb
|
@@ -167,6 +168,7 @@ summary: Ansible Config Parser for Serverspec. Run test Multi Role and Multi Hos
|
|
167
168
|
test_files:
|
168
169
|
- spec/commands_spec.rb
|
169
170
|
- spec/dynamic_inventory_spec.rb
|
171
|
+
- spec/ec2_dynamic_inventory_spec.rb
|
170
172
|
- spec/inventory_parameters_spec.rb
|
171
173
|
- spec/load_ansible_spec.rb
|
172
174
|
- spec/spec_helper.rb
|