ansible_spec 0.2.6 → 0.2.7.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5f3f3fdce96a604720925a233a0b2cf0f11caf0b
4
- data.tar.gz: aa92bf9f29d175293cb755145fb8e4b6123e6f63
3
+ metadata.gz: e1bec80ee7959dd64b421907391935a92b0c6ce3
4
+ data.tar.gz: 4d6c85a0bbf27248258d93973761da23f2c7bb1c
5
5
  SHA512:
6
- metadata.gz: 39a6ec70aaf382a4bd991536b02a56d767401477ce9def30cf71ec3320fb857880a7b9386f15f661e0300a1796b827f54cb0b2dc5dfafc8022d50799bc8dd819
7
- data.tar.gz: 9b78e44c7fcad0d64324465311a6126ff911e931dd0b8e0af599d23a66d150dace9a4a16a76ff4287cfd8bb5263c305f89611daa6bbef1e99314fe5ad2186843
6
+ metadata.gz: 12363bc7150b16d8798af0708b33dbcc52f0becf9bddd65e13fc3d49a818962b05197545421502f9b0e5bcf490aa148cd6cd26f6d7b6cc451296565dc365e7d7
7
+ data.tar.gz: bc0c99d1a0e31833ceaef6a0c48f1b84552b2f96bf40521491b8c6dac56a16995bfdb97a960acb5c0b1ec5e1d1fc7649444a689d75b32d69b7251af71bac042c
@@ -93,7 +93,8 @@ module AnsibleSpec
93
93
 
94
94
  # param filename
95
95
  # {"databases":{"hosts":["aaa.com","bbb.com"],"vars":{"a":true}}}
96
- # return {"databases"=>["aaa.com", "bbb.com"]}
96
+ # {"webservers":["aaa.com","bbb.com"]}
97
+ # return: Hash {"databases"=>[{"uri" => "aaa.com", "port" => 22}, {"uri" => "bbb.com", "port" => 22}]}
97
98
  def self.get_dynamic_inventory(file)
98
99
  if file[0] == "/"
99
100
  file_path = file
@@ -106,12 +107,21 @@ module AnsibleSpec
106
107
 
107
108
  if dyn_inv.key?('_meta')
108
109
  # assume we have an ec2.py created dynamic inventory
109
- res = dyn_inv.tap{ |h| h.delete("_meta") }
110
- else
111
- dyn_inv.each{|k,v|
112
- res["#{k.to_s}"] = v['hosts']
113
- }
110
+ dyn_inv = dyn_inv.tap{ |h| h.delete("_meta") }
114
111
  end
112
+ dyn_inv.each{|k,v|
113
+ res["#{k.to_s}"] = Array.new unless res.has_key?("#{k.to_s}")
114
+ if v.is_a?(Array)
115
+ # {"webservers":["aaa.com","bbb.com"]}
116
+ v.each {|host|
117
+ res["#{k.to_s}"] << {"uri"=> host, "port"=> 22}
118
+ }
119
+ elsif v.has_key?("hosts") && v['hosts'].is_a?(Array)
120
+ v['hosts'].each {|host|
121
+ res["#{k.to_s}"] << {"uri"=> host, "port"=> 22}
122
+ }
123
+ end
124
+ }
115
125
  return res
116
126
  end
117
127
 
@@ -1,3 +1,3 @@
1
1
  module AnsibleSpec
2
- VERSION = "0.2.6"
2
+ VERSION = "0.2.7.beta"
3
3
  end
@@ -2,7 +2,43 @@
2
2
  require 'ansible_spec'
3
3
 
4
4
  describe "load_targetsの実行" do
5
- context '正常系:単グループ:DynamicInventory' do
5
+ context '正常系:DynamicInventory:1 Group, 1 hosts' do
6
+ tmp_hosts = 'hosts'
7
+ before do
8
+ content_h = <<'EOF'
9
+ #!/bin/bash
10
+ echo '{"databases": {"hosts": ["host1.example.com"],"vars":{"a": true}}}'
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 'exist 1 group' do
22
+ expect(@res.length).to eq 1
23
+ end
24
+
25
+ it 'exist group' do
26
+ expect(@res.key?('databases')).to be_truthy
27
+ end
28
+
29
+ it 'databases host1.example.com' do
30
+ obj = @res['databases'][0]
31
+ expect(obj.instance_of?(Hash)).to be_truthy
32
+ expect(obj).to include({'uri' => 'host1.example.com',
33
+ 'port' => 22})
34
+ end
35
+
36
+ after do
37
+ File.delete(tmp_hosts)
38
+ end
39
+ end
40
+
41
+ context '正常系:DynamicInventory:1 Group, 2 hosts' do
6
42
  tmp_hosts = 'hosts'
