kitchen-ec2 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 04327b0481d7914db71e72ee411cdcab4fd6eb9b
4
- data.tar.gz: 6fd0d5a57e11c1866e706616a7a8e61945973f72
3
+ metadata.gz: f3897a853bbce0fe66db106da6852004cc39e6bc
4
+ data.tar.gz: 804747d7bf806717e31e4b6ac946497ee3aaf935
5
5
  SHA512:
6
- metadata.gz: 1ff3b4a368e69d2fc0233b402440e1bdf8f2d39451d22486a895124d86ca84aede65187bdba92f6da1acbf18b85a2c5ecce6b635d9e70b31200368a2f7120bcf
7
- data.tar.gz: d5e7123d787c59ae27b54c2ee3f2d0c43ad6d898722c8a55f150fe440e8cfca88efd28fe77631fdeaf86997cd687000b6e8440d3bd5570853cd36005a2252efb
6
+ metadata.gz: eec29c52770a4d005cf1a2769cc131f25cd351591075108ebe745a954b2e6243d30ebdf9cd87848b03321dcca124f80cae0861cec9aa5e193ee36cabf649cdb5
7
+ data.tar.gz: b53ed98bc1d2419f90b65114fe0db08db33f036d1e222e4dbbef9e791e396e6704492b58ddf1b9da406703a47e845e88f2efacde5cab3fdf7b3717388e7709f7
data/.cane CHANGED
@@ -0,0 +1 @@
1
+ --style-measure 100
data/.tailor CHANGED
@@ -90,7 +90,7 @@ Tailor.config do |config|
90
90
  style.indentation_spaces 2, level: :error
91
91
  style.max_code_lines_in_class 300, level: :error
92
92
  style.max_code_lines_in_method 30, level: :error
93
- style.max_line_length 80, level: :error
93
+ style.max_line_length 100, level: :error
94
94
  style.spaces_after_comma 1, level: :off
95
95
  style.spaces_after_lbrace 1, level: :error
96
96
  style.spaces_after_lbracket 0, level: :error