7
43
  before do
8
44
  content_h = <<'EOF'
@@ -26,16 +62,60 @@ EOF
26
62
  expect(@res.key?('databases')).to be_truthy
27
63
  end
28
64
 
29
- it 'databases aaa.com' do
65
+ it 'databases host1.example.com' do
30
66
  obj = @res['databases'][0]
31
- expect(obj.instance_of?(String)).to be_truthy
32
- expect(obj).to eq 'host1.example.com'
67
+ expect(obj.instance_of?(Hash)).to be_truthy
68
+ expect(obj).to include({'uri' => 'host1.example.com',
69
+ 'port' => 22})
33
70
  end
34
71
 
35
- it 'databases bbb.com' do
72
+ it 'databases host2.example.com' do
36
73
  obj = @res['databases'][1]
37
- expect(obj.instance_of?(String)).to be_truthy
38
- expect(obj).to eq 'host2.example.com'
74
+ expect(obj.instance_of?(Hash)).to be_truthy
75
+ expect(obj).to include({'uri' => 'host2.example.com',
76
+ 'port' => 22})
77
+ end
78
+
79
+ after do
80
+ File.delete(tmp_hosts)
81
+ end
82
+ end
83
+ context '正常系:DynamicInventory:1 Group, 2 hosts. but no vars' do
84
+ tmp_hosts = 'hosts'
85
+ before do
86
+ content_h = <<'EOF'
87
+ #!/bin/bash
88
+ echo '{"webservers": [ "host2.example.com", "host3.example.com" ]}'
89
+ EOF
90
+ create_file(tmp_hosts,content_h)
91
+ File.chmod(0755,tmp_hosts)
92
+ @res = AnsibleSpec.load_targets(tmp_hosts)
93
+ end
94
+
95
+ it 'res is hash' do
96
+ expect(@res.instance_of?(Hash)).to be_truthy
97
+ end
98
+
99
+ it 'exist 1 group' do
100
+ expect(@res.length).to eq 1
101
+ end
102
+
103
+ it 'exist group' do
104
+ expect(@res.key?('webservers')).to be_truthy
105
+ end
106
+
107
+ it 'databases host1.example.com' do
108
+ obj = @res['webservers'][0]
109
+ expect(obj.instance_of?(Hash)).to be_truthy
110
+ expect(obj).to include({'uri' => 'host2.example.com',
111
+ 'port' => 22})
112
+ end
113
+
114
+ it 'databases host2.example.com' do
115
+ obj = @res['webservers'][1]
116
+ expect(obj.instance_of?(Hash)).to be_truthy
117
+ expect(obj).to include({'uri' => 'host3.example.com',
118
+ 'port' => 22})
39
119
  end
40
120
 
41
121
  after do
@@ -32,17 +32,55 @@ EOF
32
32
 
33
33
  it 'tag_some_other_key1 contains host-1 and host-2' do
34
34
  obj = @res['tag_some_other_key1'][0]
35
- expect(obj.instance_of?(String)).to be_truthy
36
- expect(obj).to eq 'host-1'
35
+ expect(obj.instance_of?(Hash)).to be_truthy
36
+ expect(obj).to include({'uri' => 'host-1',
37
+ 'port' => 22})
37
38
  obj = @res['tag_some_other_key1'][1]
38
- expect(obj.instance_of?(String)).to be_truthy
39
- expect(obj).to eq 'host-2'
39
+ expect(obj.instance_of?(Hash)).to be_truthy
40
+ expect(obj).to include({'uri' => 'host-2',
41
+ 'port' => 22})
40
42
  end
41
43
 
42
44
  it 'some_other_key2 contains host-1' do
43
45
  obj = @res['some_other_key2'][0]
44
- expect(obj.instance_of?(String)).to be_truthy
45
- expect(obj).to eq 'host-1'
46
+ expect(obj.instance_of?(Hash)).to be_truthy
47
+ expect(obj).to include({'uri' => 'host-1',
48
+ 'port' => 22})
49
+ end
50
+
51
+ after do
52
+ File.delete(tmp_hosts)
53
+ end
54
+ end
55
+ context 'EC2_DynamicInventory' do
56
+ tmp_hosts = 'hosts'
57
+ before do
58
+ content_h = <<'EOF'
59
+ #!/bin/bash
60
+ echo '{ "_meta" : {"hostvars": {"54.1.2.3": {"ec2_ip_address": "54.1.2.3","ec2_key_name": "my-secret-key", "ec2_launch_time": "2016-01-06T03:59:56.000Z", "ec2_tag_Name": "sample-app", "ec2_tag_Stack": "sample-app"}}},"tag_Name_sample_app": ["54.1.2.3"]}'
61
+ EOF
62
+ create_file(tmp_hosts,content_h)
63
+ File.chmod(0755,tmp_hosts)
64
+ @res = AnsibleSpec.load_targets(tmp_hosts)
65
+ end
66
+
67
+ it 'res is hash' do
68
+ expect(@res.instance_of?(Hash)).to be_truthy
69
+ end
70
+
71
+ it 'contains 1 groups' do
72
+ expect(@res.length).to eq 1
73
+ end
74
+
75
+ it 'contains key tag_Name_sample_app' do
76
+ expect(@res.key?('tag_Name_sample_app')).to be_truthy
77
+ end
78
+
79
+ it 'tag_Name_sample_app contains hash' do
80
+ obj = @res['tag_Name_sample_app'][0]
81
+ expect(obj.instance_of?(Hash)).to be_truthy
82
+ expect(obj).to include({'uri' => '54.1.2.3',
83
+ 'port' => 22})
46
84
  end
47
85
 
48
86
  after do
data/spec/ssh_spec.rb CHANGED
@@ -13,25 +13,7 @@ describe 'ssh' do
13
13
  n = 0
14
14
  properties.each do |property|
15
15
  property["hosts"].each do |host|
16
- #ENV['TARGET_PRIVATE_KEY'] = '~/.ssh/id_rsa'
17
- #t.pattern = 'roles/{' + property["roles"].join(',') + '}/spec/*_spec.rb'
18
- @ssh = double(:ssh)
19
- if host.instance_of?(Hash)
20
- set :host, host["uri"]
21
- unless host["user"].nil?
22
- user = host["user"]
23
- else
24
- user = property["user"]
25
- end
26
- set :ssh_options, :user => user, :port => host["port"], :keys => host["private_key"]
27
- allow(@ssh).to receive(:port).and_return(Specinfra.configuration.ssh_options[:port])
28
- allow(@ssh).to receive(:keys).and_return(Specinfra.configuration.ssh_options[:keys])
29
- else
30
- set :host, host
31
- set :ssh_options, :user => property["user"]
32
- end
33
- allow(@ssh).to receive(:host).and_return(Specinfra.configuration.host)
34
- allow(@ssh).to receive(:user).and_return(Specinfra.configuration.ssh_options[:user])
16
+ @ssh = set_ssh(property, host)
35
17
  @h["task_#{n}"] = @ssh
36
18
  n += 1
37
19
  end
@@ -43,23 +25,24 @@ describe 'ssh' do
43
25
  expect(v.user).to eq 'root'
44
26
  expect(v.host).to eq '192.168.0.1'
45
27
  end
28
+
46
29
  it '192.168.0.2:22' do
47
30
  v = @h["task_1"]
48
31
  expect(v.user).to eq 'root'
49
32
  expect(v.host).to eq '192.168.0.2'
50
- expect(v.port).to eq 22
33
+ expect(v.port).to eq '22'
51
34
  end
52
- it '192.168.0.3 ansible_ssh_port=22' do
35
+ it '192.168.0.3:5309' do
53
36
  v = @h["task_2"]
54
37
  expect(v.user).to eq 'root'
55
38
  expect(v.host).to eq '192.168.0.3'
56
- expect(v.port).to eq 5309
39
+ expect(v.port).to eq '5309'
57
40
  end
58
41
  it '192.168.0.4 ansible_ssh_private_key_file=~/.ssh/id_rsa' do
59
42
  v = @h["task_3"]
60
43
  expect(v.user).to eq 'root'
61
44
  expect(v.host).to eq '192.168.0.4'
62
- expect(v.port).to eq 22
45
+ expect(v.port).to eq '22'
63
46
  expect(v.keys).to eq '~/.ssh/id_rsa'
64
47
  end
65
48
 
@@ -67,14 +50,14 @@ describe 'ssh' do
67
50
  v = @h["task_4"]
68
51
  expect(v.user).to eq 'git'
69
52
  expect(v.host).to eq '192.168.0.5'
70
- expect(v.port).to eq 22
53
+ expect(v.port).to eq '22'
71
54
  end
72
55
 
73
56
  it 'jumper ansible_ssh_port=5555 ansible_ssh_host=192.168.1.50' do
74
57
  v = @h["task_5"]
75
58
  expect(v.user).to eq 'root'
76
59
  expect(v.host).to eq '192.168.1.50'