data/CHANGELOG.md CHANGED
@@ -1,8 +1,28 @@
1
+ ## 0.8.0 / 2014-02-11
2
+
3
+ ### Bug fixes
4
+
5
+ * Pull request [#29][], pull request [#28][]: Relax Test Kitchen dependency to allow versions 1.0 and up. ([@coderanger][], [@someara][])
6
+
7
+ ## New features
8
+
9
+ * Pull request [#29][]: Add `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` fallback environment variable support. ([@coderanger][])
10
+ * Pull request [#27][], pull request [#31][]: Make EC2 endpoint configurable for services implementing the AWS APIs. ([@bozinsky][], [@spheromak][])
11
+ * Pull request [#34][]: Support AWS session tokens for use with IAM roles. ([@coderanger][])
12
+ * Pull request [#22][]: Add ebs_optimized attribute. ([@tiwilliam][])
13
+
14
+ ### Improvements
15
+
16
+ * Pull request [#20][], pull request [#21][], issue [#14][]: Add configurability around whether to use DNS name, public or private IP addresses when connecting to instances. ([@matheeeny][], [@Atalanta][], [@fnichol][])
17
+ * Pull request [#15][]: In VPC groups must be specified by setting :security_group_ids rather than :groups. ([@eherot][])
18
+ * Pull request [#23][]: README updates for badges. ([@sethvargo][], [@arangamani][])
19
+
20
+
1
21
  ## 0.7.0 / 2013-08-29
2
22
 
3
23
  ### Bug fixes
4
24
 
5
- * Pull request #13: #wait_for_ssh takes 2 arguments. (@dysinger)
25
+ * Pull request [#13][]: #wait_for_ssh takes 2 arguments. ([@dysinger][])
6
26
 
7
27
  ### Improvements
8
28
 
@@ -46,8 +66,31 @@
46
66
  [#7]: https://github.com/opscode/kitchen-ec2/issues/7
47
67
  [#8]: https://github.com/opscode/kitchen-ec2/issues/8
48
68
  [#9]: https://github.com/opscode/kitchen-ec2/issues/9
69
+ [#13]: https://github.com/opscode/kitchen-ec2/issues/13
70
+ [#14]: https://github.com/opscode/kitchen-ec2/issues/14
71
+ [#15]: https://github.com/opscode/kitchen-ec2/issues/15
72
+ [#20]: https://github.com/opscode/kitchen-ec2/issues/20
73
+ [#21]: https://github.com/opscode/kitchen-ec2/issues/21
74
+ [#22]: https://github.com/opscode/kitchen-ec2/issues/22
75
+ [#23]: https://github.com/opscode/kitchen-ec2/issues/23
76
+ [#27]: https://github.com/opscode/kitchen-ec2/issues/27
77
+ [#28]: https://github.com/opscode/kitchen-ec2/issues/28
78
+ [#29]: https://github.com/opscode/kitchen-ec2/issues/29
79
+ [#31]: https://github.com/opscode/kitchen-ec2/issues/31
80
+ [#34]: https://github.com/opscode/kitchen-ec2/issues/34
81
+ [@Atalanta]: https://github.com/Atalanta
82
+ [@arangamani]: https://github.com/arangamani
83
+ [@bozinsky]: https://github.com/bozinsky
84
+ [@coderanger]: https://github.com/coderanger
49
85
  [@dissonanz]: https://github.com/dissonanz
86
+ [@dysinger]: https://github.com/dysinger
87
+ [@eherot]: https://github.com/eherot
50
88
  [@fnichol]: https://github.com/fnichol
51
89
  [@halcyonCorsair]: https://github.com/halcyonCorsair
52
90
  [@juliandunn]: https://github.com/juliandunn
91
+ [@matheeeny]: https://github.com/matheeeny
53
92
  [@mattray]: https://github.com/mattray
93
+ [@sethvargo]: https://github.com/sethvargo
94
+ [@someara]: https://github.com/someara
95
+ [@spheromak]: https://github.com/spheromak
96
+ [@tiwilliam]: https://github.com/tiwilliam
data/Gemfile CHANGED
@@ -5,4 +5,5 @@ gemspec
5
5
 
6
6
  group :test do
7
7
  gem 'rake'
8
+ gem 'pry'
8
9
  end
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # <a name="title"></a> Kitchen::Ec2: A Test Kitchen Driver for Amazon EC2
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/kitchen-ec2.png)](http://badge.fury.io/rb/kitchen-ec2)
4
- [![Build Status](https://travis-ci.org/opscode/kitchen-ec2.png)](https://travis-ci.org/opscode/kitchen-ec2)
5
- [![Code Climate](https://codeclimate.com/github/opscode/kitchen-ec2.png)](https://codeclimate.com/github/opscode/kitchen-ec2)
4
+ [![Build Status](https://travis-ci.org/test-kitchen/kitchen-ec2.png)](https://travis-ci.org/test-kitchen/kitchen-ec2)
5
+ [![Code Climate](https://codeclimate.com/github/test-kitchen/kitchen-ec2.png)](https://codeclimate.com/github/test-kitchen/kitchen-ec2)
6
6
 
7
- A Test Kitchen Driver for Amazon EC2.
7
+ A [Test Kitchen][kitchenci] Driver for Amazon EC2.
8
8
 
9
9
  This driver uses the [fog gem][fog_gem] to provision and destroy EC2
10
10
  instances. Use Amazon's cloud for your infrastructure testing!
@@ -27,12 +27,12 @@ supported:
27
27
  ```ruby
28
28
  ---
29
29
  platforms:
30
- - name: ubuntu-10.04
31
- - name: ubuntu-12.04
32
- - name: ubuntu-12.10
33
- - name: ubuntu-13.04
34
- - name: centos-6.4
35
- - name: debian-7.1.0
30
+ - name: ubuntu-10.04
31
+ - name: ubuntu-12.04
32
+ - name: ubuntu-12.10
33
+ - name: ubuntu-13.04
34
+ - name: centos-6.4
35
+ - name: debian-7.1.0
36
36
  ```
37
37
 
38
38
  This will effectively generate a configuration similar to:
@@ -40,20 +40,20 @@ This will effectively generate a configuration similar to:
40
40
  ```ruby
41
41
  ---
42
42
  platforms:
43
- - name: ubuntu-10.04
44
- driver_config:
45
- image_id: ami-1ab3ce73
46
- username: ubuntu
47
- - name: ubuntu-12.04
48
- driver_config:
49
- image_id: ami-2f115c46
50
- username: ubuntu
51
- # ...
52
- - name: centos-6.4
53
- driver_config:
54
- image_id: ami-bf5021d6
55
- username: root
56
- # ...
43
+ - name: ubuntu-10.04
44
+ driver:
45
+ image_id: ami-1ab3ce73
46
+ username: ubuntu
47
+ - name: ubuntu-12.04
48
+ driver:
49
+ image_id: ami-2f115c46
50
+ username: ubuntu
51
+ # ...
52
+ - name: centos-6.4
53
+ driver:
54
+ image_id: ami-bf5021d6
55
+ username: root
56
+ # ...
57
57
  ```
58
58
 
59
59
  For specific default values, please consult [amis.json][amis_json].
@@ -87,15 +87,29 @@ or `nil` otherwise.
87
87
  The default will be read from the `AWS_SSH_KEY_ID` environment variable if set,
88
88
  or `nil` otherwise.
89
89
 
90
+ ### endpoint
91
+
92
+ The API endpoint for executing EC2 commands.
93
+
94
+ The default will be computed from the AWS region name for the instance.
95
+
90
96
  ### <a name="config-flavor-id"></a> flavor\_id
91
97
 
92
98
  The EC2 [instance type][instance_docs] (also known as size) to use.
93
99
 
94
100
  The default is `"m1.small"`.
95
101
 
96
- ### <a name="config-groups"></a> groups
102
+ ### <a name="config-ebs-optimized"></a> ebs\_optimized
97
103
 
98
- An Array of EC [security groups][group_docs] which will be applied to the
104
+ Option to launch EC2 instance with optimized EBS volume. See
105
+ [Amazon EC2 Instance Types](http://aws.amazon.com/ec2/instance-types/) to find
106
+ out more about instance types that can be launched as EBS-optimized instances.
107
+
108
+ The default is `false`.
109
+
110
+ ### <a name="config-security-group-ids"></a> security_group_ids
111
+
112
+ An Array of EC2 [security groups][group_docs] which will be applied to the
99
113
  instance.
100
114
 
101
115
  The default is `["default"]`.
@@ -114,27 +128,22 @@ The SSH port number to be used when communicating with the instance.
114
128
 
115
129
  The default is `22`.
116
130
 
117
- ### <a name="config-region"></a> region
131
+ ### < name="interface"></a> interface
118
132
 
119
- **Required** The AWS [region][region_docs] to use.
133
+ The place from which to derive the hostname for communicating with the instance. May be `dns`, `public` or `private`. If this is unset, the driver will derive the hostname by failing back in the following order:
120
134
 
121
- The default is `"us-east-1"`.
135
+ 1. DNS Name
136
+ 2. Public IP Address
137
+ 3. Private IP Address
122
138
 
123
- ### <a name="config-require-chef-omnibus"></a> require\_chef\_omnibus
139
+ The default is unset.
124
140
 
125
- Determines whether or not a Chef [Omnibus package][chef_omnibus_dl] will be
126
- installed. There are several different behaviors available:
127
141
 
128
- * `true` - the latest release will be installed. Subsequent converges
129
- will skip re-installing if chef is present.
130
- * `latest` - the latest release will be installed. Subsequent converges
131
- will always re-install even if chef is present.
132
- * `<VERSION_STRING>` (ex: `10.24.0`) - the desired version string will
133
- be passed the the install.sh script. Subsequent converges will skip if
134
- the installed version and the desired version match.
135
- * `false` or `nil` - no chef is installed.
142
+ ### <a name="config-region"></a> region
136
143
 
137
- The default value is unset, or `nil`.
144
+ **Required** The AWS [region][region_docs] to use.
145
+
146
+ The default is `"us-east-1"`.
138
147
 
139
148
  ### <a name="config-ssh-key"></a> ssh\_key
140
149
 
@@ -148,13 +157,6 @@ The EC2 [subnet][subnet_docs] to use.
148
157
 
149
158
  The default is unset, or `nil`.
150
159
 
151
- ### <a name="config-sudo"></a> sudo
152
-
153
- Whether or not to prefix remote system commands such as installing and
154
- running Chef with `sudo`.
155
-
156
- The default is `true`.
157
-
158
160
  ### <a name="config-tags"></a> tags
159
161
 
160
162
  The Hash of EC tag name/value pairs which will be applied to the instance.
@@ -176,26 +178,27 @@ to override default configuration.
176
178
 
177
179
  ```yaml
178
180
  ---
179
- driver_plugin: ec2
180
- driver_config:
181
+ driver:
182
+ name: ec2
181
183
  aws_access_key_id: KAS...
182
184
  aws_secret_access_key: 3UK...
183
185
  aws_ssh_key_id: id_rsa-aws
184
186
  ssh_key: /path/to/id_rsa-aws
187
+ security_group_ids: ["sg-1a2b3c4d"]
185
188
  region: us-east-1
186
189
  availability_zone: us-east-1b
187
190
  require_chef_omnibus: true
188
191
  subnet_id: subnet-6d6...
189
192
 
190
193
  platforms:
191
- - name: ubuntu-12.04
192
- driver_config:
193
- image_id: ami-fd20ad94
194
- username: ubuntu
195
- - name: centos-6.3
196
- driver_config:
197
- image_id: ami-ef5ff086
198
- username: ec2-user
194
+ - name: ubuntu-12.04
195
+ driver:
196
+ image_id: ami-fd20ad94
197
+ username: ubuntu
198
+ - name: centos-6.3
199
+ driver:
200
+ image_id: ami-ef5ff086
201
+ username: ec2-user
199
202
 
200
203
  suites:
201
204
  # ...
@@ -206,25 +209,26 @@ ERB which can help to factor out secrets and credentials. For example:
206
209
 
207
210
  ```yaml
208
211
  ---
209
- driver_plugin: ec2
210
- driver_config:
212
+ driver:
213
+ name: ec2
211
214
  aws_access_key_id: <%= ENV['AWS_ACCESS_KEY'] %>
212
215
  aws_secret_access_key: <%= ENV['AWS_SECRET_KEY'] %>
213
216
  aws_ssh_key_id: <%= ENV['AWS_SSH_KEY_ID'] %>
214
217
  ssh_key: <%= File.expand_path('~/.ssh/id_rsa') %>
218
+ security_group_ids: ["sg-1a2b3c4d"]
215
219
  region: us-east-1
216
220
  availability_zone: us-east-1b
217
221
  require_chef_omnibus: true
218
222
 
219
223
  platforms:
220
- - name: ubuntu-12.04
221
- driver_config:
222
- image_id: ami-fd20ad94
223
- username: ubuntu
224
- - name: centos-6.3
225
- driver_config:
226
- image_id: ami-ef5ff086
227
- username: ec2-user
224
+ - name: ubuntu-12.04
225
+ driver:
226
+ image_id: ami-fd20ad94
227
+ username: ubuntu
228
+ - name: centos-6.3
229
+ driver:
230
+ image_id: ami-ef5ff086
231
+ username: ec2-user
228
232
 
229
233
  suites:
230
234
  # ...
@@ -255,13 +259,13 @@ Apache 2.0 (see [LICENSE][license])
255
259
 
256
260
 
257
261
  [author]: https://github.com/fnichol
258
- [issues]: https://github.com/opscode/kitchen-ec2/issues
259
- [license]: https://github.com/opscode/kitchen-ec2/blob/master/LICENSE
260
- [repo]: https://github.com/opscode/kitchen-ec2
262
+ [issues]: https://github.com/test-kitchen/kitchen-ec2/issues
263
+ [license]: https://github.com/test-kitchen/kitchen-ec2/blob/master/LICENSE
264
+ [repo]: https://github.com/test-kitchen/kitchen-ec2
261
265
  [driver_usage]: http://docs.kitchen-ci.org/drivers/usage
262
- [chef_omnibus_dl]: http://www.opscode.com/chef/install/
266
+ [chef_omnibus_dl]: http://www.getchef.com/chef/install/
263
267
 
264
- [amis_json]: https://github.com/opscode/kitchen-ec2/blob/master/data/amis.json
268
+ [amis_json]: https://github.com/test-kitchen/kitchen-ec2/blob/master/data/amis.json
265
269
  [ami_docs]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html
266
270
  [aws_site]: http://aws.amazon.com/
267
271
  [credentials_docs]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/SettingUp_CommandLine.html#using-credentials-access-key
@@ -269,5 +273,6 @@ Apache 2.0 (see [LICENSE][license])
269
273
  [group_docs]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html
270
274
  [instance_docs]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html
271
275
  [key_id_docs]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/verifying-your-key-pair.html
276
+ [kitchenci]: http://kitchen.ci/
272
277
  [region_docs]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html
273
278
  [subnet_docs]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html
data/kitchen-ec2.gemspec CHANGED
@@ -9,18 +9,19 @@ Gem::Specification.new do |gem|
9
9
  gem.license = 'Apache 2.0'
10
10
  gem.authors = ["Fletcher Nichol"]
11
11
  gem.email = ["fnichol@nichol.ca"]
12
- gem.description = "Kitchen::Driver::Ec2 - A Test Kitchen Driver for Ec2"
12
+ gem.description = "A Test Kitchen Driver for Amazon EC2"
13
13
  gem.summary = gem.description
14
- gem.homepage = "https://github.com/opscode/kitchen-ec2/"
14
+ gem.homepage = "http://kitchen.ci/"
15
15
 
16
16
  gem.files = `git ls-files`.split($/)
17
17
  gem.executables = []
18
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
19
  gem.require_paths = ["lib"]
20
20
 
21
- gem.add_dependency 'test-kitchen', '~> 1.0.0.beta.3'
21
+ gem.add_dependency 'test-kitchen', '~> 1.0'
22
22
  gem.add_dependency 'fog'
23
23
 
24
+ gem.add_development_dependency 'rspec'
24
25
  gem.add_development_dependency 'cane'
25
26
  gem.add_development_dependency 'tailor'
26
27
  gem.add_development_dependency 'countloc'
@@ -19,7 +19,6 @@
19
19
  require 'benchmark'
20
20
  require 'json'
21
21
  require 'fog'
22
-
23
22
  require 'kitchen'
24
23
 
25
24
  module Kitchen
@@ -34,13 +33,17 @@ module Kitchen
34
33
  default_config :region, 'us-east-1'
35
34
  default_config :availability_zone, 'us-east-1b'
36
35
  default_config :flavor_id, 'm1.small'
37
- default_config :groups, ['default']
36
+ default_config :ebs_optimized, false
37
+ default_config :security_group_ids, ['default']
38
38
  default_config :tags, { 'created-by' => 'test-kitchen' }
39
39
  default_config :aws_access_key_id do |driver|
40
- ENV['AWS_ACCESS_KEY']
40
+ ENV['AWS_ACCESS_KEY'] || ENV['AWS_ACCESS_KEY_ID']
41
41
  end
42
42
  default_config :aws_secret_access_key do |driver|
43
- ENV['AWS_SECRET_KEY']
43
+ ENV['AWS_SECRET_KEY'] || ENV['AWS_SECRET_ACCESS_KEY']
44
+ end
45
+ default_config :aws_session_token do |driver|
46
+ ENV['AWS_SESSION_TOKEN'] || ENV['AWS_TOKEN']
44
47
  end
45
48
  default_config :aws_ssh_key_id do |driver|
46
49
  ENV['AWS_SSH_KEY_ID']
@@ -51,6 +54,11 @@ module Kitchen
51
54
  default_config :username do |driver|
52
55
  driver.default_username
53
56
  end
57
+ default_config :endpoint do |driver|
58
+ "https://ec2.#{driver[:region]}.amazonaws.com/"
59
+ end
60
+
61
+ default_config :interface, nil
54
62
 
55
63
  required_config :aws_access_key_id
56
64
  required_config :aws_secret_access_key
@@ -62,9 +70,11 @@ module Kitchen
62
70
  state[:server_id] = server.id
63
71
 
64
72
  info("EC2 instance <#{state[:server_id]}> created.")
65
- server.wait_for { print "."; ready? } ; print "(server ready)"
66
- state[:hostname] = server.public_ip_address || server.private_ip_address
67
- wait_for_sshd(state[:hostname], config[:username]) ; print "(ssh ready)\n"
73
+ server.wait_for { print '.'; ready? }
74
+ print '(server ready)'
75
+ state[:hostname] = hostname(server)
76
+ wait_for_sshd(state[:hostname], config[:username])
77
+ print '(ssh ready)\n'
68
78
  debug("ec2:create '#{state[:hostname]}'")
69
79
  rescue Fog::Errors::Error, Excon::Errors::Error => ex
70
80
  raise ActionFailed, ex.message
@@ -81,12 +91,12 @@ module Kitchen
81
91
  end
82
92
 
83
93
  def default_ami
84
- region = amis["regions"][config[:region]]
94
+ region = amis['regions'][config[:region]]
85
95
  region && region[instance.platform.name]
86
96
  end
87
97
 
88
98
  def default_username
89
- amis["usernames"][instance.platform.name] || "root"
99
+ amis['usernames'][instance.platform.name] || 'root'
90
100
  end
91
101
 
92
102
  private
@@ -96,7 +106,9 @@ module Kitchen
96
106
  :provider => :aws,
97
107
  :aws_access_key_id => config[:aws_access_key_id],
98
108
  :aws_secret_access_key => config[:aws_secret_access_key],
109
+ :aws_session_token => config[:aws_session_token],
99
110
  :region => config[:region],
111
+ :endpoint => config[:endpoint],
100
112
  )
101
113
  end
102
114
 
@@ -105,9 +117,10 @@ module Kitchen
105
117
 
106
118
  connection.servers.create(
107
119
  :availability_zone => config[:availability_zone],
108
- :groups => config[:groups],
120
+ :security_group_ids => config[:security_group_ids],
109
121
  :tags => config[:tags],
110
122
  :flavor_id => config[:flavor_id],
123
+ :ebs_optimized => config[:ebs_optimized],
111
124
  :image_id => config[:image_id],
112
125
  :key_name => config[:aws_ssh_key_id],
113
126
  :subnet_id => config[:subnet_id],
@@ -118,8 +131,9 @@ module Kitchen
118
131
  debug("ec2:region '#{config[:region]}'")
119
132
  debug("ec2:availability_zone '#{config[:availability_zone]}'")
120
133
  debug("ec2:flavor_id '#{config[:flavor_id]}'")
134
+ debug("ec2:ebs_optimized '#{config[:ebs_optimized]}'")
121
135
  debug("ec2:image_id '#{config[:image_id]}'")
122
- debug("ec2:groups '#{config[:groups]}'")
136
+ debug("ec2:security_group_ids '#{config[:security_group_ids]}'")
123
137
  debug("ec2:tags '#{config[:tags]}'")
124
138
  debug("ec2:key_name '#{config[:aws_ssh_key_id]}'")
125
139
  debug("ec2:subnet_id '#{config[:subnet_id]}'")
@@ -132,6 +146,25 @@ module Kitchen
132
146
  JSON.load(IO.read(json_file))
133
147
  end
134
148
  end
149
+
150
+ def interface_types
151
+ {
152
+ 'dns' => 'dns_name',
153
+ 'public' => 'public_ip_address',
154
+ 'private' => 'private_ip_address'
155
+ }
156
+ end
157
+
158
+ def hostname(server)
159
+ if config[:interface]
160
+ method = interface_types.fetch(config[:interface]) do
161
+ raise Kitchen::UserError, 'Invalid interface'
162
+ end
163
+ server.send(method)
164
+ else
165
+ server.dns_name || server.public_ip_address || server.private_ip_address
166
+ end
167
+ end
135
168
  end
136
169
  end
137
170
  end
@@ -21,6 +21,6 @@ module Kitchen
21
21
  module Driver
22
22
 
23
23
  # Version string for EC2 Test Kitchen driver
24
- EC2_VERSION = "0.7.0"
24
+ EC2_VERSION = '0.8.0'
25
25
  end
26
26
  end
@@ -0,0 +1,106 @@
1
+ require 'kitchen/driver/ec2'
2
+ require 'kitchen/provisioner/dummy'
3
+
4
+ describe Kitchen::Driver::Ec2 do
5
+
6
+ let(:config) do
7
+ {}
8
+ end
9
+
10
+ let(:state) do
11
+ {}
12
+ end
13
+
14
+ let(:server) do
15
+ double(:id => "123",
16
+ :wait_for => nil,
17
+ :dns_name => "server.example.com",
18
+ :private_ip_address => '172.13.16.11',
19
+ :public_ip_address => '213.225.123.134')
20
+ end
21
+
22
+ let(:instance) do
23
+ Kitchen::Instance.new(:platform => double(:name => "centos-6.4"),
24
+ :suite => double(:name => "default"),
25
+ :driver => driver,
26
+ :provisioner => Kitchen::Provisioner::Dummy.new({}),
27
+ :busser => double("busser"),
28
+ :state_file => double("state_file"))
29
+ end
30
+
31
+ let(:driver) do
32
+ Kitchen::Driver::Ec2.new(config)
33
+ end
34
+
35
+ before do
36
+ instance
37
+ allow(driver).to receive(:create_server).and_return(server)
38
+ allow(driver).to receive(:wait_for_sshd)
39
+ end
40
+
41
+ context 'Interface is set in config' do
42
+
43
+ it 'derives hostname from DNS when specified in the .kitchen.yml' do
44
+ config[:interface] = 'dns'
45
+ driver.create(state)
46
+ expect(state[:hostname]).to eql('server.example.com')
47
+ end
48
+
49
+ it 'derives hostname from public interface when specified in the .kitchen.yml' do
50
+ config[:interface] = 'public'
51
+ driver.create(state)
52
+ expect(state[:hostname]).to eql('213.225.123.134')
53
+ end
54
+
55
+ it 'derives hostname from private interface when specified in the .kitchen.yml' do
56
+ config[:interface] = 'private'
57
+ driver.create(state)
58
+ expect(state[:hostname]).to eql('172.13.16.11')
59
+ end
60
+
61
+ it 'throws a nice exception if the config is bogus' do
62
+ config[:interface] = 'I am an idiot'
63
+ expect { driver.create(state) }.to raise_error(Kitchen::UserError, 'Invalid interface')
64
+ end
65
+
66
+ end
67
+
68
+ context 'Interface is derived automatically' do
69
+
70
+ let(:server) do
71
+ double(:id => "123",
72
+ :wait_for => nil,
73
+ :dns_name => nil,
74
+ :private_ip_address => nil,
75
+ :public_ip_address => nil)
76
+ end
77
+
78
+ it 'sets hostname to DNS value if DNS value exists' do
79
+ allow(server).to receive(:dns_name).and_return('server.example.com')
80
+ driver.create(state)
81
+ expect(state[:hostname]).to eql('server.example.com')
82
+ end
83
+
84
+ it 'sets hostname to public value if public value exists' do
85
+ allow(server).to receive(:public_ip_address).and_return('213.225.123.134')
86
+ driver.create(state)
87
+
88
+ expect(state[:hostname]).to eql('213.225.123.134')
89
+ end
90
+
91
+ it 'sets hostname to private value if private value exists' do
92
+ allow(server).to receive(:private_ip_address).and_return('172.13.16.11')
93
+ driver.create(state)
94
+ expect(state[:hostname]).to eql('172.13.16.11')
95
+ end
96
+
97
+ it 'sets hostname to DNS if one or more Public/Private values are set' do
98
+ allow(server).to receive(:dns_name).and_return('server.example.com')
99
+ allow(server).to receive(:public_ip_address).and_return('213.225.123.134')
100
+ allow(server).to receive(:private_ip_address).and_return('172.13.16.11')
101
+ driver.create(state)
102
+ expect(state[:hostname]).to eql('server.example.com')
103
+ end
104
+
105
+ end
106
+ end
metadata CHANGED
@@ -1,96 +1,110 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen-ec2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fletcher Nichol
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-29 00:00:00.000000000 Z
11
+ date: 2014-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-kitchen
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.0.beta.3
19
+ version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.0.0.beta.3
26
+ version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: fog
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: cane
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - '>='
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
61
  version: '0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - '>='
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: tailor
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - '>='
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
75
  version: '0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - '>='
80
+ - - ">="
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: countloc
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - '>='
87
+ - - ">="
74
88
  - !ruby/object:Gem::Version
75
89
  version: '0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - '>='
94
+ - - ">="
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
- description: Kitchen::Driver::Ec2 - A Test Kitchen Driver for Ec2
97
+ description: A Test Kitchen Driver for Amazon EC2
84
98
  email:
85
99
  - fnichol@nichol.ca
86
100
  executables: []
87
101
  extensions: []
88
102
  extra_rdoc_files: []
89
103
  files:
90
- - .cane
91
- - .gitignore
92
- - .tailor
93
- - .travis.yml
104
+ - ".cane"
105
+ - ".gitignore"
106
+ - ".tailor"
107
+ - ".travis.yml"
94
108
  - CHANGELOG.md
95
109
  - Gemfile
96
110
  - LICENSE
@@ -100,7 +114,8 @@ files:
100
114
  - kitchen-ec2.gemspec
101
115
  - lib/kitchen/driver/ec2.rb
102
116
  - lib/kitchen/driver/ec2_version.rb
103
- homepage: https://github.com/opscode/kitchen-ec2/
117
+ - spec/create_spec.rb
118
+ homepage: http://kitchen.ci/
104
119
  licenses:
105
120
  - Apache 2.0
106
121
  metadata: {}
@@ -110,18 +125,19 @@ require_paths:
110
125
  - lib
111
126
  required_ruby_version: !ruby/object:Gem::Requirement
112
127
  requirements:
113
- - - '>='
128
+ - - ">="
114
129
  - !ruby/object:Gem::Version
115
130
  version: '0'
116
131
  required_rubygems_version: !ruby/object:Gem::Requirement
117
132
  requirements:
118
- - - '>='
133
+ - - ">="
119
134
  - !ruby/object:Gem::Version
120
135
  version: '0'
121
136
  requirements: []
122
137
  rubyforge_project:
123
- rubygems_version: 2.0.3
138
+ rubygems_version: 2.2.0
124
139
  signing_key:
125
140
  specification_version: 4
126
- summary: Kitchen::Driver::Ec2 - A Test Kitchen Driver for Ec2
127
- test_files: []
141
+ summary: A Test Kitchen Driver for Amazon EC2
142
+ test_files:
143
+ - spec/create_spec.rb