77
- expect(v.port).to eq 5555
60
+ expect(v.port).to eq '5555'
78
61
  end
79
62
 
80
63
  it 'www[01:02].example.com' do
@@ -107,6 +90,55 @@ describe 'ssh' do
107
90
  end
108
91
  end
109
92
 
93
+
94
+ describe 'ssh with dynamic inventory' do
95
+ context 'ssh with' do
96
+ before do
97
+ create_dynamic_inventory
98
+ properties = AnsibleSpec.get_properties
99
+ @h = Hash.new
100
+ n = 0
101
+ properties.each do |property|
102
+ property["hosts"].each do |host|
103
+ #t.pattern = 'roles/{' + property["roles"].join(',') + '}/spec/*_spec.rb'
104
+ @ssh = set_ssh(property, host)
105
+ @h["task_#{n}"] = @ssh
106
+ n += 1
107
+ end
108
+ end
109
+ end
110
+
111
+ it 'tag_Name_sample_app' do
112
+ v = @h["task_0"]
113
+ expect(v.user).to eq 'root'
114
+ expect(v.host).to eq '54.1.2.3'
115
+ expect(v.port).to eq '22'
116
+ end
117
+
118
+ after do
119
+ delete_normality
120
+ end
121
+
122
+ end
123
+ end
124
+
125
+ # summary: lib/src/Rakefile
126
+ def set_ssh(property, host)
127
+ @ssh = double(:ssh)
128
+ set :host, host["uri"]
129
+ unless host["user"].nil?
130
+ user = host["user"]
131
+ else
132
+ user = property["user"]
133
+ end
134
+ set :ssh_options, :user => user, :port => host["port"].to_s, :keys => host["private_key"]
135
+ allow(@ssh).to receive(:host).and_return(Specinfra.configuration.host)
136
+ allow(@ssh).to receive(:user).and_return(Specinfra.configuration.ssh_options[:user])
137
+ allow(@ssh).to receive(:port).and_return(Specinfra.configuration.ssh_options[:port])
138
+ allow(@ssh).to receive(:keys).and_return(Specinfra.configuration.ssh_options[:keys])
139
+ return @ssh
140
+ end
141
+
110
142
  def create_normality
111
143
  tmp_ansiblespec = '.ansiblespec'
112
144
  tmp_playbook = 'site.yml'
@@ -151,6 +183,45 @@ EOF
151
183
  end
152
184
  end
153
185
 
186
+ def create_dynamic_inventory
187
+ tmp_ansiblespec = '.ansiblespec'
188
+ tmp_playbook = 'site.yml'
189
+ tmp_hosts = 'hosts'
190
+
191
+ content = <<'EOF'
192
+ ---
193
+ -
194
+ playbook: site.yml
195
+ inventory: hosts
196
+ EOF
197
+
198
+ content_p = <<'EOF'
199
+ - name: Ansible-Sample-TDD
200
+ hosts: tag_Name_sample_app
201
+ user: root
202
+ roles:
203
+ - nginx
204
+ - mariadb
205
+ EOF
206
+
207
+ content_h = <<'EOF'
208
+ #!/bin/bash
209
+ echo '{ "_meta" : {"hostvars": {"54.1.2.3": {"ec2_ip_address": "54.1.2.3","ec2_key_name": "my-secret-key", "ec2_launch_time": "2016-01-06T03:59:56.000Z", "ec2_tag_Name": "sample-app", "ec2_tag_Stack": "sample-app"}}},"tag_Name_sample_app": ["54.1.2.3"]}'
210
+ EOF
211
+
212
+ File.open(tmp_ansiblespec, 'w') do |f|
213
+ f.puts content
214
+ end
215
+ File.open(tmp_playbook, 'w') do |f|
216
+ f.puts content_p
217
+ end
218
+ File.open(tmp_hosts, 'w') do |f|
219
+ f.puts content_h
220
+ end
221
+ File.chmod(0755,tmp_hosts)
222
+ end
223
+
224
+
154
225
  def delete_normality
155
226
  tmp_ansiblespec = '.ansiblespec'
156
227
  tmp_playbook = 'site.yml'
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.6
4
+ version: 0.2.7.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - volanja
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-22 00:00:00.000000000 Z
11
+ date: 2016-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -156,9 +156,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
156
156
  version: '0'
157
157
  required_rubygems_version: !ruby/object:Gem::Requirement
158
158
  requirements:
159
- - - '>='
159
+ - - '>'
160
160
  - !ruby/object:Gem::Version
161
- version: '0'
161
+ version: 1.3.1
162
162
  requirements: []
163
163
  rubyforge_project:
164
164
  rubygems_version: 2.1.11